From b5294a456497dfde026afb4cec96b73b741f718c Mon Sep 17 00:00:00 2001 From: Zhao Hang Date: Mon, 5 Dec 2022 11:34:50 +0800 Subject: [PATCH] update to gnome-control-center-40.0-27.el9 Signed-off-by: Zhao Hang --- ...common-fix-udev-based-device-removal.patch | 75 - ...play-configuration-options-if-apply-.patch | 102 +- ...t-enlarge-display-panel-artificially.patch | 41 - 0001-network-Fix-OWE-settings.patch | 12 +- ...ef-on-NetDeviceEthernet-while-a-edit.patch | 46 - ...4-v6-pages-drive-the-scrolledwindow-.patch | 72 - ...list-in-new-VPN-dialog-fill-up-space.patch | 27 - ...k-Populate-AP-list-from-idle-handler.patch | 73 - ...PN-empty-label-status-after-removing.patch | 63 - ...etwork-Use-connect-object-on-signals.patch | 40 - ...gnal_connect_object-when-dealing-wit.patch | 55 - ...rect-the-value-of-90-minutes-to-5400.patch | 25 - ...ettings-widget-for-gnome-remote-desk.patch | 383 - ...g-Fix-warning-when-disabling-sharing.patch | 30 - ...-the-password-on-remote-desktop-shar.patch | 66 - 0001-shell-Don-t-set-per-panel-icon.patch | 47 - ...preserve-sound-theme-when-changing-f.patch | 36 - ...evices-with-more-than-5-enroll-steps.patch | 102 - ...com-s-Generic-Pen-stylus-if-tool-ID-.patch | 31 - ...t-your-settings-button-sensitivity-o.patch | 72 - ...wacom-Update-to-newer-output-setting.patch | 41 - 0002-ce-page-security-add-SAE-support.patch | 61 - ...-for-getting-subscription-status-to-.patch | 228 - ...on-name-helper-returns-symbolic-name.patch | 78 - 0003-ce-page-details-add-SAE-support.patch | 37 - ...stration-state-in-panel-when-it-happ.patch | 654 - ...bolt-new-panel-for-device-management.patch | 6388 ---- ...ort-registered-but-no-subscriptions-.patch | 1367 - ...t-device-wifi-Decode-SAE-AP-security.patch | 42 - ...thunderbolt-move-to-the-Devices-page.patch | 51 - 0005-network-complete-SAE-support.patch | 477 - ...port-for-Enhanced-Open-WiFi-security.patch | 114 - ...ection-selection-and-SSID-display-fo.patch | 216 - ...ng-passwords-for-non-wifi-connection.patch | 51 - Update-translations.patch | 25594 ---------------- application-use-icon-name-that-exists.patch | 42 + backport-multitasking-panel.patch | 15005 +++++++++ backport-wacom-tool-id-fixes.patch | 102 - categorize-infiniband.patch | 708 - change-device-name-with-enter-key.patch | 81 + ...y-infobar-if-night-light-unsupported.patch | 416 + dist | 1 + distro-logo.patch | 272 +- download | 2 +- ...the-unused-build-dependency-on-Grilo.patch | 1385 + ...ch => gnome-control-center-timezones.patch | 2630 +- gnome-control-center.spec | 590 +- power-profiles-backport.patch | 5102 +++ printers-Update-entries.patch | 644 - rpminspect-desktop-fixes.patch | 64 + ...atch => subscription-manager-support.patch | 1582 +- wwan-backport-gnome-40.patch | 9200 ++++++ 52 files changed, 33908 insertions(+), 40715 deletions(-) delete mode 100644 0001-common-fix-udev-based-device-removal.patch delete mode 100644 0001-displays-Don-t-enlarge-display-panel-artificially.patch delete mode 100644 0001-network-Keep-a-ref-on-NetDeviceEthernet-while-a-edit.patch delete mode 100644 0001-network-Make-IPv4-v6-pages-drive-the-scrolledwindow-.patch delete mode 100644 0001-network-Make-list-in-new-VPN-dialog-fill-up-space.patch delete mode 100644 0001-network-Populate-AP-list-from-idle-handler.patch delete mode 100644 0001-network-Update-VPN-empty-label-status-after-removing.patch delete mode 100644 0001-network-Use-connect-object-on-signals.patch delete mode 100644 0001-network-Use-g_signal_connect_object-when-dealing-wit.patch delete mode 100644 0001-power-correct-the-value-of-90-minutes-to-5400.patch delete mode 100644 0001-sharing-Enable-settings-widget-for-gnome-remote-desk.patch delete mode 100644 0001-sharing-Fix-warning-when-disabling-sharing.patch delete mode 100644 0001-sharing-Remember-the-password-on-remote-desktop-shar.patch delete mode 100644 0001-shell-Don-t-set-per-panel-icon.patch delete mode 100644 0001-sound-Ensure-to-preserve-sound-theme-when-changing-f.patch delete mode 100644 0001-user-Support-devices-with-more-than-5-enroll-steps.patch delete mode 100644 0001-wacom-Pick-libwacom-s-Generic-Pen-stylus-if-tool-ID-.patch delete mode 100644 0001-wacom-Update-Test-your-settings-button-sensitivity-o.patch delete mode 100644 0001-wacom-Update-to-newer-output-setting.patch delete mode 100644 0002-ce-page-security-add-SAE-support.patch delete mode 100644 0002-info-Move-helper-for-getting-subscription-status-to-.patch delete mode 100644 0002-shell-Icon-name-helper-returns-symbolic-name.patch delete mode 100644 0003-ce-page-details-add-SAE-support.patch delete mode 100644 0003-info-Update-registration-state-in-panel-when-it-happ.patch delete mode 100644 0003-thunderbolt-new-panel-for-device-management.patch delete mode 100644 0004-info-Better-support-registered-but-no-subscriptions-.patch delete mode 100644 0004-net-device-wifi-Decode-SAE-AP-security.patch delete mode 100644 0004-thunderbolt-move-to-the-Devices-page.patch delete mode 100644 0005-network-complete-SAE-support.patch delete mode 100644 0006-Add-support-for-Enhanced-Open-WiFi-security.patch delete mode 100644 0007-network-Fix-connection-selection-and-SSID-display-fo.patch delete mode 100644 0008-network-Fix-saving-passwords-for-non-wifi-connection.patch delete mode 100644 Update-translations.patch create mode 100644 application-use-icon-name-that-exists.patch create mode 100644 backport-multitasking-panel.patch delete mode 100644 backport-wacom-tool-id-fixes.patch delete mode 100644 categorize-infiniband.patch create mode 100644 change-device-name-with-enter-key.patch create mode 100644 display-infobar-if-night-light-unsupported.patch create mode 100644 dist create mode 100644 gnome-control-center-Drop-the-unused-build-dependency-on-Grilo.patch rename 0001-timezone-use-blank-map.patch => gnome-control-center-timezones.patch (92%) create mode 100644 power-profiles-backport.patch delete mode 100644 printers-Update-entries.patch create mode 100644 rpminspect-desktop-fixes.patch rename 0001-info-Add-subscription-manager-integration.patch => subscription-manager-support.patch (71%) create mode 100644 wwan-backport-gnome-40.patch diff --git a/0001-common-fix-udev-based-device-removal.patch b/0001-common-fix-udev-based-device-removal.patch deleted file mode 100644 index 4032f3e..0000000 --- a/0001-common-fix-udev-based-device-removal.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 6b34f996699a80c249d2cccfe369b3b61e70d4ce Mon Sep 17 00:00:00 2001 -From: Peter Hutterer -Date: Mon, 10 Dec 2018 14:43:30 +1000 -Subject: [PATCH] common: fix udev-based device removal - -libgudev allocs a new GUdevDevice object for each event, so the pointer value -for the 'add' udev event differs from the one for the 'remove' event. If we -use the pointer value as hash table key, we'll never remove the device. -Switch to use the syspath of the device instead, that one is unique per -device. - -Fixes #309 ---- - panels/common/gsd-device-manager-udev.c | 16 ++++++++++------ - 1 file changed, 10 insertions(+), 6 deletions(-) - -diff --git a/panels/common/gsd-device-manager-udev.c b/panels/common/gsd-device-manager-udev.c -index aa9304232..105c8e987 100644 ---- a/panels/common/gsd-device-manager-udev.c -+++ b/panels/common/gsd-device-manager-udev.c -@@ -122,6 +122,7 @@ add_device (GsdUdevDeviceManager *manager, - { - GUdevDevice *parent; - GsdDevice *device; -+ gchar *syspath; - - parent = g_udev_device_get_parent (udev_device); - -@@ -129,7 +130,8 @@ add_device (GsdUdevDeviceManager *manager, - return; - - device = create_device (udev_device); -- g_hash_table_insert (manager->devices, g_object_ref (udev_device), device); -+ syspath = g_strdup (g_udev_device_get_sysfs_path (udev_device)); -+ g_hash_table_insert (manager->devices, syspath, device); - g_signal_emit_by_name (manager, "device-added", device); - } - -@@ -138,17 +140,19 @@ remove_device (GsdUdevDeviceManager *manager, - GUdevDevice *udev_device) - { - GsdDevice *device; -+ gchar *syspath; - -- device = g_hash_table_lookup (manager->devices, udev_device); -+ syspath = g_strdup (g_udev_device_get_sysfs_path (udev_device)); -+ device = g_hash_table_lookup (manager->devices, syspath); - - if (!device) - return; - -- g_hash_table_steal (manager->devices, udev_device); -+ g_hash_table_steal (manager->devices, syspath); - g_signal_emit_by_name (manager, "device-removed", device); - - g_object_unref (device); -- g_object_unref (udev_device); -+ g_free (syspath); - } - - static void -@@ -173,8 +177,8 @@ gsd_udev_device_manager_init (GsdUdevDeviceManager *manager) - const gchar *subsystems[] = { "input", NULL }; - GList *devices, *l; - -- manager->devices = g_hash_table_new_full (NULL, NULL, -- (GDestroyNotify) g_object_unref, -+ manager->devices = g_hash_table_new_full (g_str_hash, g_str_equal, -+ (GDestroyNotify) g_free, - (GDestroyNotify) g_object_unref); - - manager->udev_client = g_udev_client_new (subsystems); --- -2.24.0 - diff --git a/0001-display-Only-display-configuration-options-if-apply-.patch b/0001-display-Only-display-configuration-options-if-apply-.patch index 9916dbb..54cdd38 100644 --- a/0001-display-Only-display-configuration-options-if-apply-.patch +++ b/0001-display-Only-display-configuration-options-if-apply-.patch @@ -1,6 +1,6 @@ -From 22c43422f83a69d7654953db368585f168952aab Mon Sep 17 00:00:00 2001 +From f6e0cba768d376a7f710dd8a69c17ec50c7a13a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= -Date: Fri, 4 Feb 2022 11:45:53 +0100 +Date: Fri, 4 Feb 2022 11:09:24 +0100 Subject: [PATCH] display: Only display configuration options if apply is allowed @@ -16,11 +16,12 @@ 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(+) + panels/display/cc-display-panel.c | 11 ++++++ + panels/display/cc-display-panel.ui | 2 +- + 5 files changed, 57 insertions(+), 1 deletion(-) diff --git a/panels/display/cc-display-config-manager-dbus.c b/panels/display/cc-display-config-manager-dbus.c -index 8912faaa8..7f85c3a01 100644 +index 653bea0b5..392140101 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 @@ -32,16 +33,16 @@ index 8912faaa8..7f85c3a01 100644 }; G_DEFINE_TYPE (CcDisplayConfigManagerDBus, -@@ -119,6 +121,8 @@ bus_gotten (GObject *object, +@@ -118,6 +120,8 @@ bus_gotten (GObject *object, CcDisplayConfigManagerDBus *self; GDBusConnection *connection; - GError *error = NULL; + g_autoptr(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, +@@ -143,12 +147,35 @@ bus_gotten (GObject *object, monitors_changed, self, NULL); @@ -77,7 +78,7 @@ index 8912faaa8..7f85c3a01 100644 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) +@@ -170,6 +197,14 @@ cc_display_config_manager_dbus_finalize (GObject *object) G_OBJECT_CLASS (cc_display_config_manager_dbus_parent_class)->finalize (object); } @@ -92,7 +93,7 @@ index 8912faaa8..7f85c3a01 100644 static void cc_display_config_manager_dbus_class_init (CcDisplayConfigManagerDBusClass *klass) { -@@ -181,6 +216,7 @@ cc_display_config_manager_dbus_class_init (CcDisplayConfigManagerDBusClass *klas +@@ -179,6 +214,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; @@ -115,10 +116,10 @@ index 0da298a29..3d683c53d 100644 + 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 +index 1e1b36373..64f0775e9 100644 --- a/panels/display/cc-display-config-manager.h +++ b/panels/display/cc-display-config-manager.h -@@ -35,10 +35,13 @@ struct _CcDisplayConfigManagerClass +@@ -34,10 +34,13 @@ struct _CcDisplayConfigManagerClass GObjectClass parent_class; CcDisplayConfig * (*get_current) (CcDisplayConfigManager *self); @@ -133,53 +134,56 @@ index 134cea0a1..22c16758c 100644 G_END_DECLS diff --git a/panels/display/cc-display-panel.c b/panels/display/cc-display-panel.c -index 0b4fa193d..1b0db8321 100644 +index 93c983f89..2cfd714d3 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; - } +@@ -69,6 +69,8 @@ struct _CcDisplayPanel -+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); -+} + gint rebuilding_counter; + ++ GtkWidget *displays_page; + - static GtkWidget * - make_single_output_ui (CcDisplayPanel *panel) - { -@@ -2097,6 +2113,12 @@ on_screen_changed (CcDisplayPanel *panel) - if (!priv->current_config) - goto show_error; + CcDisplayArrangement *arrangement; + CcDisplaySettings *settings; + +@@ -691,6 +693,7 @@ cc_display_panel_class_init (CcDisplayPanelClass *klass) + gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, current_output_label); + gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, display_settings_frame); + gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, multi_selection_box); ++ gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, displays_page); + gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, night_light_page); + gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, output_enabled_switch); + gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, output_selection_combo); +@@ -779,8 +782,16 @@ rebuild_ui (CcDisplayPanel *panel) + GList *outputs, *l; + CcDisplayConfigType type; -+ if (!cc_display_config_manager_get_apply_allowed (priv->manager)) ++ if (!cc_display_config_manager_get_apply_allowed (panel->manager)) + { -+ main_widget = make_night_light_only_ui (panel); -+ goto show_main_widget; ++ gtk_widget_set_visible (panel->displays_page, FALSE); ++ return; + } + - ensure_monitor_labels (panel); + panel->rebuilding_counter++; + ++ gtk_widget_set_visible (panel->displays_page, TRUE); ++ + g_list_store_remove_all (panel->primary_display_list); + gtk_list_store_clear (panel->output_selection_list); - if (!priv->current_output) -@@ -2121,6 +2143,7 @@ on_screen_changed (CcDisplayPanel *panel) - main_widget = make_multi_output_ui (panel); - } +diff --git a/panels/display/cc-display-panel.ui b/panels/display/cc-display-panel.ui +index 855b34814..80fd63ace 100644 +--- a/panels/display/cc-display-panel.ui ++++ b/panels/display/cc-display-panel.ui +@@ -47,7 +47,7 @@ -+ 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); + + +- ++ + True + False + never -- 2.33.1 diff --git a/0001-displays-Don-t-enlarge-display-panel-artificially.patch b/0001-displays-Don-t-enlarge-display-panel-artificially.patch deleted file mode 100644 index 6f4cda7..0000000 --- a/0001-displays-Don-t-enlarge-display-panel-artificially.patch +++ /dev/null @@ -1,41 +0,0 @@ -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/0001-network-Fix-OWE-settings.patch b/0001-network-Fix-OWE-settings.patch index f28b4cb..0cd0505 100644 --- a/0001-network-Fix-OWE-settings.patch +++ b/0001-network-Fix-OWE-settings.patch @@ -1,4 +1,4 @@ -From 5b280e46029f1d857fb69ccc0db2e63b8a0e3c82 Mon Sep 17 00:00:00 2001 +From 43bb1d9200554527cefaa2ce969bebc80d781c73 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 @@ -21,19 +21,19 @@ https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1521 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 +index a63b9394a..c7cd7d940 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); +@@ -460,10 +460,25 @@ ce_page_security_validate (CEPage *page, + } + } } 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) { ++ if (gtk_combo_box_get_active ((CE_PAGE_SECURITY (self))->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); diff --git a/0001-network-Keep-a-ref-on-NetDeviceEthernet-while-a-edit.patch b/0001-network-Keep-a-ref-on-NetDeviceEthernet-while-a-edit.patch deleted file mode 100644 index b134004..0000000 --- a/0001-network-Keep-a-ref-on-NetDeviceEthernet-while-a-edit.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 711afc3a83ba32b62ea813bb5bd79fb96207ef61 Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Thu, 28 Nov 2019 16:38:03 +0100 -Subject: [PATCH] network: Keep a ref on NetDeviceEthernet while a edition - dialog is open - -Otherwise, invoking other panel (eg. through shell search, or CLI) and -closing the dialog will result in a crash, as the NetDeviceEthernet -object does no longer exist. ---- - panels/network/net-device-ethernet.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/panels/network/net-device-ethernet.c b/panels/network/net-device-ethernet.c -index a03fa8de3..b035ce81c 100644 ---- a/panels/network/net-device-ethernet.c -+++ b/panels/network/net-device-ethernet.c -@@ -233,6 +233,7 @@ editor_done (NetConnectionEditor *editor, - { - g_object_unref (editor); - device_ethernet_refresh_ui (device); -+ g_object_unref (device); - } - - static void -@@ -255,7 +256,7 @@ show_details (GtkButton *button, NetDeviceEthernet *device, const gchar *title) - editor = net_connection_editor_new (GTK_WINDOW (window), connection, nmdev, NULL, client); - if (title) - net_connection_editor_set_title (editor, title); -- g_signal_connect (editor, "done", G_CALLBACK (editor_done), device); -+ g_signal_connect (editor, "done", G_CALLBACK (editor_done), g_object_ref (device)); - net_connection_editor_run (editor); - } - -@@ -455,7 +456,7 @@ add_profile (GtkButton *button, NetDeviceEthernet *device) - - nmdev = net_device_get_nm_device (NET_DEVICE (device)); - editor = net_connection_editor_new (GTK_WINDOW (window), connection, nmdev, NULL, client); -- g_signal_connect (editor, "done", G_CALLBACK (editor_done), device); -+ g_signal_connect (editor, "done", G_CALLBACK (editor_done), g_object_ref (device)); - net_connection_editor_run (editor); - } - --- -2.24.0 - diff --git a/0001-network-Make-IPv4-v6-pages-drive-the-scrolledwindow-.patch b/0001-network-Make-IPv4-v6-pages-drive-the-scrolledwindow-.patch deleted file mode 100644 index b52a5dc..0000000 --- a/0001-network-Make-IPv4-v6-pages-drive-the-scrolledwindow-.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 0f7a591fa691bc826cee19ae01a6338145119aee Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Thu, 12 Dec 2019 16:20:57 +0100 -Subject: [PATCH] network: Make IPv4/v6 pages drive the scrolledwindow - adjustments - -Those 2 pages in the connection editor dialog are scrollable, but don't -hook focus changes so they drive the adjustments. Make them do so. ---- - panels/network/connection-editor/ce-page-ip4.c | 3 +++ - panels/network/connection-editor/ce-page-ip6.c | 3 +++ - panels/network/connection-editor/ip4-page.ui | 2 +- - panels/network/connection-editor/ip6-page.ui | 2 +- - 4 files changed, 8 insertions(+), 2 deletions(-) - -diff --git a/panels/network/connection-editor/ce-page-ip4.c b/panels/network/connection-editor/ce-page-ip4.c -index 400dc433d..d79e9a3dd 100644 ---- a/panels/network/connection-editor/ce-page-ip4.c -+++ b/panels/network/connection-editor/ce-page-ip4.c -@@ -515,6 +515,9 @@ connect_ip4_page (CEPageIP4 *page) - gboolean disabled; - guint method, i; - -+ gtk_container_set_focus_vadjustment (GTK_CONTAINER (gtk_builder_get_object (CE_PAGE (page)->builder, "main_box")), -+ gtk_scrolled_window_get_vadjustment (gtk_builder_get_object (CE_PAGE (page)->builder, "page"))); -+ - add_address_section (page); - add_dns_section (page); - add_routes_section (page); -diff --git a/panels/network/connection-editor/ce-page-ip6.c b/panels/network/connection-editor/ce-page-ip6.c -index 995197504..f7105cc5b 100644 ---- a/panels/network/connection-editor/ce-page-ip6.c -+++ b/panels/network/connection-editor/ce-page-ip6.c -@@ -485,6 +485,9 @@ connect_ip6_page (CEPageIP6 *page) - gboolean disabled; - guint method, i; - -+ gtk_container_set_focus_vadjustment (GTK_CONTAINER (gtk_builder_get_object (CE_PAGE (page)->builder, "main_box")), -+ gtk_scrolled_window_get_vadjustment (gtk_builder_get_object (CE_PAGE (page)->builder, "page"))); -+ - add_address_section (page); - add_dns_section (page); - add_routes_section (page); -diff --git a/panels/network/connection-editor/ip4-page.ui b/panels/network/connection-editor/ip4-page.ui -index fe5d407c9..597987d57 100644 ---- a/panels/network/connection-editor/ip4-page.ui -+++ b/panels/network/connection-editor/ip4-page.ui -@@ -10,7 +10,7 @@ - True - False - -- -+ - True - False - 24 -diff --git a/panels/network/connection-editor/ip6-page.ui b/panels/network/connection-editor/ip6-page.ui -index 6d39bd0ec..5164b1004 100644 ---- a/panels/network/connection-editor/ip6-page.ui -+++ b/panels/network/connection-editor/ip6-page.ui -@@ -10,7 +10,7 @@ - True - False - -- -+ - True - False - 24 --- -2.23.0 - diff --git a/0001-network-Make-list-in-new-VPN-dialog-fill-up-space.patch b/0001-network-Make-list-in-new-VPN-dialog-fill-up-space.patch deleted file mode 100644 index acfdc3e..0000000 --- a/0001-network-Make-list-in-new-VPN-dialog-fill-up-space.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 5e0840c52fc5a3e2334ef3a50aa15e320f2f074e Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Fri, 29 Nov 2019 20:45:32 +0100 -Subject: [PATCH] network: Make list in "new VPN" dialog fill up space - -If we don't have much content on it (Due to lack of VPN NM modules), -the list will look oddly centered. Have it fill the available space. ---- - panels/network/connection-editor/connection-editor.ui | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/panels/network/connection-editor/connection-editor.ui b/panels/network/connection-editor/connection-editor.ui -index 4495c728d..9214b6463 100644 ---- a/panels/network/connection-editor/connection-editor.ui -+++ b/panels/network/connection-editor/connection-editor.ui -@@ -93,7 +93,7 @@ - - - True -- False -+ True - 0 - - --- -2.24.0 - diff --git a/0001-network-Populate-AP-list-from-idle-handler.patch b/0001-network-Populate-AP-list-from-idle-handler.patch deleted file mode 100644 index f5b4b26..0000000 --- a/0001-network-Populate-AP-list-from-idle-handler.patch +++ /dev/null @@ -1,73 +0,0 @@ -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/0001-network-Update-VPN-empty-label-status-after-removing.patch b/0001-network-Update-VPN-empty-label-status-after-removing.patch deleted file mode 100644 index 10050b2..0000000 --- a/0001-network-Update-VPN-empty-label-status-after-removing.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 3f089ddbd8cc304c563b4ed8cfbc59d27ffadc00 Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Thu, 12 Dec 2019 22:43:15 +0100 -Subject: [PATCH] network: Update VPN empty label status after removing VPN - connection - -Being the VPN list actually a collection of listboxes, this function -ensures it looks alright in other places. However the case of removing -all VPN connections till we're back empty was missed. ---- - panels/network/cc-network-panel.c | 29 +++++++++++++++++++++++++++++ - 1 file changed, 29 insertions(+) - -diff --git a/panels/network/cc-network-panel.c b/panels/network/cc-network-panel.c -index 1a072a65a..f08d9b939 100644 ---- a/panels/network/cc-network-panel.c -+++ b/panels/network/cc-network-panel.c -@@ -761,6 +761,33 @@ notify_connection_added_cb (NMClient *client, - add_connection (panel, NM_CONNECTION (connection)); - } - -+static void -+notify_connection_removed_cb (NMClient *client, -+ NMRemoteConnection *connection, -+ CcNetworkPanel *panel) -+{ -+ guint i; -+ -+ for (i = 0; i < panel->devices->len; i++) { -+ NetObject *object = g_ptr_array_index (panel->devices, i); -+ NMConnection *vpn_conn; -+ gboolean equal; -+ -+ if (!NET_IS_VPN (object)) -+ continue; -+ -+ g_object_get (object, "connection", &vpn_conn, NULL); -+ equal = vpn_conn == NM_CONNECTION (connection); -+ g_object_unref (vpn_conn); -+ -+ if (equal) { -+ g_ptr_array_remove (panel->devices, object); -+ update_vpn_section (panel); -+ return; -+ } -+ } -+} -+ - static void - panel_check_network_manager_version (CcNetworkPanel *panel) - { -@@ -912,6 +939,8 @@ cc_network_panel_init (CcNetworkPanel *panel) - /* add remote settings such as VPN settings as virtual devices */ - g_signal_connect (panel->client, NM_CLIENT_CONNECTION_ADDED, - G_CALLBACK (notify_connection_added_cb), panel); -+ g_signal_connect (panel->client, NM_CLIENT_CONNECTION_REMOVED, -+ G_CALLBACK (notify_connection_removed_cb), panel); - - toplevel = gtk_widget_get_toplevel (GTK_WIDGET (panel)); - g_signal_connect_after (toplevel, "map", G_CALLBACK (on_toplevel_map), panel); --- -2.23.0 - diff --git a/0001-network-Use-connect-object-on-signals.patch b/0001-network-Use-connect-object-on-signals.patch deleted file mode 100644 index a4c4c11..0000000 --- a/0001-network-Use-connect-object-on-signals.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 3f7c47e70915bb085d956d0b3c36d36e4c0da05b Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Mon, 16 Dec 2019 14:06:43 +0100 -Subject: [PATCH] network: Use connect object on signals - -This ensures the signals are disconnected on panel finalization. ---- - panels/network/cc-network-panel.c | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - -diff --git a/panels/network/cc-network-panel.c b/panels/network/cc-network-panel.c -index 1a072a65a..deb4b967e 100644 ---- a/panels/network/cc-network-panel.c -+++ b/panels/network/cc-network-panel.c -@@ -881,14 +881,14 @@ cc_network_panel_init (CcNetworkPanel *panel) - - /* use NetworkManager client */ - panel->client = nm_client_new (NULL, NULL); -- g_signal_connect (panel->client, "notify::nm-running" , -- G_CALLBACK (manager_running), panel); -- g_signal_connect (panel->client, "notify::active-connections", -- G_CALLBACK (active_connections_changed), panel); -- g_signal_connect (panel->client, "device-added", -- G_CALLBACK (device_added_cb), panel); -- g_signal_connect (panel->client, "device-removed", -- G_CALLBACK (device_removed_cb), panel); -+ g_signal_connect_object (panel->client, "notify::nm-running" , -+ G_CALLBACK (manager_running), panel, 0); -+ g_signal_connect_object (panel->client, "notify::active-connections", -+ G_CALLBACK (active_connections_changed), panel, 0); -+ g_signal_connect_object (panel->client, "device-added", -+ G_CALLBACK (device_added_cb), panel, 0); -+ g_signal_connect_object (panel->client, "device-removed", -+ G_CALLBACK (device_removed_cb), panel, 0); - - /* Setup ModemManager client */ - system_bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error); --- -2.24.0 - diff --git a/0001-network-Use-g_signal_connect_object-when-dealing-wit.patch b/0001-network-Use-g_signal_connect_object-when-dealing-wit.patch deleted file mode 100644 index d10501b..0000000 --- a/0001-network-Use-g_signal_connect_object-when-dealing-wit.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 06b1f439c05a20b790cebb850d8ba514249583c4 Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Tue, 3 Dec 2019 16:56:59 +0100 -Subject: [PATCH] network: Use g_signal_connect_object() when dealing with - NMClient - -We may get signal emissions and property changes during NMClient -destruction, triggered from CcWifiPanel destruction. This triggers -callbacks that were not meant to trigger on panel destruction. ---- - panels/network/cc-wifi-panel.c | 28 ++++++++++++++-------------- - 1 file changed, 14 insertions(+), 14 deletions(-) - -diff --git a/panels/network/cc-wifi-panel.c b/panels/network/cc-wifi-panel.c -index 2c1cd17b7..7dd182e59 100644 ---- a/panels/network/cc-wifi-panel.c -+++ b/panels/network/cc-wifi-panel.c -@@ -621,20 +621,20 @@ cc_wifi_panel_init (CcWifiPanel *self) - /* Load NetworkManager */ - self->client = nm_client_new (NULL, NULL); - -- g_signal_connect (self->client, -- "device-added", -- G_CALLBACK (device_added_cb), -- self); -- -- g_signal_connect (self->client, -- "device-removed", -- G_CALLBACK (device_removed_cb), -- self); -- -- g_signal_connect (self->client, -- "notify::wireless-enabled", -- G_CALLBACK (wireless_enabled_cb), -- self); -+ g_signal_connect_object (self->client, -+ "device-added", -+ G_CALLBACK (device_added_cb), -+ self, 0); -+ -+ g_signal_connect_object (self->client, -+ "device-removed", -+ G_CALLBACK (device_removed_cb), -+ self, 0); -+ -+ g_signal_connect_object (self->client, -+ "notify::wireless-enabled", -+ G_CALLBACK (wireless_enabled_cb), -+ self, 0); - - /* Load Wi-Fi devices */ - load_wifi_devices (self); --- -2.24.0 - diff --git a/0001-power-correct-the-value-of-90-minutes-to-5400.patch b/0001-power-correct-the-value-of-90-minutes-to-5400.patch deleted file mode 100644 index 35218f6..0000000 --- a/0001-power-correct-the-value-of-90-minutes-to-5400.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 7b3c55a3e6c53a54a140c59c8a18d9b18e1cc4e5 Mon Sep 17 00:00:00 2001 -From: Ethan Hsieh -Date: Thu, 2 May 2019 13:28:09 +0800 -Subject: [PATCH] power: correct the value of 90 minutes to 5400 - ---- - panels/power/power.ui | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/panels/power/power.ui b/panels/power/power.ui -index 2c113b238..60fdc10dc 100644 ---- a/panels/power/power.ui -+++ b/panels/power/power.ui -@@ -39,7 +39,7 @@ - - - 90 minutes -- 4800 -+ 5400 - - - 100 minutes --- -2.24.0 - diff --git a/0001-sharing-Enable-settings-widget-for-gnome-remote-desk.patch b/0001-sharing-Enable-settings-widget-for-gnome-remote-desk.patch deleted file mode 100644 index 3d64836..0000000 --- a/0001-sharing-Enable-settings-widget-for-gnome-remote-desk.patch +++ /dev/null @@ -1,383 +0,0 @@ -From f135d985e80c85e1578cd60eeb79bd974788031f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jonas=20=C3=85dahl?= -Date: Wed, 14 Feb 2018 20:52:37 +0800 -Subject: [PATCH] sharing: Enable settings widget for gnome-remote-desktop - -Enable support for manipulating GNOME Remote Desktop settings. Settings -are done via the org.gnome.desktop.remote-desktop.vnc schema. -Configuring the VNC password is done via libsecret, thus libsecret is -added as a dependency. ---- - meson.build | 1 + - panels/sharing/cc-gnome-remote-desktop.c | 171 +++++++++++++++++++++++ - panels/sharing/cc-gnome-remote-desktop.h | 49 +++++++ - panels/sharing/cc-sharing-panel.c | 62 +++++++- - panels/sharing/meson.build | 3 +- - 5 files changed, 282 insertions(+), 4 deletions(-) - create mode 100644 panels/sharing/cc-gnome-remote-desktop.c - create mode 100644 panels/sharing/cc-gnome-remote-desktop.h - -diff --git a/meson.build b/meson.build -index 84e04334c..3017b180a 100644 ---- a/meson.build -+++ b/meson.build -@@ -109,6 +109,7 @@ pulse_mainloop_dep = dependency('libpulse-mainloop-glib', version: pulse_req_ver - upower_glib_dep = dependency('upower-glib', version: '>= 0.99.6') - x11_dep = dependency('x11') - xi_dep = dependency('xi', version: '>= 1.2') -+libsecret_dep = dependency('libsecret-1') - - m_dep = cc.find_library('m') - -diff --git a/panels/sharing/cc-gnome-remote-desktop.c b/panels/sharing/cc-gnome-remote-desktop.c -new file mode 100644 -index 000000000..8420fddca ---- /dev/null -+++ b/panels/sharing/cc-gnome-remote-desktop.c -@@ -0,0 +1,171 @@ -+/* -+ * Copyright (C) 2018 Red Hat, Inc. -+ * -+ * 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. -+ * -+ */ -+ -+#include "config.h" -+ -+#include "cc-gnome-remote-desktop.h" -+ -+const SecretSchema * -+cc_grd_vnc_password_get_schema (void) -+{ -+ static const SecretSchema grd_vnc_password_schema = { -+ .name = "org.gnome.RemoteDesktop.VncPassword", -+ .flags = SECRET_SCHEMA_NONE, -+ .attributes = { -+ { "password", SECRET_SCHEMA_ATTRIBUTE_STRING }, -+ { "NULL", 0 }, -+ }, -+ }; -+ -+ return &grd_vnc_password_schema; -+} -+ -+gboolean -+cc_grd_get_is_auth_method_prompt (GValue *value, -+ GVariant *variant, -+ gpointer user_data) -+{ -+ const char * auth_method; -+ -+ auth_method = g_variant_get_string (variant, NULL); -+ -+ if (g_strcmp0 (auth_method, "prompt") == 0) -+ { -+ g_value_set_boolean (value, TRUE); -+ } -+ else if (g_strcmp0 (auth_method, "password") == 0) -+ { -+ g_value_set_boolean (value, FALSE); -+ } -+ else -+ { -+ g_warning ("Unhandled VNC auth method %s", auth_method); -+ g_value_set_boolean (value, FALSE); -+ } -+ -+ return TRUE; -+} -+ -+GVariant * -+cc_grd_set_is_auth_method_prompt (const GValue *value, -+ const GVariantType *type, -+ gpointer user_data) -+{ -+ char *auth_method; -+ -+ if (g_value_get_boolean (value)) -+ auth_method = "prompt"; -+ else -+ auth_method = "password"; -+ -+ return g_variant_new_string (auth_method); -+} -+ -+gboolean -+cc_grd_get_is_auth_method_password (GValue *value, -+ GVariant *variant, -+ gpointer user_data) -+{ -+ const char *auth_method; -+ -+ auth_method = g_variant_get_string (variant, NULL); -+ -+ if (g_strcmp0 (auth_method, "prompt") == 0) -+ { -+ g_value_set_boolean (value, FALSE); -+ } -+ else if (g_strcmp0 (auth_method, "password") == 0) -+ { -+ g_value_set_boolean (value, TRUE); -+ } -+ else -+ { -+ g_warning ("Unhandled VNC auth method %s", auth_method); -+ g_value_set_boolean (value, FALSE); -+ } -+ -+ return TRUE; -+} -+ -+GVariant * -+cc_grd_set_is_auth_method_password (const GValue *value, -+ const GVariantType *type, -+ gpointer user_data) -+{ -+ char *auth_method; -+ -+ if (g_value_get_boolean (value)) -+ auth_method = "password"; -+ else -+ auth_method = "prompt"; -+ -+ return g_variant_new_string (auth_method); -+} -+ -+static void -+on_password_stored (GObject *source, -+ GAsyncResult *result, -+ gpointer user_data) -+{ -+ GtkEntry *entry = GTK_ENTRY (user_data); -+ GError *error = NULL; -+ -+ if (!secret_password_store_finish (result, &error)) -+ { -+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) -+ { -+ g_warning ("Failed to store VNC password: %s", error->message); -+ g_object_set_data (G_OBJECT (entry), -+ "vnc-password-cancellable", NULL); -+ } -+ g_error_free (error); -+ } -+ else -+ { -+ g_object_set_data (G_OBJECT (entry), -+ "vnc-password-cancellable", NULL); -+ } -+} -+ -+void -+cc_grd_on_vnc_password_entry_notify_text (GtkEntry *entry, -+ GParamSpec *pspec, -+ gpointer user_data) -+{ -+ GCancellable *cancellable; -+ const char *password; -+ -+ cancellable = g_object_get_data (G_OBJECT (entry), "vnc-password-cancellable"); -+ if (cancellable) -+ g_cancellable_cancel (cancellable); -+ -+ cancellable = g_cancellable_new (); -+ g_object_set_data_full (G_OBJECT (entry), -+ "vnc-password-cancellable", -+ cancellable, g_object_unref); -+ -+ password = gtk_entry_get_text (entry); -+ -+ secret_password_store (CC_GRD_VNC_PASSWORD_SCHEMA, -+ SECRET_COLLECTION_DEFAULT, -+ "GNOME Remote Desktop VNC password", -+ password, -+ cancellable, on_password_stored, entry, -+ NULL); -+} -diff --git a/panels/sharing/cc-gnome-remote-desktop.h b/panels/sharing/cc-gnome-remote-desktop.h -new file mode 100644 -index 000000000..2a4819986 ---- /dev/null -+++ b/panels/sharing/cc-gnome-remote-desktop.h -@@ -0,0 +1,49 @@ -+/* -+ * Copyright (C) 2018 Red Hat, Inc. -+ * -+ * 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. -+ * -+ */ -+ -+#ifndef CC_GNOME_REMOTE_DESKTOP_H -+#define CC_GNOME_REMOTE_DESKTOP_H -+ -+#include -+#include -+ -+const SecretSchema * cc_grd_vnc_password_get_schema (void); -+#define CC_GRD_VNC_PASSWORD_SCHEMA cc_grd_vnc_password_get_schema () -+ -+gboolean cc_grd_get_is_auth_method_prompt (GValue *value, -+ GVariant *variant, -+ gpointer user_data); -+ -+GVariant * cc_grd_set_is_auth_method_prompt (const GValue *value, -+ const GVariantType *type, -+ gpointer user_data); -+ -+gboolean cc_grd_get_is_auth_method_password (GValue *value, -+ GVariant *variant, -+ gpointer user_data); -+ -+GVariant * cc_grd_set_is_auth_method_password (const GValue *value, -+ const GVariantType *type, -+ gpointer user_data); -+ -+void cc_grd_on_vnc_password_entry_notify_text (GtkEntry *entry, -+ GParamSpec *pspec, -+ gpointer user_data); -+ -+#endif /* CC_GNOME_REMOTE_DESKTOP_H */ -diff --git a/panels/sharing/cc-sharing-panel.c b/panels/sharing/cc-sharing-panel.c -index 8b35c9a31..adcbcdc86 100644 ---- a/panels/sharing/cc-sharing-panel.c -+++ b/panels/sharing/cc-sharing-panel.c -@@ -30,6 +30,7 @@ - #include "cc-media-sharing.h" - #include "cc-sharing-networks.h" - #include "cc-sharing-switch.h" -+#include "cc-gnome-remote-desktop.h" - #include "org.gnome.SettingsDaemon.Sharing.h" - - #ifdef GDK_WINDOWING_WAYLAND -@@ -66,6 +67,13 @@ _gtk_builder_get_widget (GtkBuilder *builder, - #define VINO_SCHEMA_ID "org.gnome.Vino" - #define FILE_SHARING_SCHEMA_ID "org.gnome.desktop.file-sharing" - #define GNOME_REMOTE_DESKTOP_SCHEMA_ID "org.gnome.desktop.remote-desktop" -+#define GNOME_REMOTE_DESKTOP_VNC_SCHEMA_ID "org.gnome.desktop.remote-desktop.vnc" -+ -+typedef enum -+{ -+ GRD_VNC_AUTH_METHOD_PROMPT, -+ GRD_VNC_AUTH_METHOD_PASSWORD -+} GrdVncAuthMethod; - - struct _CcSharingPanelPrivate - { -@@ -1077,11 +1085,56 @@ static void - cc_sharing_panel_setup_screen_sharing_dialog_gnome_remote_desktop (CcSharingPanel *self) - { - CcSharingPanelPrivate *priv = self->priv; -- GtkWidget *networks, *w; -+ GSettings *vnc_settings; -+ GtkWidget *networks, *box, *w; -+ -+ cc_sharing_panel_bind_switch_to_widgets (WID ("require-password-radiobutton"), -+ WID ("password-grid"), -+ NULL); -+ -+ cc_sharing_panel_setup_label_with_hostname (self, -+ WID ("screen-sharing-label")); -+ -+ g_object_bind_property (WID ("show-password-checkbutton"), "active", -+ WID ("remote-control-password-entry"), "visibility", -+ G_BINDING_SYNC_CREATE); -+ -+ /* make sure the password entry is hidden by default */ -+ g_signal_connect (priv->screen_sharing_dialog, "show", -+ G_CALLBACK (screen_sharing_show_cb), self); -+ -+ g_signal_connect (priv->screen_sharing_dialog, "hide", -+ G_CALLBACK (screen_sharing_hide_cb), self); -+ -+ /* accept at most 8 bytes in password entry */ -+ g_signal_connect (WID ("remote-control-password-entry"), "insert-text", -+ G_CALLBACK (screen_sharing_password_insert_text_cb), self); -+ -+ /* Bind settings to widgets */ -+ vnc_settings = g_settings_new (GNOME_REMOTE_DESKTOP_VNC_SCHEMA_ID); -+ g_settings_bind (vnc_settings, "view-only", -+ WID ("remote-control-checkbutton"), "active", -+ G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_INVERT_BOOLEAN); -+ g_settings_bind_with_mapping (vnc_settings, "auth-method", -+ WID ("approve-connections-radiobutton"), "active", -+ G_SETTINGS_BIND_DEFAULT, -+ cc_grd_get_is_auth_method_prompt, -+ cc_grd_set_is_auth_method_prompt, -+ NULL, NULL); -+ g_settings_bind_with_mapping (vnc_settings, "auth-method", -+ WID ("require-password-radiobutton"), "active", -+ G_SETTINGS_BIND_DEFAULT, -+ cc_grd_get_is_auth_method_password, -+ cc_grd_set_is_auth_method_password, -+ NULL, NULL); -+ g_signal_connect (WID ("remote-control-password-entry"), -+ "notify::text", -+ G_CALLBACK (cc_grd_on_vnc_password_entry_notify_text), -+ self); - - networks = cc_sharing_networks_new (self->priv->sharing_proxy, "gnome-remote-desktop"); -- gtk_widget_hide (WID ("remote-control-box")); -- gtk_grid_attach (GTK_GRID (WID ("grid3")), networks, 0, 1, 2, 1); -+ box = WID ("remote-control-box"); -+ gtk_box_pack_end (GTK_BOX (box), networks, TRUE, TRUE, 0); - gtk_widget_show (networks); - - w = cc_sharing_switch_new (networks); -@@ -1116,6 +1169,9 @@ check_remote_desktop_available (CcSharingPanel *self) - if (!cc_sharing_panel_check_schema_available (self, GNOME_REMOTE_DESKTOP_SCHEMA_ID)) - return; - -+ if (!cc_sharing_panel_check_schema_available (self, GNOME_REMOTE_DESKTOP_VNC_SCHEMA_ID)) -+ return; -+ - priv->remote_desktop_name_watch = g_bus_watch_name (G_BUS_TYPE_SESSION, - "org.gnome.Mutter.RemoteDesktop", - G_BUS_NAME_WATCHER_FLAGS_NONE, -diff --git a/panels/sharing/meson.build b/panels/sharing/meson.build -index 5caac36c0..1565a089a 100644 ---- a/panels/sharing/meson.build -+++ b/panels/sharing/meson.build -@@ -43,6 +43,7 @@ sources = files( - 'cc-remote-login.c', - 'cc-sharing-networks.c', - 'cc-sharing-switch.c', -+ 'cc-gnome-remote-desktop.c', - 'file-share-properties.c', - 'vino-preferences.c' - ) -@@ -79,7 +80,7 @@ panels_libs += static_library( - cappletname, - sources: sources, - include_directories: top_inc, -- dependencies: common_deps, -+ dependencies: [common_deps, libsecret_dep], - c_args: cflags - ) - --- -2.17.1 - diff --git a/0001-sharing-Fix-warning-when-disabling-sharing.patch b/0001-sharing-Fix-warning-when-disabling-sharing.patch deleted file mode 100644 index c7c63dc..0000000 --- a/0001-sharing-Fix-warning-when-disabling-sharing.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 5502611f0cfe7083c2b2a650385ea4554cb73ac9 Mon Sep 17 00:00:00 2001 -From: Robert Ancell -Date: Mon, 15 Oct 2018 11:49:19 +1300 -Subject: [PATCH 3/4] sharing: Fix warning when disabling sharing - -The warning is: -(gnome-control-center:29760): Gtk-CRITICAL **: 11:45:48.076: gtk_widget_is_visible: assertion 'GTK_IS_WIDGET (widget)' failed - -This is due to the code trying to disable switches that only exist if support -for that feature is available. ---- - panels/sharing/cc-sharing-panel.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/panels/sharing/cc-sharing-panel.c b/panels/sharing/cc-sharing-panel.c -index 8b35c9a31..98f2d69ef 100644 ---- a/panels/sharing/cc-sharing-panel.c -+++ b/panels/sharing/cc-sharing-panel.c -@@ -91,7 +91,7 @@ struct _CcSharingPanelPrivate - guint remote_desktop_name_watch; - }; - --#define OFF_IF_VISIBLE(x) { if (gtk_widget_is_visible(x) && gtk_widget_is_sensitive(x)) gtk_switch_set_active (GTK_SWITCH(x), FALSE); } -+#define OFF_IF_VISIBLE(x) { if ((x) != NULL && gtk_widget_is_visible(x) && gtk_widget_is_sensitive(x)) gtk_switch_set_active (GTK_SWITCH(x), FALSE); } - - static void - cc_sharing_panel_master_switch_notify (GtkSwitch *gtkswitch, --- -2.24.0 - diff --git a/0001-sharing-Remember-the-password-on-remote-desktop-shar.patch b/0001-sharing-Remember-the-password-on-remote-desktop-shar.patch deleted file mode 100644 index 0e0bb74..0000000 --- a/0001-sharing-Remember-the-password-on-remote-desktop-shar.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 718426652881a9e0cb1ddffb0af0f58128396a23 Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Tue, 11 Feb 2020 19:10:15 +0100 -Subject: [PATCH] sharing: Remember the password on remote desktop sharing - -If we are going through mutter's RemoteDesktop interface, we don't -seemingly remember the password set. Add support for reading it -from secrets and change the entry password on dialog construction, -to bring it on par with our vino handling. ---- - panels/sharing/cc-gnome-remote-desktop.c | 16 ++++++++++++++++ - panels/sharing/cc-gnome-remote-desktop.h | 2 ++ - panels/sharing/cc-sharing-panel.c | 2 ++ - 3 files changed, 20 insertions(+) - -diff --git a/panels/sharing/cc-gnome-remote-desktop.c b/panels/sharing/cc-gnome-remote-desktop.c -index 8420fddca..599467fb4 100644 ---- a/panels/sharing/cc-gnome-remote-desktop.c -+++ b/panels/sharing/cc-gnome-remote-desktop.c -@@ -169,3 +169,19 @@ cc_grd_on_vnc_password_entry_notify_text (GtkEntry *entry, - cancellable, on_password_stored, entry, - NULL); - } -+ -+void -+cc_grd_update_password_entry (GtkEntry *entry) -+{ -+ g_autoptr(GError) error = NULL; -+ g_autofree gchar *password = NULL; -+ -+ password = secret_password_lookup_sync (CC_GRD_VNC_PASSWORD_SCHEMA, -+ NULL, &error, -+ NULL); -+ if (error) -+ g_critical ("Failed to get password: %s", error->message); -+ -+ if (password) -+ gtk_entry_set_text (entry, password); -+} -diff --git a/panels/sharing/cc-gnome-remote-desktop.h b/panels/sharing/cc-gnome-remote-desktop.h -index 2a4819986..1f83e2dd6 100644 ---- a/panels/sharing/cc-gnome-remote-desktop.h -+++ b/panels/sharing/cc-gnome-remote-desktop.h -@@ -46,4 +46,6 @@ void cc_grd_on_vnc_password_entry_notify_text (GtkEntry *entry, - GParamSpec *pspec, - gpointer user_data); - -+void cc_grd_update_password_entry (GtkEntry *entry); -+ - #endif /* CC_GNOME_REMOTE_DESKTOP_H */ -diff --git a/panels/sharing/cc-sharing-panel.c b/panels/sharing/cc-sharing-panel.c -index ab22f5df8..17ecdb11a 100644 ---- a/panels/sharing/cc-sharing-panel.c -+++ b/panels/sharing/cc-sharing-panel.c -@@ -1106,6 +1106,8 @@ cc_sharing_panel_setup_screen_sharing_dialog_gnome_remote_desktop (CcSharingPane - g_signal_connect (priv->screen_sharing_dialog, "hide", - G_CALLBACK (screen_sharing_hide_cb), self); - -+ cc_grd_update_password_entry (WID ("remote-control-password-entry")); -+ - /* accept at most 8 bytes in password entry */ - g_signal_connect (WID ("remote-control-password-entry"), "insert-text", - G_CALLBACK (screen_sharing_password_insert_text_cb), self); --- -2.24.1 - diff --git a/0001-shell-Don-t-set-per-panel-icon.patch b/0001-shell-Don-t-set-per-panel-icon.patch deleted file mode 100644 index ff593da..0000000 --- a/0001-shell-Don-t-set-per-panel-icon.patch +++ /dev/null @@ -1,47 +0,0 @@ -From ec695fae92ef7470ef05211160e431f5c3486299 Mon Sep 17 00:00:00 2001 -From: Christian Kellner -Date: Tue, 10 Apr 2018 09:43:22 +0200 -Subject: [PATCH 1/4] shell: Don't set per-panel icon - -The control center app is considered one single application with -a single icon to represent it. Therefore get rid of per-panel -icons. ---- - shell/cc-window.c | 7 +------ - 1 file changed, 1 insertion(+), 6 deletions(-) - -diff --git a/shell/cc-window.c b/shell/cc-window.c -index 557819e0c76c..33f1ddcad511 100644 ---- a/shell/cc-window.c -+++ b/shell/cc-window.c -@@ -118,7 +118,6 @@ activate_panel (CcWindow *self, - GIcon *gicon) - { - GtkWidget *box, *title_widget; -- const gchar *icon_name; - - if (!id) - return FALSE; -@@ -144,12 +143,8 @@ activate_panel (CcWindow *self, - gtk_stack_set_visible_child_name (GTK_STACK (self->stack), id); - - /* set the title of the window */ -- icon_name = get_icon_name_from_g_icon (gicon); -- - gtk_window_set_role (GTK_WINDOW (self), id); - gtk_header_bar_set_title (GTK_HEADER_BAR (self->panel_headerbar), name); -- gtk_window_set_default_icon_name (icon_name); -- gtk_window_set_icon_name (GTK_WINDOW (self), icon_name); - - title_widget = cc_panel_get_title_widget (CC_PANEL (self->current_panel)); - gtk_header_bar_set_custom_title (GTK_HEADER_BAR (self->panel_headerbar), title_widget); -@@ -778,4 +773,4 @@ cc_window_set_search_item (CcWindow *center, - gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (center->search_bar), TRUE); - gtk_entry_set_text (GTK_ENTRY (center->search_entry), search); - gtk_editable_set_position (GTK_EDITABLE (center->search_entry), -1); --} -\ No newline at end of file -+} --- -2.17.0 - diff --git a/0001-sound-Ensure-to-preserve-sound-theme-when-changing-f.patch b/0001-sound-Ensure-to-preserve-sound-theme-when-changing-f.patch deleted file mode 100644 index 77099f8..0000000 --- a/0001-sound-Ensure-to-preserve-sound-theme-when-changing-f.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 9dd43182ecb9f8406a1aecd0719f2c5225d3101e Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Thu, 28 Nov 2019 15:47:02 +0100 -Subject: [PATCH 1/3] sound: Ensure to preserve sound theme when changing from - default - -The sound theme change itself triggers signals that are handled here -in the GSettings handlers, possibly resulting in it changing the -theme back to default. Ensure we are handling a real change here, -the sound theme will be updated through other means (eg. the row -changed handler). ---- - panels/sound/gvc-sound-theme-chooser.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/panels/sound/gvc-sound-theme-chooser.c b/panels/sound/gvc-sound-theme-chooser.c -index 93eeb155c..9d1051f04 100644 ---- a/panels/sound/gvc-sound-theme-chooser.c -+++ b/panels/sound/gvc-sound-theme-chooser.c -@@ -632,11 +632,11 @@ update_theme (GvcSoundThemeChooser *chooser) - load_theme_name (DEFAULT_THEME, - &chooser->current_parent); - } -+ -+ update_alerts_from_theme_name (chooser, chooser->current_theme); - } - - gtk_widget_set_sensitive (chooser->selection_box, events_enabled); -- -- update_alerts_from_theme_name (chooser, chooser->current_theme); - } - - static GObject * --- -2.24.0 - diff --git a/0001-user-Support-devices-with-more-than-5-enroll-steps.patch b/0001-user-Support-devices-with-more-than-5-enroll-steps.patch deleted file mode 100644 index ff41200..0000000 --- a/0001-user-Support-devices-with-more-than-5-enroll-steps.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 533811deef3155abe71dbace6960feee0aa8a35a Mon Sep 17 00:00:00 2001 -From: Benjamin Berg -Date: Wed, 31 Jul 2019 19:09:17 +0200 -Subject: [PATCH] user: Support devices with more than 5 enroll steps - -We are currently adding support for Synaptics devices that require 8 -steps. Add another row for images which brings us to up to 10 -supportable steps for now. ---- - .../user-accounts/data/account-fingerprint.ui | 62 +++++++++++++++++++ - panels/user-accounts/um-fingerprint-dialog.c | 2 +- - 2 files changed, 63 insertions(+), 1 deletion(-) - -diff --git a/panels/user-accounts/data/account-fingerprint.ui b/panels/user-accounts/data/account-fingerprint.ui -index e352e6de1..969f7ca30 100644 ---- a/panels/user-accounts/data/account-fingerprint.ui -+++ b/panels/user-accounts/data/account-fingerprint.ui -@@ -243,6 +243,68 @@ - 1 - - -+ -+ -+ True -+ 24 -+ 24 -+ -+ -+ True -+ gtk-no -+ 6 -+ -+ -+ 1 -+ -+ -+ -+ -+ True -+ gtk-no -+ 6 -+ -+ -+ 2 -+ -+ -+ -+ -+ True -+ gtk-no -+ 6 -+ -+ -+ 3 -+ -+ -+ -+ -+ True -+ gtk-no -+ 6 -+ -+ -+ 4 -+ -+ -+ -+ -+ True -+ gtk-no -+ 6 -+ -+ -+ 5 -+ -+ -+ -+ -+ False -+ False -+ 2 -+ -+ - - - True -diff --git a/panels/user-accounts/um-fingerprint-dialog.c b/panels/user-accounts/um-fingerprint-dialog.c -index 48b12dcf3..f5dee5b95 100644 ---- a/panels/user-accounts/um-fingerprint-dialog.c -+++ b/panels/user-accounts/um-fingerprint-dialog.c -@@ -32,7 +32,7 @@ - #include "fingerprint-strings.h" - - /* This must match the number of images on the 2nd page in the UI file */ --#define MAX_ENROLL_STAGES 5 -+#define MAX_ENROLL_STAGES 10 - - static GDBusProxy *manager = NULL; - static GDBusConnection *connection = NULL; --- -2.24.1 - diff --git a/0001-wacom-Pick-libwacom-s-Generic-Pen-stylus-if-tool-ID-.patch b/0001-wacom-Pick-libwacom-s-Generic-Pen-stylus-if-tool-ID-.patch deleted file mode 100644 index af161f4..0000000 --- a/0001-wacom-Pick-libwacom-s-Generic-Pen-stylus-if-tool-ID-.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 520411840b6cd1b9b72e4a2fd19701aad7145f4f Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Thu, 13 Feb 2020 20:28:29 +0100 -Subject: [PATCH] wacom: Pick libwacom's Generic Pen stylus if tool ID is 0 - -We generally use tool ID 0 if the ID is actually unknown, libwacom however -assigns 0xfffff to such device. Make it sure we find the "Generic Pen" -stylus description in that case. ---- - panels/wacom/cc-wacom-tool.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/panels/wacom/cc-wacom-tool.c b/panels/wacom/cc-wacom-tool.c -index 1316fa5d6..d54de6160 100644 ---- a/panels/wacom/cc-wacom-tool.c -+++ b/panels/wacom/cc-wacom-tool.c -@@ -165,7 +165,10 @@ cc_wacom_tool_initable_init (GInitable *initable, - tool->id = ids[0]; - } - -- tool->wstylus = libwacom_stylus_get_for_id (wacom_db, tool->id); -+ if (tool->id == 0) -+ tool->wstylus = libwacom_stylus_get_for_id (wacom_db, 0xfffff); -+ else -+ tool->wstylus = libwacom_stylus_get_for_id (wacom_db, tool->id); - - if (!tool->wstylus) { - g_set_error (error, 0, 0, "Stylus description not found"); --- -2.25.0 - diff --git a/0001-wacom-Update-Test-your-settings-button-sensitivity-o.patch b/0001-wacom-Update-Test-your-settings-button-sensitivity-o.patch deleted file mode 100644 index 9a681a1..0000000 --- a/0001-wacom-Update-Test-your-settings-button-sensitivity-o.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 7a4532ff72a74ce74dee4b96b993ecd11f557acc Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Mon, 11 Feb 2019 20:48:23 +0100 -Subject: [PATCH] wacom: Update "Test your settings" button sensitivity on - device availability - -The button/popover are meaningless if there's no device to test with. Set -it inactive (so the popover hides if visible) and set insensitive if no -devices are found. - -https://gitlab.gnome.org/GNOME/gnome-control-center/merge_requests/390 ---- - panels/wacom/cc-wacom-panel.c | 22 ++++++++++++++++++++++ - 1 file changed, 22 insertions(+) - -diff --git a/panels/wacom/cc-wacom-panel.c b/panels/wacom/cc-wacom-panel.c -index 77a1e261f..e4f3ca7fc 100644 ---- a/panels/wacom/cc-wacom-panel.c -+++ b/panels/wacom/cc-wacom-panel.c -@@ -53,6 +53,7 @@ struct _CcWacomPanelPrivate - GtkWidget *stylus_notebook; - GtkWidget *test_popover; - GtkWidget *test_draw_area; -+ GtkWidget *test_button; - GHashTable *devices; /* key=GsdDevice, value=CcWacomDevice */ - GHashTable *pages; /* key=device name, value=GtkWidget */ - GHashTable *stylus_pages; /* key=CcWacomTool, value=GtkWidget */ -@@ -309,6 +310,22 @@ add_stylus (CcWacomPanel *self, - return TRUE; - } - -+static void -+update_test_button (CcWacomPanel *self) -+{ -+ CcWacomPanelPrivate *priv = self->priv;; -+ -+ if (!priv->test_button) -+ return; -+ -+ if (g_hash_table_size (priv->devices) == 0) { -+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->test_button), FALSE); -+ gtk_widget_set_sensitive (priv->test_button, FALSE); -+ } else { -+ gtk_widget_set_sensitive (priv->test_button, TRUE); -+ } -+} -+ - static void - update_current_tool (CcWacomPanel *panel, - GdkDevice *device, -@@ -422,6 +439,9 @@ cc_wacom_panel_constructed (GObject *object) - - g_signal_connect_object (shell, "event", - G_CALLBACK (on_shell_event_cb), self, 0); -+ -+ priv->test_button = button; -+ update_test_button (self); - } - - static const char * -@@ -561,6 +581,8 @@ update_current_page (CcWacomPanel *self, - if (num_pages > 1) - gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->tablet_notebook), 1); - } -+ -+ update_test_button (self); - } - - static void --- -2.20.1 - diff --git a/0001-wacom-Update-to-newer-output-setting.patch b/0001-wacom-Update-to-newer-output-setting.patch deleted file mode 100644 index 546fc98..0000000 --- a/0001-wacom-Update-to-newer-output-setting.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 07410fb2f8ecf1dd8bb82bf29a7e81304f62aa81 Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Mon, 30 Jul 2018 21:10:31 +0200 -Subject: [PATCH] wacom: Update to newer "output" setting - -The semantics are pretty much the same for opaque tablets, not -much else to do here. ---- - panels/wacom/cc-wacom-device.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/panels/wacom/cc-wacom-device.c b/panels/wacom/cc-wacom-device.c -index 488637dec..e0915d5b5 100644 ---- a/panels/wacom/cc-wacom-device.c -+++ b/panels/wacom/cc-wacom-device.c -@@ -309,11 +309,11 @@ find_output (GnomeRRScreen *rr_screen, - gsize n; - - settings = cc_wacom_device_get_settings (device); -- variant = g_settings_get_value (settings, "display"); -+ variant = g_settings_get_value (settings, "output"); - edid = g_variant_get_strv (variant, &n); - - if (n != 3) { -- g_critical ("Expected 'display' key to store %d values; got %"G_GSIZE_FORMAT".", 3, n); -+ g_critical ("Expected 'output' key to store %d values; got %"G_GSIZE_FORMAT".", 3, n); - goto out; - } - -@@ -378,7 +378,7 @@ cc_wacom_device_set_output (CcWacomDevice *device, - values[2] = serial; - } - -- g_settings_set_strv (settings, "display", values); -+ g_settings_set_strv (settings, "output", values); - - g_free (vendor); - g_free (product); --- -2.21.0 - diff --git a/0002-ce-page-security-add-SAE-support.patch b/0002-ce-page-security-add-SAE-support.patch deleted file mode 100644 index c0747ee..0000000 --- a/0002-ce-page-security-add-SAE-support.patch +++ /dev/null @@ -1,61 +0,0 @@ -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/0002-info-Move-helper-for-getting-subscription-status-to-.patch b/0002-info-Move-helper-for-getting-subscription-status-to-.patch deleted file mode 100644 index 94acfd9..0000000 --- a/0002-info-Move-helper-for-getting-subscription-status-to-.patch +++ /dev/null @@ -1,228 +0,0 @@ -From 2025db03559f4ca8872045618cac75cfb2fe10f1 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Sun, 24 Jan 2021 10:29:56 -0500 -Subject: [PATCH 2/4] info: Move helper for getting subscription status to - header - -In the future we're going to need to be able to get the subscription -status in two files, so move the function for getting that status -to a common header. - -Ideally we'd be using code generation for the subscription proxy -instead, but that's a bigger refactor that will have to wait for -another day. ---- - panels/info/cc-info-overview-panel.c | 32 ++------------------------ - panels/info/cc-subscription-common.h | 34 ++++++++++++++++++++++++++++ - 2 files changed, 36 insertions(+), 30 deletions(-) - create mode 100644 panels/info/cc-subscription-common.h - -diff --git a/panels/info/cc-info-overview-panel.c b/panels/info/cc-info-overview-panel.c -index 1467060f9..b2cbefb25 100644 ---- a/panels/info/cc-info-overview-panel.c -+++ b/panels/info/cc-info-overview-panel.c -@@ -1,56 +1,57 @@ - /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- - * - * Copyright (C) 2017 Mohammed Sadiq - * Copyright (C) 2010 Red Hat, Inc - * Copyright (C) 2008 William Jon McCann - * - * 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, see . - * - */ - - #include - - #include "shell/cc-hostname-entry.h" - - #include "cc-info-resources.h" -+#include "cc-subscription-common.h" - #include "cc-subscription-details-dialog.h" - #include "cc-subscription-register-dialog.h" - #include "info-cleanup.h" - - #include - #include - #include - #include - #include - - #include - #include - #include - #include - - #include - - #ifdef GDK_WINDOWING_WAYLAND - #include - #endif - #ifdef GDK_WINDOWING_X11 - #include - #endif - - #include "gsd-disk-space-helper.h" - - #include "cc-info-overview-panel.h" - - - typedef struct { -@@ -773,102 +774,73 @@ info_overview_panel_setup_overview (CcInfoOverviewPanel *self) - res = load_gnome_version (&priv->gnome_version, - &priv->gnome_distributor, - &priv->gnome_date); - if (res) - { - g_autofree gchar *text = NULL; - text = g_strdup_printf (_("Version %s"), priv->gnome_version); - gtk_label_set_text (GTK_LABEL (priv->version_label), text); - } - - glibtop_get_mem (&mem); - memory_text = g_format_size_full (mem.total, G_FORMAT_SIZE_IEC_UNITS); - gtk_label_set_text (GTK_LABEL (priv->memory_label), memory_text ? memory_text : ""); - - info = glibtop_get_sysinfo (); - - cpu_text = get_cpu_info (info); - gtk_label_set_markup (GTK_LABEL (priv->processor_label), cpu_text ? cpu_text : ""); - - os_type_text = get_os_type (); - gtk_label_set_text (GTK_LABEL (priv->os_type_label), os_type_text ? os_type_text : ""); - - os_name_text = get_os_name (); - gtk_label_set_text (GTK_LABEL (priv->os_name_label), os_name_text ? os_name_text : ""); - - get_primary_disc_info (self); - - gtk_label_set_markup (GTK_LABEL (priv->graphics_label), priv->graphics_data->hardware_string); - } - --typedef enum { -- GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN, -- GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID, -- GSD_SUBMAN_SUBSCRIPTION_STATUS_INVALID, -- GSD_SUBMAN_SUBSCRIPTION_STATUS_DISABLED, -- GSD_SUBMAN_SUBSCRIPTION_STATUS_PARTIALLY_VALID, -- GSD_SUBMAN_SUBSCRIPTION_STATUS_LAST --} GsdSubmanSubscriptionStatus; -- --static gboolean --get_subscription_status (CcInfoOverviewPanel *self, GsdSubmanSubscriptionStatus *status) --{ -- CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); -- g_autoptr(GVariant) status_variant = NULL; -- guint32 u; -- -- status_variant = g_dbus_proxy_get_cached_property (priv->subscription_proxy, "SubscriptionStatus"); -- if (!status_variant) -- { -- g_debug ("Unable to get SubscriptionStatus property"); -- return FALSE; -- } -- -- g_variant_get (status_variant, "u", &u); -- *status = u; -- -- return TRUE; --} -- - static void - reload_subscription_status (CcInfoOverviewPanel *self) - { - CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); - GsdSubmanSubscriptionStatus status; - - if (priv->subscription_proxy == NULL) - { - gtk_widget_hide (priv->subscription_stack); - return; - } - -- if (!get_subscription_status (self, &status)) -+ if (!get_subscription_status (priv->subscription_proxy, &status)) - { - gtk_widget_hide (priv->subscription_stack); - return; - } - - switch (status) - { - case GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN: - case GSD_SUBMAN_SUBSCRIPTION_STATUS_INVALID: - case GSD_SUBMAN_SUBSCRIPTION_STATUS_DISABLED: - case GSD_SUBMAN_SUBSCRIPTION_STATUS_PARTIALLY_VALID: - gtk_stack_set_visible_child_name (GTK_STACK (priv->subscription_stack), "not-registered"); - gtk_widget_set_sensitive (priv->updates_button, FALSE); - break; - - case GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID: - gtk_stack_set_visible_child_name (GTK_STACK (priv->subscription_stack), "registered"); - gtk_widget_set_sensitive (priv->updates_button, TRUE); - break; - - default: - g_assert_not_reached (); - break; - } - } - - static void - on_details_button_clicked (GtkWidget *widget, - CcInfoOverviewPanel *self) - { -diff --git a/panels/info/cc-subscription-common.h b/panels/info/cc-subscription-common.h -new file mode 100644 -index 000000000..034d64181 ---- /dev/null -+++ b/panels/info/cc-subscription-common.h -@@ -0,0 +1,34 @@ -+#ifndef CC_SUBSCRIPTION_COMMON_H -+#define CC_SUBSCRIPTION_COMMON_H -+ -+typedef enum { -+ GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN, -+ GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID, -+ GSD_SUBMAN_SUBSCRIPTION_STATUS_INVALID, -+ GSD_SUBMAN_SUBSCRIPTION_STATUS_DISABLED, -+ GSD_SUBMAN_SUBSCRIPTION_STATUS_PARTIALLY_VALID, -+ GSD_SUBMAN_SUBSCRIPTION_STATUS_NO_INSTALLED_PRODUCTS, -+ GSD_SUBMAN_SUBSCRIPTION_STATUS_LAST -+} GsdSubmanSubscriptionStatus; -+ -+static inline gboolean -+get_subscription_status (GDBusProxy *subscription_proxy, -+ GsdSubmanSubscriptionStatus *status) -+{ -+ g_autoptr(GVariant) status_variant = NULL; -+ guint32 u; -+ -+ status_variant = g_dbus_proxy_get_cached_property (subscription_proxy, "SubscriptionStatus"); -+ if (!status_variant) -+ { -+ g_debug ("Unable to get SubscriptionStatus property"); -+ return FALSE; -+ } -+ -+ g_variant_get (status_variant, "u", &u); -+ *status = u; -+ -+ return TRUE; -+} -+ -+#endif --- -2.28.0 - diff --git a/0002-shell-Icon-name-helper-returns-symbolic-name.patch b/0002-shell-Icon-name-helper-returns-symbolic-name.patch deleted file mode 100644 index d9aa722..0000000 --- a/0002-shell-Icon-name-helper-returns-symbolic-name.patch +++ /dev/null @@ -1,78 +0,0 @@ -From b24a8e9aa82b64de970d8137181bf8a03b6f724a Mon Sep 17 00:00:00 2001 -From: Christian Kellner -Date: Tue, 10 Apr 2018 09:47:48 +0200 -Subject: [PATCH 2/4] shell: Icon name helper returns symbolic name - -The helper function to get the icon name from a GIcon directly -returns the symbolic icon now. This makes it in turn possible -to also directly check if the theme has the icon with the symbolic -name instead of checking of for the full colored one and then -deriving the symbolic name from that. The latter (old) practice -will fail if there is a symbolic icon in the theme that has no -full color icon (like e.g. thunderbolt). ---- - shell/cc-window.c | 19 ++++++++++--------- - 1 file changed, 10 insertions(+), 9 deletions(-) - -diff --git a/shell/cc-window.c b/shell/cc-window.c -index 33f1ddcad511..3af9cf0bd9fc 100644 ---- a/shell/cc-window.c -+++ b/shell/cc-window.c -@@ -88,8 +88,8 @@ enum - }; - - /* Auxiliary methods */ --static const gchar * --get_icon_name_from_g_icon (GIcon *gicon) -+static gchar * -+get_symbolic_icon_name_from_g_icon (GIcon *gicon) - { - const gchar * const *names; - GtkIconTheme *icon_theme; -@@ -103,8 +103,11 @@ get_icon_name_from_g_icon (GIcon *gicon) - - for (i = 0; names[i] != NULL; i++) - { -- if (gtk_icon_theme_has_icon (icon_theme, names[i])) -- return names[i]; -+ g_autofree gchar *name = NULL; -+ name = g_strdup_printf ("%s-symbolic", names[i]); -+ -+ if (gtk_icon_theme_has_icon (icon_theme, name)) -+ return g_steal_pointer (&name); - } - - return NULL; -@@ -248,9 +251,8 @@ setup_model (CcWindow *shell) - g_autofree gchar *name = NULL; - g_autofree gchar *description = NULL; - g_autofree gchar *id = NULL; -- g_autofree gchar *symbolic_icon = NULL; -+ g_autofree gchar *icon_name = NULL; - g_autofree GStrv keywords = NULL; -- const gchar *icon_name; - - gtk_tree_model_get (model, &iter, - COL_CATEGORY, &category, -@@ -261,8 +263,7 @@ setup_model (CcWindow *shell) - COL_KEYWORDS, &keywords, - -1); - -- icon_name = get_icon_name_from_g_icon (icon); -- symbolic_icon = g_strdup_printf ("%s-symbolic", icon_name); -+ icon_name = get_symbolic_icon_name_from_g_icon (icon); - - cc_panel_list_add_panel (CC_PANEL_LIST (shell->panel_list), - category, -@@ -270,7 +271,7 @@ setup_model (CcWindow *shell) - name, - description, - keywords, -- symbolic_icon); -+ icon_name); - - valid = gtk_tree_model_iter_next (model, &iter); - } --- -2.17.0 - diff --git a/0003-ce-page-details-add-SAE-support.patch b/0003-ce-page-details-add-SAE-support.patch deleted file mode 100644 index 1ae22f9..0000000 --- a/0003-ce-page-details-add-SAE-support.patch +++ /dev/null @@ -1,37 +0,0 @@ -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/0003-info-Update-registration-state-in-panel-when-it-happ.patch b/0003-info-Update-registration-state-in-panel-when-it-happ.patch deleted file mode 100644 index bedb0f7..0000000 --- a/0003-info-Update-registration-state-in-panel-when-it-happ.patch +++ /dev/null @@ -1,654 +0,0 @@ -From 8bd1e37f59f3b4ec617d6d0bccf7fd77a9d03ca5 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Sun, 24 Jan 2021 13:03:03 -0500 -Subject: [PATCH 3/4] info: Update registration state in panel when it happens - on disk - -The code was failing to listen for change notifications, so if the -panel was open while the system got registered, it wouldn't update. - -This commit fixes that. ---- - panels/info/cc-info-overview-panel.c | 33 ++++++++++++++++--- - panels/info/cc-subscription-details-dialog.c | 17 ++++++++-- - panels/info/cc-subscription-details-dialog.h | 3 +- - panels/info/cc-subscription-register-dialog.c | 17 ++++++++-- - panels/info/cc-subscription-register-dialog.h | 3 +- - 5 files changed, 63 insertions(+), 10 deletions(-) - -diff --git a/panels/info/cc-info-overview-panel.c b/panels/info/cc-info-overview-panel.c -index b2cbefb25..65246758e 100644 ---- a/panels/info/cc-info-overview-panel.c -+++ b/panels/info/cc-info-overview-panel.c -@@ -60,60 +60,61 @@ typedef struct { - } GraphicsData; - - typedef struct - { - GtkWidget *system_image; - GtkWidget *version_label; - GtkWidget *name_entry; - GtkWidget *memory_label; - GtkWidget *processor_label; - GtkWidget *os_name_label; - GtkWidget *os_type_label; - GtkWidget *disk_label; - GtkWidget *graphics_label; - GtkWidget *virt_type_label; - GtkWidget *subscription_stack; - GtkWidget *details_button; - GtkWidget *register_button; - GtkWidget *updates_separator; - GtkWidget *updates_button; - - /* Virtualisation labels */ - GtkWidget *label8; - GtkWidget *grid1; - GtkWidget *label18; - - char *gnome_version; - char *gnome_distributor; - char *gnome_date; - - GCancellable *cancellable; -+ GCancellable *subscription_cancellable; - - /* Free space */ - GList *primary_mounts; - guint64 total_bytes; - - GraphicsData *graphics_data; - - GDBusProxy *subscription_proxy; - } CcInfoOverviewPanelPrivate; - - struct _CcInfoOverviewPanel - { - CcPanel parent_instance; - - /*< private >*/ - CcInfoOverviewPanelPrivate *priv; - }; - - static void get_primary_disc_info_start (CcInfoOverviewPanel *self); - - typedef struct - { - char *major; - char *minor; - char *micro; - char *distributor; - char *date; - char **current; - } VersionData; - -@@ -821,165 +822,188 @@ reload_subscription_status (CcInfoOverviewPanel *self) - - switch (status) - { - case GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN: - case GSD_SUBMAN_SUBSCRIPTION_STATUS_INVALID: - case GSD_SUBMAN_SUBSCRIPTION_STATUS_DISABLED: - case GSD_SUBMAN_SUBSCRIPTION_STATUS_PARTIALLY_VALID: - gtk_stack_set_visible_child_name (GTK_STACK (priv->subscription_stack), "not-registered"); - gtk_widget_set_sensitive (priv->updates_button, FALSE); - break; - - case GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID: - gtk_stack_set_visible_child_name (GTK_STACK (priv->subscription_stack), "registered"); - gtk_widget_set_sensitive (priv->updates_button, TRUE); - break; - - default: - g_assert_not_reached (); - break; - } - } - - static void - on_details_button_clicked (GtkWidget *widget, - CcInfoOverviewPanel *self) - { - CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); - CcSubscriptionDetailsDialog *dialog; - GtkWindow *toplevel; - -- dialog = cc_subscription_details_dialog_new (priv->subscription_proxy); -+ dialog = cc_subscription_details_dialog_new (priv->subscription_proxy, -+ priv->subscription_cancellable); - toplevel = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))); - gtk_window_set_transient_for (GTK_WINDOW (dialog), toplevel); - - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (GTK_WIDGET (dialog)); -- -- reload_subscription_status (self); - } - - static void - on_register_button_clicked (GtkWidget *widget, - CcInfoOverviewPanel *self) - { - CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); - CcSubscriptionRegisterDialog *dialog; - GtkWindow *toplevel; - -- dialog = cc_subscription_register_dialog_new (priv->subscription_proxy); -+ dialog = cc_subscription_register_dialog_new (priv->subscription_proxy, -+ priv->subscription_cancellable); - toplevel = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))); - gtk_window_set_transient_for (GTK_WINDOW (dialog), toplevel); - - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (GTK_WIDGET (dialog)); -+} -+ -+static void -+on_subscription_status_changed (GDBusProxy *proxy, -+ GVariant *changed_properties, -+ GStrv invalidated_properties, -+ CcInfoOverviewPanel *self) -+{ -+ CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); -+ -+ g_cancellable_cancel (priv->subscription_cancellable); -+ g_object_unref (priv->subscription_cancellable); -+ -+ priv->subscription_cancellable = g_cancellable_new (); - - reload_subscription_status (self); - } - - static void - info_overview_panel_setup_subscriptions (CcInfoOverviewPanel *self) - { - CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); - g_autoptr(GError) error = NULL; - - priv->subscription_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - "org.gnome.SettingsDaemon.Subscription", - "/org/gnome/SettingsDaemon/Subscription", - "org.gnome.SettingsDaemon.Subscription", - NULL, &error); - if (error != NULL) - { - g_debug ("Unable to create a proxy for org.gnome.SettingsDaemon.Subscription: %s", - error->message); - reload_subscription_status (self); - return; - } - -+ g_signal_connect (priv->subscription_proxy, "g-properties-changed", -+ G_CALLBACK (on_subscription_status_changed), self); -+ - g_signal_connect (priv->details_button, "clicked", G_CALLBACK (on_details_button_clicked), self); - g_signal_connect (priv->register_button, "clicked", G_CALLBACK (on_register_button_clicked), self); - - reload_subscription_status (self); - } - - static gboolean - does_gnome_software_exist (void) - { - return g_file_test (BINDIR "/gnome-software", G_FILE_TEST_EXISTS); - } - - static gboolean - does_gpk_update_viewer_exist (void) - { - return g_file_test (BINDIR "/gpk-update-viewer", G_FILE_TEST_EXISTS); - } - - static void - on_updates_button_clicked (GtkWidget *widget, - CcInfoOverviewPanel *self) - { - g_autoptr(GError) error = NULL; - gboolean ret; - g_auto(GStrv) argv = NULL; - - argv = g_new0 (gchar *, 3); - if (does_gnome_software_exist ()) - { - argv[0] = g_build_filename (BINDIR, "gnome-software", NULL); - argv[1] = g_strdup_printf ("--mode=updates"); - } - else - { - argv[0] = g_build_filename (BINDIR, "gpk-update-viewer", NULL); - } - ret = g_spawn_async (NULL, argv, NULL, 0, NULL, NULL, NULL, &error); - if (!ret) - g_warning ("Failed to spawn %s: %s", argv[0], error->message); - } - - static void - cc_info_overview_panel_dispose (GObject *object) - { - CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (CC_INFO_OVERVIEW_PANEL (object)); - - g_clear_pointer (&priv->graphics_data, graphics_data_free); - - G_OBJECT_CLASS (cc_info_overview_panel_parent_class)->dispose (object); - } - - static void - cc_info_overview_panel_finalize (GObject *object) - { - CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (CC_INFO_OVERVIEW_PANEL (object)); - -+ if (priv->subscription_cancellable) -+ { -+ g_cancellable_cancel (priv->subscription_cancellable); -+ g_clear_object (&priv->subscription_cancellable); -+ } -+ - if (priv->cancellable) - { - g_cancellable_cancel (priv->cancellable); - g_clear_object (&priv->cancellable); - } - - if (priv->primary_mounts) - g_list_free_full (priv->primary_mounts, (GDestroyNotify) g_unix_mount_free); - - g_free (priv->gnome_version); - g_free (priv->gnome_date); - g_free (priv->gnome_distributor); - - g_clear_object (&priv->subscription_proxy); - - G_OBJECT_CLASS (cc_info_overview_panel_parent_class)->finalize (object); - } - - static void - cc_info_overview_panel_class_init (CcInfoOverviewPanelClass *klass) - { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - - object_class->finalize = cc_info_overview_panel_finalize; - object_class->dispose = cc_info_overview_panel_dispose; - - gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/info/info-overview.ui"); - - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, system_image); -@@ -987,55 +1011,56 @@ cc_info_overview_panel_class_init (CcInfoOverviewPanelClass *klass) - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, name_entry); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, memory_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, processor_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, os_name_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, os_type_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, disk_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, graphics_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, virt_type_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, subscription_stack); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, details_button); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, register_button); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, updates_separator); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, updates_button); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, label8); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, grid1); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, label18); - - g_type_ensure (CC_TYPE_HOSTNAME_ENTRY); - } - - static void - cc_info_overview_panel_init (CcInfoOverviewPanel *self) - { - CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); - - gtk_widget_init_template (GTK_WIDGET (self)); - - g_resources_register (cc_info_get_resource ()); - - priv->cancellable = g_cancellable_new (); -+ priv->subscription_cancellable = g_cancellable_new (); - - priv->graphics_data = get_graphics_data (); - - if (does_gnome_software_exist () || does_gpk_update_viewer_exist ()) - g_signal_connect (priv->updates_button, "clicked", G_CALLBACK (on_updates_button_clicked), self); - else - gtk_widget_hide (priv->updates_button); - - info_overview_panel_setup_overview (self); - info_overview_panel_setup_virt (self); - info_overview_panel_setup_subscriptions (self); - - /* show separator when both items are visible */ - if (gtk_widget_get_visible (priv->subscription_stack) && gtk_widget_get_visible (priv->updates_button)) - gtk_widget_show (priv->updates_separator); - else - gtk_widget_hide (priv->updates_separator); - } - - GtkWidget * - cc_info_overview_panel_new (void) - { - return g_object_new (CC_TYPE_INFO_OVERVIEW_PANEL, - NULL); - } -diff --git a/panels/info/cc-subscription-details-dialog.c b/panels/info/cc-subscription-details-dialog.c -index 1931ced81..3d77e6c48 100644 ---- a/panels/info/cc-subscription-details-dialog.c -+++ b/panels/info/cc-subscription-details-dialog.c -@@ -311,97 +311,110 @@ header_unregister_button_clicked_cb (CcSubscriptionDetailsDialog *self) - self); - } - - static void - back_button_clicked_cb (CcSubscriptionDetailsDialog *self) - { - gtk_spinner_stop (self->spinner); - - self->state = DIALOG_STATE_SHOW_DETAILS; - dialog_reload (self); - } - - static void - unregister_button_clicked_cb (CcSubscriptionDetailsDialog *self) - { - self->state = DIALOG_STATE_UNREGISTER; - dialog_reload (self); - } - - static void - dismiss_notification (CcSubscriptionDetailsDialog *self) - { - gtk_revealer_set_reveal_child (self->notification_revealer, FALSE); - } - - static void - cc_subscription_details_dialog_init (CcSubscriptionDetailsDialog *self) - { - gtk_widget_init_template (GTK_WIDGET (self)); - -- self->cancellable = g_cancellable_new (); - self->products = g_ptr_array_new_with_free_func ((GDestroyNotify) product_data_free); - self->state = DIALOG_STATE_SHOW_DETAILS; - } - - static void - cc_subscription_details_dialog_dispose (GObject *obj) - { - CcSubscriptionDetailsDialog *self = (CcSubscriptionDetailsDialog *) obj; - - g_cancellable_cancel (self->cancellable); - g_clear_object (&self->cancellable); - g_clear_object (&self->subscription_proxy); - - G_OBJECT_CLASS (cc_subscription_details_dialog_parent_class)->dispose (obj); - } - - static void - cc_subscription_details_dialog_finalize (GObject *obj) - { - CcSubscriptionDetailsDialog *self = (CcSubscriptionDetailsDialog *) obj; - - g_clear_pointer (&self->products, g_ptr_array_unref); - - G_OBJECT_CLASS (cc_subscription_details_dialog_parent_class)->finalize (obj); - } - - static void - cc_subscription_details_dialog_class_init (CcSubscriptionDetailsDialogClass *klass) - { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - - object_class->dispose = cc_subscription_details_dialog_dispose; - object_class->finalize = cc_subscription_details_dialog_finalize; - - gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/info/cc-subscription-details-dialog.ui"); - - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, back_button); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, spinner); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, header_unregister_button); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, notification_revealer); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, error_label); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, stack); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, products_box1); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, products_box2); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, unregister_button); - - gtk_widget_class_bind_template_callback (widget_class, back_button_clicked_cb); - gtk_widget_class_bind_template_callback (widget_class, header_unregister_button_clicked_cb); - gtk_widget_class_bind_template_callback (widget_class, unregister_button_clicked_cb); - gtk_widget_class_bind_template_callback (widget_class, dismiss_notification); - } - -+static void -+on_dialog_cancelled (CcSubscriptionDetailsDialog *self) -+{ -+ gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_CLOSE); -+} -+ - CcSubscriptionDetailsDialog * --cc_subscription_details_dialog_new (GDBusProxy *subscription_proxy) -+cc_subscription_details_dialog_new (GDBusProxy *subscription_proxy, -+ GCancellable *cancellable) - { - CcSubscriptionDetailsDialog *self; - - self = g_object_new (CC_TYPE_SUBSCRIPTION_DETAILS_DIALOG, "use-header-bar", TRUE, NULL); - self->subscription_proxy = g_object_ref (subscription_proxy); -+ self->cancellable = g_object_ref (cancellable); -+ -+ g_signal_connect_object (G_OBJECT (self->cancellable), -+ "cancelled", -+ G_CALLBACK (on_dialog_cancelled), -+ self, -+ G_CONNECT_SWAPPED); - - load_installed_products (self); - dialog_reload (self); - - return self; - } -diff --git a/panels/info/cc-subscription-details-dialog.h b/panels/info/cc-subscription-details-dialog.h -index a61a22838..f14dd157b 100644 ---- a/panels/info/cc-subscription-details-dialog.h -+++ b/panels/info/cc-subscription-details-dialog.h -@@ -1,32 +1,33 @@ - /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright 2019 Red Hat, Inc, - * - * 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, see . - * - * Written by: Kalev Lember - */ - - #pragma once - - #include - - G_BEGIN_DECLS - - #define CC_TYPE_SUBSCRIPTION_DETAILS_DIALOG (cc_subscription_details_dialog_get_type ()) - G_DECLARE_FINAL_TYPE (CcSubscriptionDetailsDialog, cc_subscription_details_dialog, CC, SUBSCRIPTION_DETAILS_DIALOG, GtkDialog) - --CcSubscriptionDetailsDialog *cc_subscription_details_dialog_new (GDBusProxy *subscription_proxy); -+CcSubscriptionDetailsDialog *cc_subscription_details_dialog_new (GDBusProxy *subscription_proxy, -+ GCancellable *cancellable); - - G_END_DECLS -diff --git a/panels/info/cc-subscription-register-dialog.c b/panels/info/cc-subscription-register-dialog.c -index d7a17cc99..e8c2f581c 100644 ---- a/panels/info/cc-subscription-register-dialog.c -+++ b/panels/info/cc-subscription-register-dialog.c -@@ -299,61 +299,60 @@ subscription_register_with_username (CcSubscriptionRegisterDialog *self) - self->cancellable, - registration_done_cb, - self); - } - - static void - register_button_clicked_cb (CcSubscriptionRegisterDialog *self) - { - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->register_with_activation_keys_radio))) - subscription_register_with_activation_keys (self); - else - subscription_register_with_username (self); - - gtk_spinner_start (self->spinner); - - self->state = DIALOG_STATE_REGISTERING; - dialog_reload (self); - } - - static void - dismiss_notification (CcSubscriptionRegisterDialog *self) - { - gtk_revealer_set_reveal_child (self->notification_revealer, FALSE); - } - - static void - cc_subscription_register_dialog_init (CcSubscriptionRegisterDialog *self) - { - gtk_widget_init_template (GTK_WIDGET (self)); - -- self->cancellable = g_cancellable_new (); - self->state = DIALOG_STATE_REGISTER; - - gtk_entry_set_text (self->url_entry, SERVER_URL); - gtk_widget_grab_focus (GTK_WIDGET (self->login_entry)); - dialog_validate (self); - dialog_reload (self); - } - - static void - cc_subscription_register_dialog_dispose (GObject *obj) - { - CcSubscriptionRegisterDialog *self = (CcSubscriptionRegisterDialog *) obj; - - g_cancellable_cancel (self->cancellable); - g_clear_object (&self->cancellable); - g_clear_object (&self->subscription_proxy); - - G_OBJECT_CLASS (cc_subscription_register_dialog_parent_class)->dispose (obj); - } - - static void - cc_subscription_register_dialog_finalize (GObject *obj) - { - G_OBJECT_CLASS (cc_subscription_register_dialog_parent_class)->finalize (obj); - } - - static void - cc_subscription_register_dialog_class_init (CcSubscriptionRegisterDialogClass *klass) - { - GObjectClass *object_class = G_OBJECT_CLASS (klass); -@@ -364,40 +363,54 @@ cc_subscription_register_dialog_class_init (CcSubscriptionRegisterDialogClass *k - - gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/info/cc-subscription-register-dialog.ui"); - - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, spinner); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, register_button); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, notification_revealer); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, error_label); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, default_url_radio); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, custom_url_radio); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, register_radio); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, register_with_activation_keys_radio); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, stack); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, register_grid); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, register_with_activation_keys_grid); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, url_label); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, url_entry); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, login_entry); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, password_entry); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, activation_keys_entry); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, organization_label); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, organization_entry); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, organization_entry_with_activation_keys); - - gtk_widget_class_bind_template_callback (widget_class, dialog_validate); - gtk_widget_class_bind_template_callback (widget_class, register_button_clicked_cb); - gtk_widget_class_bind_template_callback (widget_class, dismiss_notification); - gtk_widget_class_bind_template_callback (widget_class, custom_url_radio_toggled_cb); - gtk_widget_class_bind_template_callback (widget_class, register_with_activation_keys_radio_toggled_cb); - } - -+static void -+on_dialog_cancelled (CcSubscriptionRegisterDialog *self) -+{ -+ gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_CLOSE); -+} -+ - CcSubscriptionRegisterDialog * --cc_subscription_register_dialog_new (GDBusProxy *subscription_proxy) -+cc_subscription_register_dialog_new (GDBusProxy *subscription_proxy, -+ GCancellable *cancellable) - { - CcSubscriptionRegisterDialog *self; - - self = g_object_new (CC_TYPE_SUBSCRIPTION_REGISTER_DIALOG, "use-header-bar", TRUE, NULL); - self->subscription_proxy = g_object_ref (subscription_proxy); -+ self->cancellable = g_object_ref (cancellable); -+ -+ g_signal_connect_object (G_OBJECT (self->cancellable), -+ "cancelled", -+ G_CALLBACK (on_dialog_cancelled), -+ self, -+ G_CONNECT_SWAPPED); - - return self; - } -diff --git a/panels/info/cc-subscription-register-dialog.h b/panels/info/cc-subscription-register-dialog.h -index c5918df9f..31c254084 100644 ---- a/panels/info/cc-subscription-register-dialog.h -+++ b/panels/info/cc-subscription-register-dialog.h -@@ -1,32 +1,33 @@ - /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright 2019 Red Hat, Inc, - * - * 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, see . - * - * Written by: Kalev Lember - */ - - #pragma once - - #include - - G_BEGIN_DECLS - - #define CC_TYPE_SUBSCRIPTION_REGISTER_DIALOG (cc_subscription_register_dialog_get_type ()) - G_DECLARE_FINAL_TYPE (CcSubscriptionRegisterDialog, cc_subscription_register_dialog, CC, SUBSCRIPTION_REGISTER_DIALOG, GtkDialog) - --CcSubscriptionRegisterDialog *cc_subscription_register_dialog_new (GDBusProxy *subscription_proxy); -+CcSubscriptionRegisterDialog *cc_subscription_register_dialog_new (GDBusProxy *subscription_proxy, -+ GCancellable *cancellable); - - G_END_DECLS --- -2.28.0 - diff --git a/0003-thunderbolt-new-panel-for-device-management.patch b/0003-thunderbolt-new-panel-for-device-management.patch deleted file mode 100644 index 7aea82c..0000000 --- a/0003-thunderbolt-new-panel-for-device-management.patch +++ /dev/null @@ -1,6388 +0,0 @@ -From 3d9ad5e5657059e054f011d65e3f81b3723b41a5 Mon Sep 17 00:00:00 2001 -From: Christian Kellner -Date: Mon, 26 Mar 2018 16:18:30 +0200 -Subject: [PATCH 3/4] thunderbolt: new panel for device management - -Thunderbolt devices need to be approved before they can be used. -This is done via the boltd system daemon and gnome-shell. The new -panel enables the user to manage thunderbolt devices, i.e.: - - - forget devices that have previously been authorized - - authorize currently unauthorize devices - -Additionally authorization of devices an be temporarily disabled -to ensure no evil device will gain access to the computers -resources. - -File starting with "bolt-" are copied from bolt's source tree -and currently correspond to the bolt upstream commit with the id -f22b1cd6104bdc2b33a95d9896b50f29a141b8d8 -They can be updated from bolt via the update-from-bolt.sh script. ---- - meson.build | 3 + - panels/meson.build | 1 + - panels/thunderbolt/bolt-client.c | 697 +++++++++++++ - panels/thunderbolt/bolt-client.h | 107 ++ - panels/thunderbolt/bolt-device.c | 604 +++++++++++ - panels/thunderbolt/bolt-device.h | 87 ++ - panels/thunderbolt/bolt-enums.c | 395 ++++++++ - panels/thunderbolt/bolt-enums.h | 249 +++++ - panels/thunderbolt/bolt-error.c | 99 ++ - panels/thunderbolt/bolt-error.h | 55 + - panels/thunderbolt/bolt-names.h | 50 + - panels/thunderbolt/bolt-proxy.c | 514 ++++++++++ - panels/thunderbolt/bolt-proxy.h | 97 ++ - panels/thunderbolt/bolt-str.c | 117 +++ - panels/thunderbolt/bolt-str.h | 43 + - panels/thunderbolt/bolt-time.c | 44 + - panels/thunderbolt/bolt-time.h | 32 + - panels/thunderbolt/cc-bolt-device-dialog.c | 476 +++++++++ - panels/thunderbolt/cc-bolt-device-dialog.h | 45 + - panels/thunderbolt/cc-bolt-device-dialog.ui | 359 +++++++ - panels/thunderbolt/cc-bolt-device-entry.c | 218 ++++ - panels/thunderbolt/cc-bolt-device-entry.h | 34 + - panels/thunderbolt/cc-bolt-device-entry.ui | 49 + - panels/thunderbolt/cc-bolt-panel.c | 958 ++++++++++++++++++ - panels/thunderbolt/cc-bolt-panel.ui | 594 +++++++++++ - .../gnome-thunderbolt-panel.desktop.in.in | 17 + - panels/thunderbolt/meson.build | 74 ++ - panels/thunderbolt/thunderbolt.gresource.xml | 9 + - panels/thunderbolt/update-from-bolt.sh | 50 + - shell/cc-panel-list.c | 1 + - shell/cc-panel-loader.c | 6 + - 31 files changed, 6084 insertions(+) - create mode 100644 panels/thunderbolt/bolt-client.c - create mode 100644 panels/thunderbolt/bolt-client.h - create mode 100644 panels/thunderbolt/bolt-device.c - create mode 100644 panels/thunderbolt/bolt-device.h - create mode 100644 panels/thunderbolt/bolt-enums.c - create mode 100644 panels/thunderbolt/bolt-enums.h - create mode 100644 panels/thunderbolt/bolt-error.c - create mode 100644 panels/thunderbolt/bolt-error.h - create mode 100644 panels/thunderbolt/bolt-names.h - create mode 100644 panels/thunderbolt/bolt-proxy.c - create mode 100644 panels/thunderbolt/bolt-proxy.h - create mode 100644 panels/thunderbolt/bolt-str.c - create mode 100644 panels/thunderbolt/bolt-str.h - create mode 100644 panels/thunderbolt/bolt-time.c - create mode 100644 panels/thunderbolt/bolt-time.h - create mode 100644 panels/thunderbolt/cc-bolt-device-dialog.c - create mode 100644 panels/thunderbolt/cc-bolt-device-dialog.h - create mode 100644 panels/thunderbolt/cc-bolt-device-dialog.ui - create mode 100644 panels/thunderbolt/cc-bolt-device-entry.c - create mode 100644 panels/thunderbolt/cc-bolt-device-entry.h - create mode 100644 panels/thunderbolt/cc-bolt-device-entry.ui - create mode 100644 panels/thunderbolt/cc-bolt-panel.c - create mode 100644 panels/thunderbolt/cc-bolt-panel.ui - create mode 100644 panels/thunderbolt/gnome-thunderbolt-panel.desktop.in.in - create mode 100644 panels/thunderbolt/meson.build - create mode 100644 panels/thunderbolt/thunderbolt.gresource.xml - create mode 100755 panels/thunderbolt/update-from-bolt.sh - -diff --git a/meson.build b/meson.build -index 90ee21cb0f39..ab0e91af627a 100644 ---- a/meson.build -+++ b/meson.build -@@ -203,6 +203,7 @@ if host_is_linux_not_s390 - description: 'Define to 1 if libwacom provides definition for 3D styli') - else - message('Bluetooth and Wacom panels will not be built (no USB support on this platform)') -+ message('Thunderbolt panel will not be built (not supported on this platform)') - endif - config_h.set('BUILD_BLUETOOTH', host_is_linux_not_s390, - description: 'Define to 1 to build the Bluetooth panel') -@@ -212,6 +213,8 @@ config_h.set('BUILD_WACOM', host_is_linux_not_s390, - description: 'Define to 1 to build the Wacom panel') - config_h.set('HAVE_WACOM', host_is_linux_not_s390, - description: 'Define to 1 if Wacom is supportted') -+config_h.set('BUILD_THUNDERBOLT', host_is_linux_not_s390, -+ description: 'Define to 1 to build the Thunderbolt panel') - - # Check for info panel - gnome_session_libexecdir = get_option('gnome_session_libexecdir') -diff --git a/panels/meson.build b/panels/meson.build -index d671c4775736..37a343642218 100644 ---- a/panels/meson.build -+++ b/panels/meson.build -@@ -28,6 +28,7 @@ endif - if host_is_linux_not_s390 - panels += [ - 'bluetooth', -+ 'thunderbolt', - 'wacom' - ] - endif -diff --git a/panels/thunderbolt/bolt-client.c b/panels/thunderbolt/bolt-client.c -new file mode 100644 -index 000000000000..0ebc360b18ff ---- /dev/null -+++ b/panels/thunderbolt/bolt-client.c -@@ -0,0 +1,697 @@ -+/* -+ * Copyright © 2017 Red Hat, Inc -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see . -+ * -+ * Authors: -+ * Christian J. Kellner -+ */ -+ -+#include "bolt-client.h" -+ -+#include "bolt-device.h" -+#include "bolt-error.h" -+#include "bolt-names.h" -+ -+#include -+ -+static void handle_dbus_device_added (GObject *self, -+ GDBusProxy *bus_proxy, -+ GVariant *params); -+static void handle_dbus_device_removed (GObject *self, -+ GDBusProxy *bus_proxy, -+ GVariant *params); -+ -+struct _BoltClient -+{ -+ BoltProxy parent; -+}; -+ -+enum { -+ PROP_0, -+ -+ /* D-Bus Props */ -+ PROP_VERSION, -+ PROP_PROBING, -+ PROP_SECURITY, -+ PROP_AUTHMODE, -+ -+ PROP_LAST -+}; -+ -+static GParamSpec *props[PROP_LAST] = {NULL, }; -+ -+enum { -+ SIGNAL_DEVICE_ADDED, -+ SIGNAL_DEVICE_REMOVED, -+ SIGNAL_LAST -+}; -+ -+static guint signals[SIGNAL_LAST] = {0}; -+ -+ -+G_DEFINE_TYPE (BoltClient, -+ bolt_client, -+ BOLT_TYPE_PROXY); -+ -+ -+static void -+bolt_client_get_property (GObject *object, -+ guint prop_id, -+ GValue *value, -+ GParamSpec *pspec) -+{ -+ if (bolt_proxy_get_dbus_property (object, pspec, value)) -+ return; -+ -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -+} -+ -+static const BoltProxySignal * -+bolt_client_get_dbus_signals (guint *n) -+{ -+ static BoltProxySignal dbus_signals[] = { -+ {"DeviceAdded", handle_dbus_device_added}, -+ {"DeviceRemoved", handle_dbus_device_removed}, -+ }; -+ -+ *n = G_N_ELEMENTS (dbus_signals); -+ -+ return dbus_signals; -+} -+ -+ -+static void -+bolt_client_class_init (BoltClientClass *klass) -+{ -+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass); -+ BoltProxyClass *proxy_class = BOLT_PROXY_CLASS (klass); -+ -+ gobject_class->get_property = bolt_client_get_property; -+ -+ proxy_class->get_dbus_signals = bolt_client_get_dbus_signals; -+ -+ props[PROP_VERSION] -+ = g_param_spec_uint ("version", -+ "Version", NULL, -+ 0, G_MAXUINT, 0, -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_NAME); -+ -+ props[PROP_PROBING] -+ = g_param_spec_boolean ("probing", -+ "Probing", NULL, -+ FALSE, -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_NAME); -+ -+ props[PROP_SECURITY] -+ = g_param_spec_enum ("security-level", -+ "SecurityLevel", NULL, -+ BOLT_TYPE_SECURITY, -+ BOLT_SECURITY_UNKNOWN, -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_NAME); -+ -+ props[PROP_AUTHMODE] = -+ g_param_spec_flags ("auth-mode", "AuthMode", NULL, -+ BOLT_TYPE_AUTH_MODE, -+ BOLT_AUTH_ENABLED, -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_STRINGS); -+ -+ g_object_class_install_properties (gobject_class, -+ PROP_LAST, -+ props); -+ -+ /* signals */ -+ signals[SIGNAL_DEVICE_ADDED] = -+ g_signal_new ("device-added", -+ G_TYPE_FROM_CLASS (gobject_class), -+ G_SIGNAL_RUN_LAST, -+ 0, -+ NULL, NULL, -+ NULL, -+ G_TYPE_NONE, -+ 1, G_TYPE_STRING); -+ -+ signals[SIGNAL_DEVICE_REMOVED] = -+ g_signal_new ("device-removed", -+ G_TYPE_FROM_CLASS (gobject_class), -+ G_SIGNAL_RUN_LAST, -+ 0, -+ NULL, NULL, -+ NULL, -+ G_TYPE_NONE, -+ 1, G_TYPE_STRING); -+} -+ -+ -+static void -+bolt_client_init (BoltClient *cli) -+{ -+} -+ -+/* dbus signals */ -+ -+static void -+handle_dbus_device_added (GObject *self, GDBusProxy *bus_proxy, GVariant *params) -+{ -+ BoltClient *cli = BOLT_CLIENT (self); -+ const char *opath = NULL; -+ -+ g_variant_get_child (params, 0, "&o", &opath); -+ g_signal_emit (cli, signals[SIGNAL_DEVICE_ADDED], 0, opath); -+} -+ -+static void -+handle_dbus_device_removed (GObject *self, GDBusProxy *bus_proxy, GVariant *params) -+{ -+ BoltClient *cli = BOLT_CLIENT (self); -+ const char *opath = NULL; -+ -+ g_variant_get_child (params, 0, "&o", &opath); -+ g_signal_emit (cli, signals[SIGNAL_DEVICE_REMOVED], 0, opath); -+} -+ -+/* public methods */ -+ -+BoltClient * -+bolt_client_new (GError **error) -+{ -+ BoltClient *cli; -+ GDBusConnection *bus; -+ -+ bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, error); -+ if (bus == NULL) -+ { -+ g_prefix_error (error, "Error connecting to D-Bus: "); -+ return FALSE; -+ } -+ -+ cli = g_initable_new (BOLT_TYPE_CLIENT, -+ NULL, error, -+ "g-flags", G_DBUS_PROXY_FLAGS_NONE, -+ "g-connection", bus, -+ "g-name", BOLT_DBUS_NAME, -+ "g-object-path", BOLT_DBUS_PATH, -+ "g-interface-name", BOLT_DBUS_INTERFACE, -+ NULL); -+ -+ g_object_unref (bus); -+ -+ return cli; -+} -+ -+static void -+got_the_client (GObject *source, -+ GAsyncResult *res, -+ gpointer user_data) -+{ -+ g_autoptr(GError) error = NULL; -+ GTask *task = user_data; -+ GObject *obj; -+ -+ obj = g_async_initable_new_finish (G_ASYNC_INITABLE (source), res, &error); -+ -+ if (obj == NULL) -+ { -+ g_task_return_error (task, error); -+ return; -+ } -+ -+ g_task_return_pointer (task, obj, g_object_unref); -+ g_object_unref (task); -+} -+ -+static void -+got_the_bus (GObject *source, -+ GAsyncResult *res, -+ gpointer user_data) -+{ -+ g_autoptr(GError) error = NULL; -+ GTask *task = user_data; -+ GCancellable *cancellable; -+ GDBusConnection *bus; -+ -+ bus = g_bus_get_finish (res, &error); -+ if (bus == NULL) -+ { -+ g_prefix_error (&error, "could not connect to D-Bus: "); -+ g_task_return_error (task, error); -+ return; -+ } -+ -+ cancellable = g_task_get_cancellable (task); -+ g_async_initable_new_async (BOLT_TYPE_CLIENT, -+ G_PRIORITY_DEFAULT, -+ cancellable, -+ got_the_client, task, -+ "g-flags", G_DBUS_PROXY_FLAGS_NONE, -+ "g-connection", bus, -+ "g-name", BOLT_DBUS_NAME, -+ "g-object-path", BOLT_DBUS_PATH, -+ "g-interface-name", BOLT_DBUS_INTERFACE, -+ NULL); -+ g_object_unref (bus); -+} -+ -+void -+bolt_client_new_async (GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ GTask *task; -+ -+ task = g_task_new (NULL, cancellable, callback, user_data); -+ g_bus_get (G_BUS_TYPE_SYSTEM, cancellable, got_the_bus, task); -+} -+ -+BoltClient * -+bolt_client_new_finish (GAsyncResult *res, -+ GError **error) -+{ -+ g_return_val_if_fail (G_IS_TASK (res), NULL); -+ -+ return g_task_propagate_pointer (G_TASK (res), error); -+} -+ -+GPtrArray * -+bolt_client_list_devices (BoltClient *client, -+ GCancellable *cancel, -+ GError **error) -+{ -+ g_autoptr(GVariant) val = NULL; -+ g_autoptr(GPtrArray) devices = NULL; -+ g_autoptr(GVariantIter) iter = NULL; -+ GDBusConnection *bus = NULL; -+ const char *d; -+ -+ g_return_val_if_fail (BOLT_IS_CLIENT (client), NULL); -+ -+ val = g_dbus_proxy_call_sync (G_DBUS_PROXY (client), -+ "ListDevices", -+ NULL, -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ cancel, -+ error); -+ if (val == NULL) -+ return NULL; -+ -+ bus = g_dbus_proxy_get_connection (G_DBUS_PROXY (client)); -+ -+ devices = g_ptr_array_new_with_free_func (g_object_unref); -+ -+ g_variant_get (val, "(ao)", &iter); -+ while (g_variant_iter_loop (iter, "&o", &d, NULL)) -+ { -+ BoltDevice *dev; -+ -+ dev = bolt_device_new_for_object_path (bus, d, cancel, error); -+ if (dev == NULL) -+ return NULL; -+ -+ g_ptr_array_add (devices, dev); -+ } -+ -+ return g_steal_pointer (&devices); -+} -+ -+BoltDevice * -+bolt_client_get_device (BoltClient *client, -+ const char *uid, -+ GCancellable *cancel, -+ GError **error) -+{ -+ g_autoptr(GVariant) val = NULL; -+ g_autoptr(GError) err = NULL; -+ BoltDevice *dev = NULL; -+ GDBusConnection *bus = NULL; -+ const char *opath = NULL; -+ -+ g_return_val_if_fail (BOLT_IS_CLIENT (client), NULL); -+ -+ val = g_dbus_proxy_call_sync (G_DBUS_PROXY (client), -+ "DeviceByUid", -+ g_variant_new ("(s)", uid), -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ cancel, -+ &err); -+ -+ if (val == NULL) -+ { -+ bolt_error_propagate_stripped (error, &err); -+ return NULL; -+ } -+ -+ bus = g_dbus_proxy_get_connection (G_DBUS_PROXY (client)); -+ g_variant_get (val, "(&o)", &opath); -+ -+ if (opath == NULL) -+ return NULL; -+ -+ dev = bolt_device_new_for_object_path (bus, opath, cancel, error); -+ return dev; -+} -+ -+BoltDevice * -+bolt_client_enroll_device (BoltClient *client, -+ const char *uid, -+ BoltPolicy policy, -+ BoltAuthCtrl flags, -+ GError **error) -+{ -+ g_autoptr(GVariant) val = NULL; -+ g_autoptr(GError) err = NULL; -+ g_autofree char *fstr = NULL; -+ BoltDevice *dev = NULL; -+ GDBusConnection *bus = NULL; -+ GVariant *params = NULL; -+ const char *opath = NULL; -+ const char *pstr; -+ -+ g_return_val_if_fail (BOLT_IS_CLIENT (client), NULL); -+ -+ pstr = bolt_enum_to_string (BOLT_TYPE_POLICY, policy, error); -+ if (pstr == NULL) -+ return NULL; -+ -+ fstr = bolt_flags_to_string (BOLT_TYPE_AUTH_CTRL, flags, error); -+ if (fstr == NULL) -+ return NULL; -+ -+ params = g_variant_new ("(sss)", uid, pstr, fstr); -+ val = g_dbus_proxy_call_sync (G_DBUS_PROXY (client), -+ "EnrollDevice", -+ params, -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ NULL, -+ &err); -+ -+ if (val == NULL) -+ { -+ bolt_error_propagate_stripped (error, &err); -+ return NULL; -+ } -+ -+ bus = g_dbus_proxy_get_connection (G_DBUS_PROXY (client)); -+ g_variant_get (val, "(&o)", &opath); -+ -+ if (opath == NULL) -+ return NULL; -+ -+ dev = bolt_device_new_for_object_path (bus, opath, NULL, error); -+ return dev; -+} -+ -+void -+bolt_client_enroll_device_async (BoltClient *client, -+ const char *uid, -+ BoltPolicy policy, -+ BoltAuthCtrl flags, -+ GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ g_autofree char *fstr = NULL; -+ GError *err = NULL; -+ GVariant *params; -+ const char *pstr; -+ -+ g_return_if_fail (BOLT_IS_CLIENT (client)); -+ g_return_if_fail (uid != NULL); -+ -+ pstr = bolt_enum_to_string (BOLT_TYPE_POLICY, policy, &err); -+ if (pstr == NULL) -+ { -+ g_task_report_error (client, callback, user_data, NULL, err); -+ return; -+ } -+ -+ fstr = bolt_flags_to_string (BOLT_TYPE_AUTH_CTRL, flags, &err); -+ if (fstr == NULL) -+ { -+ g_task_report_error (client, callback, user_data, NULL, err); -+ return; -+ } -+ -+ params = g_variant_new ("(sss)", uid, pstr, fstr); -+ g_dbus_proxy_call (G_DBUS_PROXY (client), -+ "EnrollDevice", -+ params, -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ cancellable, -+ callback, -+ user_data); -+} -+ -+gboolean -+bolt_client_enroll_device_finish (BoltClient *client, -+ GAsyncResult *res, -+ char **path, -+ GError **error) -+{ -+ GVariant *val = NULL; -+ -+ g_autoptr(GError) err = NULL; -+ -+ g_return_val_if_fail (BOLT_IS_CLIENT (client), FALSE); -+ -+ val = g_dbus_proxy_call_finish (G_DBUS_PROXY (client), res, &err); -+ if (val == NULL) -+ { -+ bolt_error_propagate_stripped (error, &err); -+ return FALSE; -+ } -+ -+ if (path != NULL) -+ g_variant_get (val, "(o)", path); -+ -+ return TRUE; -+} -+ -+gboolean -+bolt_client_forget_device (BoltClient *client, -+ const char *uid, -+ GError **error) -+{ -+ g_autoptr(GVariant) val = NULL; -+ g_autoptr(GError) err = NULL; -+ -+ g_return_val_if_fail (BOLT_IS_CLIENT (client), FALSE); -+ -+ val = g_dbus_proxy_call_sync (G_DBUS_PROXY (client), -+ "ForgetDevice", -+ g_variant_new ("(s)", uid), -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ NULL, -+ &err); -+ -+ if (val == NULL) -+ { -+ bolt_error_propagate_stripped (error, &err); -+ return FALSE; -+ } -+ -+ return TRUE; -+} -+ -+void -+bolt_client_forget_device_async (BoltClient *client, -+ const char *uid, -+ GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ g_return_if_fail (BOLT_IS_CLIENT (client)); -+ -+ g_dbus_proxy_call (G_DBUS_PROXY (client), -+ "ForgetDevice", -+ g_variant_new ("(s)", uid), -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ cancellable, -+ callback, -+ user_data); -+} -+ -+gboolean -+bolt_client_forget_device_finish (BoltClient *client, -+ GAsyncResult *res, -+ GError **error) -+{ -+ g_autoptr(GVariant) val = NULL; -+ g_autoptr(GError) err = NULL; -+ -+ g_return_val_if_fail (BOLT_IS_CLIENT (client), FALSE); -+ -+ val = g_dbus_proxy_call_finish (G_DBUS_PROXY (client), res, &err); -+ if (val == NULL) -+ { -+ bolt_error_propagate_stripped (error, &err); -+ return FALSE; -+ } -+ -+ return TRUE; -+} -+ -+/* getter */ -+guint -+bolt_client_get_version (BoltClient *client) -+{ -+ const char *key; -+ guint val = 0; -+ gboolean ok; -+ -+ g_return_val_if_fail (BOLT_IS_CLIENT (client), val); -+ -+ key = g_param_spec_get_name (props[PROP_VERSION]); -+ ok = bolt_proxy_get_property_uint32 (BOLT_PROXY (client), key, &val); -+ -+ if (!ok) -+ g_warning ("failed to get property '%s'", key); -+ -+ return val; -+} -+ -+gboolean -+bolt_client_is_probing (BoltClient *client) -+{ -+ const char *key; -+ gboolean val = FALSE; -+ gboolean ok; -+ -+ g_return_val_if_fail (BOLT_IS_CLIENT (client), val); -+ -+ key = g_param_spec_get_name (props[PROP_PROBING]); -+ ok = bolt_proxy_get_property_bool (BOLT_PROXY (client), key, &val); -+ -+ if (!ok) -+ g_warning ("failed to get enum property '%s'", key); -+ -+ return val; -+} -+ -+BoltSecurity -+bolt_client_get_security (BoltClient *client) -+{ -+ const char *key; -+ gboolean ok; -+ gint val = BOLT_SECURITY_UNKNOWN; -+ -+ g_return_val_if_fail (BOLT_IS_CLIENT (client), val); -+ -+ key = g_param_spec_get_name (props[PROP_SECURITY]); -+ ok = bolt_proxy_get_property_enum (BOLT_PROXY (client), key, &val); -+ -+ if (!ok) -+ g_warning ("failed to get enum property '%s'", key); -+ -+ return val; -+} -+ -+BoltAuthMode -+bolt_client_get_authmode (BoltClient *client) -+{ -+ const char *key; -+ gboolean ok; -+ guint val = BOLT_AUTH_DISABLED; -+ -+ g_return_val_if_fail (BOLT_IS_CLIENT (client), val); -+ -+ key = g_param_spec_get_name (props[PROP_AUTHMODE]); -+ ok = bolt_proxy_get_property_flags (BOLT_PROXY (client), key, &val); -+ -+ if (!ok) -+ g_warning ("failed to get enum property '%s'", key); -+ -+ return val; -+} -+ -+void -+bolt_client_set_authmode_async (BoltClient *client, -+ BoltAuthMode mode, -+ GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ g_autofree char *str = NULL; -+ GError *err = NULL; -+ GParamSpec *pspec; -+ GParamSpecFlags *flags_pspec; -+ GFlagsClass *flags_class; -+ -+ pspec = props[PROP_AUTHMODE]; -+ flags_pspec = G_PARAM_SPEC_FLAGS (pspec); -+ flags_class = flags_pspec->flags_class; -+ str = bolt_flags_class_to_string (flags_class, mode, &err); -+ -+ if (str == NULL) -+ { -+ g_task_report_error (client, callback, user_data, NULL, err); -+ return; -+ } -+ -+ bolt_proxy_set_property_async (BOLT_PROXY (client), -+ g_param_spec_get_nick (pspec), -+ g_variant_new ("s", str), -+ cancellable, -+ callback, -+ user_data); -+} -+ -+gboolean -+bolt_client_set_authmode_finish (BoltClient *client, -+ GAsyncResult *res, -+ GError **error) -+{ -+ return bolt_proxy_set_property_finish (res, error); -+} -+ -+/* utility functions */ -+static gint -+device_sort_by_syspath (gconstpointer ap, -+ gconstpointer bp, -+ gpointer data) -+{ -+ BoltDevice *a = BOLT_DEVICE (*((BoltDevice **) ap)); -+ BoltDevice *b = BOLT_DEVICE (*((BoltDevice **) bp)); -+ gint sort_order = GPOINTER_TO_INT (data); -+ const char *pa; -+ const char *pb; -+ -+ pa = bolt_device_get_syspath (a); -+ pb = bolt_device_get_syspath (b); -+ -+ return sort_order * g_strcmp0 (pa, pb); -+} -+ -+void -+bolt_devices_sort_by_syspath (GPtrArray *devices, -+ gboolean reverse) -+{ -+ gpointer sort_order = GINT_TO_POINTER (reverse ? -1 : 1); -+ -+ if (devices == NULL) -+ return; -+ -+ g_ptr_array_sort_with_data (devices, -+ device_sort_by_syspath, -+ sort_order); -+} -diff --git a/panels/thunderbolt/bolt-client.h b/panels/thunderbolt/bolt-client.h -new file mode 100644 -index 000000000000..85382301182b ---- /dev/null -+++ b/panels/thunderbolt/bolt-client.h -@@ -0,0 +1,107 @@ -+/* -+ * Copyright © 2017 Red Hat, Inc -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see . -+ * -+ * Authors: -+ * Christian J. Kellner -+ */ -+ -+#pragma once -+ -+#include "bolt-enums.h" -+#include "bolt-device.h" -+#include "bolt-proxy.h" -+ -+G_BEGIN_DECLS -+ -+#define BOLT_TYPE_CLIENT bolt_client_get_type () -+G_DECLARE_FINAL_TYPE (BoltClient, bolt_client, BOLT, CLIENT, BoltProxy); -+ -+BoltClient * bolt_client_new (GError **error); -+ -+void bolt_client_new_async (GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data); -+BoltClient * bolt_client_new_finish (GAsyncResult *res, -+ GError **error); -+ -+GPtrArray * bolt_client_list_devices (BoltClient *client, -+ GCancellable *cancellable, -+ GError **error); -+ -+BoltDevice * bolt_client_get_device (BoltClient *client, -+ const char *uid, -+ GCancellable *cancellable, -+ GError **error); -+ -+BoltDevice * bolt_client_enroll_device (BoltClient *client, -+ const char *uid, -+ BoltPolicy policy, -+ BoltAuthCtrl flags, -+ GError **error); -+ -+void bolt_client_enroll_device_async (BoltClient *client, -+ const char *uid, -+ BoltPolicy policy, -+ BoltAuthCtrl flags, -+ GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data); -+ -+gboolean bolt_client_enroll_device_finish (BoltClient *client, -+ GAsyncResult *res, -+ char **path, -+ GError **error); -+ -+gboolean bolt_client_forget_device (BoltClient *client, -+ const char *uid, -+ GError **error); -+ -+void bolt_client_forget_device_async (BoltClient *client, -+ const char *uid, -+ GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data); -+ -+gboolean bolt_client_forget_device_finish (BoltClient *client, -+ GAsyncResult *res, -+ GError **error); -+ -+/* getter */ -+guint bolt_client_get_version (BoltClient *client); -+ -+gboolean bolt_client_is_probing (BoltClient *client); -+ -+BoltSecurity bolt_client_get_security (BoltClient *client); -+ -+BoltAuthMode bolt_client_get_authmode (BoltClient *client); -+ -+/* setter */ -+ -+void bolt_client_set_authmode_async (BoltClient *client, -+ BoltAuthMode mode, -+ GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data); -+ -+gboolean bolt_client_set_authmode_finish (BoltClient *client, -+ GAsyncResult *res, -+ GError **error); -+ -+/* utility functions */ -+void bolt_devices_sort_by_syspath (GPtrArray *devices, -+ gboolean reverse); -+ -+G_END_DECLS -diff --git a/panels/thunderbolt/bolt-device.c b/panels/thunderbolt/bolt-device.c -new file mode 100644 -index 000000000000..b316950d3b81 ---- /dev/null -+++ b/panels/thunderbolt/bolt-device.c -@@ -0,0 +1,604 @@ -+/* -+ * Copyright © 2017 Red Hat, Inc -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see . -+ * -+ * Authors: -+ * Christian J. Kellner -+ */ -+ -+#include "config.h" -+ -+#include "bolt-device.h" -+ -+#include "bolt-enums.h" -+#include "bolt-error.h" -+#include "bolt-names.h" -+ -+#include -+ -+struct _BoltDevice -+{ -+ BoltProxy parent; -+}; -+ -+enum { -+ PROP_0, -+ -+ /* D-Bus Props */ -+ PROP_UID, -+ PROP_NAME, -+ PROP_VENDOR, -+ PROP_TYPE, -+ PROP_STATUS, -+ PROP_AUTHFLAGS, -+ PROP_PARENT, -+ PROP_SYSPATH, -+ PROP_CONNTIME, -+ PROP_AUTHTIME, -+ -+ PROP_STORED, -+ PROP_POLICY, -+ PROP_KEY, -+ PROP_STORETIME, -+ PROP_LABEL, -+ -+ PROP_LAST -+}; -+ -+static GParamSpec *props[PROP_LAST] = {NULL, }; -+ -+G_DEFINE_TYPE (BoltDevice, -+ bolt_device, -+ BOLT_TYPE_PROXY); -+ -+static void -+bolt_device_get_property (GObject *object, -+ guint prop_id, -+ GValue *value, -+ GParamSpec *pspec) -+{ -+ if (bolt_proxy_get_dbus_property (object, pspec, value)) -+ return; -+} -+ -+ -+ -+static void -+bolt_device_class_init (BoltDeviceClass *klass) -+{ -+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass); -+ -+ gobject_class->get_property = bolt_device_get_property; -+ -+ props[PROP_UID] = -+ g_param_spec_string ("uid", -+ "Uid", NULL, -+ "unknown", -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_NICK); -+ -+ props[PROP_NAME] = -+ g_param_spec_string ("name", -+ "Name", NULL, -+ "unknown", -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_NICK); -+ -+ props[PROP_VENDOR] = -+ g_param_spec_string ("vendor", -+ "Vendor", NULL, -+ "unknown", -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_NICK); -+ -+ props[PROP_TYPE] = -+ g_param_spec_enum ("type", -+ "Type", NULL, -+ BOLT_TYPE_DEVICE_TYPE, -+ BOLT_DEVICE_PERIPHERAL, -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_NICK); -+ -+ props[PROP_STATUS] = -+ g_param_spec_enum ("status", -+ "Status", NULL, -+ BOLT_TYPE_STATUS, -+ BOLT_STATUS_DISCONNECTED, -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_NICK); -+ -+ props[PROP_AUTHFLAGS] = -+ g_param_spec_flags ("authflags", -+ "AuthFlags", NULL, -+ BOLT_TYPE_AUTH_FLAGS, -+ BOLT_AUTH_NONE, -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_STRINGS); -+ -+ props[PROP_PARENT] = -+ g_param_spec_string ("parent", -+ "Parent", NULL, -+ "unknown", -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_NICK); -+ -+ props[PROP_SYSPATH] = -+ g_param_spec_string ("syspath", -+ "SysfsPath", NULL, -+ "unknown", -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_NICK); -+ -+ props[PROP_CONNTIME] = -+ g_param_spec_uint64 ("conntime", -+ "ConnectTime", NULL, -+ 0, G_MAXUINT64, 0, -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_STRINGS); -+ -+ props[PROP_AUTHTIME] = -+ g_param_spec_uint64 ("authtime", -+ "AuthorizeTime", NULL, -+ 0, G_MAXUINT64, 0, -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_STRINGS); -+ -+ props[PROP_STORED] = -+ g_param_spec_boolean ("stored", -+ "Stored", NULL, -+ FALSE, -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_NICK); -+ -+ props[PROP_POLICY] = -+ g_param_spec_enum ("policy", -+ "Policy", NULL, -+ BOLT_TYPE_POLICY, -+ BOLT_POLICY_DEFAULT, -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_NICK); -+ -+ props[PROP_KEY] = -+ g_param_spec_enum ("key", -+ "Key", NULL, -+ BOLT_TYPE_KEY_STATE, -+ BOLT_KEY_MISSING, -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_NICK); -+ -+ props[PROP_STORETIME] = -+ g_param_spec_uint64 ("storetime", -+ "StoreTime", NULL, -+ 0, G_MAXUINT64, 0, -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_STRINGS); -+ -+ props[PROP_LABEL] = -+ g_param_spec_string ("label", -+ "Label", NULL, -+ NULL, -+ G_PARAM_READABLE | -+ G_PARAM_STATIC_STRINGS); -+ -+ g_object_class_install_properties (gobject_class, -+ PROP_LAST, -+ props); -+ -+} -+ -+static void -+bolt_device_init (BoltDevice *mgr) -+{ -+} -+ -+/* public methods */ -+ -+BoltDevice * -+bolt_device_new_for_object_path (GDBusConnection *bus, -+ const char *path, -+ GCancellable *cancel, -+ GError **error) -+{ -+ BoltDevice *dev; -+ -+ dev = g_initable_new (BOLT_TYPE_DEVICE, -+ cancel, error, -+ "g-flags", G_DBUS_PROXY_FLAGS_NONE, -+ "g-connection", bus, -+ "g-name", BOLT_DBUS_NAME, -+ "g-object-path", path, -+ "g-interface-name", BOLT_DBUS_DEVICE_INTERFACE, -+ NULL); -+ -+ return dev; -+} -+ -+gboolean -+bolt_device_authorize (BoltDevice *dev, -+ BoltAuthCtrl flags, -+ GCancellable *cancel, -+ GError **error) -+{ -+ g_autoptr(GError) err = NULL; -+ g_autofree char *fstr = NULL; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), FALSE); -+ -+ fstr = bolt_flags_to_string (BOLT_TYPE_AUTH_CTRL, flags, error); -+ if (fstr == NULL) -+ return FALSE; -+ -+ g_dbus_proxy_call_sync (G_DBUS_PROXY (dev), -+ "Authorize", -+ g_variant_new ("(s)", fstr), -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ cancel, -+ &err); -+ -+ if (err != NULL) -+ return bolt_error_propagate_stripped (error, &err); -+ -+ return TRUE; -+} -+ -+void -+bolt_device_authorize_async (BoltDevice *dev, -+ BoltAuthCtrl flags, -+ GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ GError *err = NULL; -+ g_autofree char *fstr = NULL; -+ -+ g_return_if_fail (BOLT_IS_DEVICE (dev)); -+ -+ fstr = bolt_flags_to_string (BOLT_TYPE_AUTH_CTRL, flags, &err); -+ if (fstr == NULL) -+ { -+ g_task_report_error (dev, callback, user_data, NULL, err); -+ return; -+ } -+ -+ g_dbus_proxy_call (G_DBUS_PROXY (dev), -+ "Authorize", -+ g_variant_new ("(s)", fstr), -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ cancellable, -+ callback, -+ user_data); -+} -+ -+gboolean -+bolt_device_authorize_finish (BoltDevice *dev, -+ GAsyncResult *res, -+ GError **error) -+{ -+ g_autoptr(GError) err = NULL; -+ g_autoptr(GVariant) val = NULL; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), FALSE); -+ -+ val = g_dbus_proxy_call_finish (G_DBUS_PROXY (dev), res, &err); -+ if (val == NULL) -+ { -+ bolt_error_propagate_stripped (error, &err); -+ return FALSE; -+ } -+ -+ return TRUE; -+} -+ -+const char * -+bolt_device_get_uid (BoltDevice *dev) -+{ -+ const char *key; -+ const char *str; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), NULL); -+ -+ key = g_param_spec_get_name (props[PROP_UID]); -+ str = bolt_proxy_get_property_string (BOLT_PROXY (dev), key); -+ -+ return str; -+} -+ -+const char * -+bolt_device_get_name (BoltDevice *dev) -+{ -+ const char *key; -+ const char *str; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), NULL); -+ -+ key = g_param_spec_get_name (props[PROP_NAME]); -+ str = bolt_proxy_get_property_string (BOLT_PROXY (dev), key); -+ -+ return str; -+} -+ -+const char * -+bolt_device_get_vendor (BoltDevice *dev) -+{ -+ const char *key; -+ const char *str; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), NULL); -+ -+ key = g_param_spec_get_name (props[PROP_VENDOR]); -+ str = bolt_proxy_get_property_string (BOLT_PROXY (dev), key); -+ -+ return str; -+} -+ -+BoltDeviceType -+bolt_device_get_device_type (BoltDevice *dev) -+{ -+ const char *key; -+ gboolean ok; -+ gint val = BOLT_DEVICE_PERIPHERAL; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), val); -+ -+ key = g_param_spec_get_name (props[PROP_TYPE]); -+ ok = bolt_proxy_get_property_enum (BOLT_PROXY (dev), key, &val); -+ -+ if (!ok) -+ g_warning ("failed to get enum property '%s'", key); -+ -+ return val; -+} -+ -+BoltStatus -+bolt_device_get_status (BoltDevice *dev) -+{ -+ const char *key; -+ gboolean ok; -+ gint val = BOLT_STATUS_UNKNOWN; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), val); -+ -+ key = g_param_spec_get_name (props[PROP_STATUS]); -+ ok = bolt_proxy_get_property_enum (BOLT_PROXY (dev), key, &val); -+ -+ if (!ok) -+ g_warning ("failed to get enum property '%s'", key); -+ -+ return val; -+} -+ -+BoltAuthFlags -+bolt_device_get_authflags (BoltDevice *dev) -+{ -+ const char *key; -+ gboolean ok; -+ guint val = BOLT_AUTH_NONE; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), val); -+ -+ key = g_param_spec_get_name (props[PROP_AUTHFLAGS]); -+ ok = bolt_proxy_get_property_flags (BOLT_PROXY (dev), key, &val); -+ -+ if (!ok) -+ g_warning ("failed to get enum property '%s'", key); -+ -+ return val; -+} -+ -+const char * -+bolt_device_get_parent (BoltDevice *dev) -+{ -+ const char *key; -+ const char *str; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), NULL); -+ -+ key = g_param_spec_get_name (props[PROP_PARENT]); -+ str = bolt_proxy_get_property_string (BOLT_PROXY (dev), key); -+ -+ return str; -+} -+ -+const char * -+bolt_device_get_syspath (BoltDevice *dev) -+{ -+ const char *key; -+ const char *str; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), NULL); -+ -+ key = g_param_spec_get_name (props[PROP_SYSPATH]); -+ str = bolt_proxy_get_property_string (BOLT_PROXY (dev), key); -+ -+ return str; -+} -+ -+guint64 -+bolt_device_get_conntime (BoltDevice *dev) -+{ -+ const char *key; -+ guint64 val = 0; -+ gboolean ok; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), val); -+ -+ key = g_param_spec_get_name (props[PROP_CONNTIME]); -+ ok = bolt_proxy_get_property_uint64 (BOLT_PROXY (dev), key, &val); -+ -+ if (!ok) -+ g_warning ("failed to get enum property '%s'", key); -+ -+ return val; -+} -+ -+guint64 -+bolt_device_get_authtime (BoltDevice *dev) -+{ -+ const char *key; -+ guint64 val = 0; -+ gboolean ok; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), val); -+ -+ key = g_param_spec_get_name (props[PROP_AUTHTIME]); -+ ok = bolt_proxy_get_property_uint64 (BOLT_PROXY (dev), key, &val); -+ -+ if (!ok) -+ g_warning ("failed to get enum property '%s'", key); -+ -+ return val; -+} -+ -+gboolean -+bolt_device_is_stored (BoltDevice *dev) -+{ -+ const char *key; -+ gboolean val = FALSE; -+ gboolean ok; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), val); -+ -+ key = g_param_spec_get_name (props[PROP_STORED]); -+ ok = bolt_proxy_get_property_bool (BOLT_PROXY (dev), key, &val); -+ -+ if (!ok) -+ g_warning ("failed to get enum property '%s'", key); -+ -+ return val; -+} -+ -+BoltPolicy -+bolt_device_get_policy (BoltDevice *dev) -+{ -+ const char *key; -+ gboolean ok; -+ gint val = BOLT_POLICY_DEFAULT; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), val); -+ -+ key = g_param_spec_get_name (props[PROP_POLICY]); -+ ok = bolt_proxy_get_property_enum (BOLT_PROXY (dev), key, &val); -+ -+ if (!ok) -+ g_warning ("failed to get enum property '%s'", key); -+ -+ return val; -+} -+ -+BoltKeyState -+bolt_device_get_keystate (BoltDevice *dev) -+{ -+ const char *key; -+ gboolean ok; -+ gint val = BOLT_KEY_MISSING; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), val); -+ -+ key = g_param_spec_get_name (props[PROP_KEY]); -+ ok = bolt_proxy_get_property_enum (BOLT_PROXY (dev), key, &val); -+ -+ if (!ok) -+ g_warning ("failed to get enum property '%s'", key); -+ -+ return val; -+} -+ -+guint64 -+bolt_device_get_storetime (BoltDevice *dev) -+{ -+ const char *key; -+ guint64 val = 0; -+ gboolean ok; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), val); -+ -+ key = g_param_spec_get_name (props[PROP_STORETIME]); -+ ok = bolt_proxy_get_property_uint64 (BOLT_PROXY (dev), key, &val); -+ -+ if (!ok) -+ g_warning ("failed to get enum property '%s'", key); -+ -+ return val; -+} -+ -+const char * -+bolt_device_get_label (BoltDevice *dev) -+{ -+ const char *key; -+ const char *str; -+ -+ g_return_val_if_fail (BOLT_IS_DEVICE (dev), NULL); -+ -+ key = g_param_spec_get_name (props[PROP_LABEL]); -+ str = bolt_proxy_get_property_string (BOLT_PROXY (dev), key); -+ -+ return str; -+} -+ -+char * -+bolt_device_get_display_name (BoltDevice *dev) -+{ -+ const char *label; -+ const char *name; -+ const char *vendor; -+ -+ label = bolt_device_get_label (dev); -+ if (label != NULL) -+ return g_strdup (label); -+ -+ name = bolt_device_get_name (dev); -+ vendor = bolt_device_get_vendor (dev); -+ -+ return g_strdup_printf ("%s %s", vendor, name); -+} -+ -+guint64 -+bolt_device_get_timestamp (BoltDevice *dev) -+{ -+ BoltStatus status; -+ guint64 timestamp = 0; -+ -+ status = bolt_device_get_status (dev); -+ -+ switch (status) -+ { -+ case BOLT_STATUS_AUTHORIZING: -+ case BOLT_STATUS_AUTH_ERROR: -+ case BOLT_STATUS_CONNECTING: -+ case BOLT_STATUS_CONNECTED: -+ timestamp = bolt_device_get_conntime (dev); -+ break; -+ -+ case BOLT_STATUS_DISCONNECTED: -+ /* implicit: device is stored */ -+ timestamp = bolt_device_get_storetime (dev); -+ break; -+ -+ case BOLT_STATUS_AUTHORIZED: -+ case BOLT_STATUS_AUTHORIZED_DPONLY: -+ case BOLT_STATUS_AUTHORIZED_NEWKEY: -+ case BOLT_STATUS_AUTHORIZED_SECURE: -+ timestamp = bolt_device_get_authtime (dev); -+ break; -+ -+ case BOLT_STATUS_UNKNOWN: -+ timestamp = 0; -+ break; -+ } -+ -+ return timestamp; -+} -diff --git a/panels/thunderbolt/bolt-device.h b/panels/thunderbolt/bolt-device.h -new file mode 100644 -index 000000000000..ffd09f9a8ad7 ---- /dev/null -+++ b/panels/thunderbolt/bolt-device.h -@@ -0,0 +1,87 @@ -+/* -+ * Copyright © 2017 Red Hat, Inc -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see . -+ * -+ * Authors: -+ * Christian J. Kellner -+ */ -+ -+#pragma once -+ -+#include "bolt-enums.h" -+#include "bolt-proxy.h" -+ -+G_BEGIN_DECLS -+ -+#define BOLT_TYPE_DEVICE bolt_device_get_type () -+G_DECLARE_FINAL_TYPE (BoltDevice, bolt_device, BOLT, DEVICE, BoltProxy); -+ -+BoltDevice * bolt_device_new_for_object_path (GDBusConnection *bus, -+ const char *path, -+ GCancellable *cancellable, -+ GError **error); -+ -+gboolean bolt_device_authorize (BoltDevice *dev, -+ BoltAuthCtrl flags, -+ GCancellable *cancellable, -+ GError **error); -+ -+void bolt_device_authorize_async (BoltDevice *dev, -+ BoltAuthCtrl flags, -+ GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data); -+ -+gboolean bolt_device_authorize_finish (BoltDevice *dev, -+ GAsyncResult *res, -+ GError **error); -+ -+/* getter */ -+const char * bolt_device_get_uid (BoltDevice *dev); -+ -+const char * bolt_device_get_name (BoltDevice *dev); -+ -+const char * bolt_device_get_vendor (BoltDevice *dev); -+ -+BoltDeviceType bolt_device_get_device_type (BoltDevice *dev); -+ -+BoltStatus bolt_device_get_status (BoltDevice *dev); -+ -+BoltAuthFlags bolt_device_get_authflags (BoltDevice *dev); -+ -+const char * bolt_device_get_parent (BoltDevice *dev); -+ -+const char * bolt_device_get_syspath (BoltDevice *dev); -+ -+guint64 bolt_device_get_conntime (BoltDevice *dev); -+ -+guint64 bolt_device_get_authtime (BoltDevice *dev); -+ -+gboolean bolt_device_is_stored (BoltDevice *dev); -+ -+BoltPolicy bolt_device_get_policy (BoltDevice *dev); -+ -+BoltKeyState bolt_device_get_keystate (BoltDevice *dev); -+ -+guint64 bolt_device_get_storetime (BoltDevice *dev); -+ -+const char * bolt_device_get_label (BoltDevice *dev); -+ -+/* derived getter */ -+char * bolt_device_get_display_name (BoltDevice *dev); -+ -+guint64 bolt_device_get_timestamp (BoltDevice *dev); -+ -+G_END_DECLS -diff --git a/panels/thunderbolt/bolt-enums.c b/panels/thunderbolt/bolt-enums.c -new file mode 100644 -index 000000000000..de77737f8088 ---- /dev/null -+++ b/panels/thunderbolt/bolt-enums.c -@@ -0,0 +1,395 @@ -+/* -+ * Copyright © 2017 Red Hat, Inc -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see . -+ * -+ * Authors: -+ * Christian J. Kellner -+ */ -+ -+#include "config.h" -+ -+#include "bolt-enums.h" -+#include "bolt-error.h" -+ -+#include -+ -+G_DEFINE_AUTOPTR_CLEANUP_FUNC (GEnumClass, g_type_class_unref); -+G_DEFINE_AUTOPTR_CLEANUP_FUNC (GFlagsClass, g_type_class_unref); -+ -+gboolean -+bolt_enum_class_validate (GEnumClass *enum_class, -+ gint value, -+ GError **error) -+{ -+ const char *name; -+ gboolean oob; -+ -+ if (enum_class == NULL) -+ { -+ name = g_type_name_from_class ((GTypeClass *) enum_class); -+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, -+ "could not determine enum class for '%s'", -+ name); -+ -+ return FALSE; -+ } -+ -+ oob = value < enum_class->minimum || value > enum_class->maximum; -+ -+ if (oob) -+ { -+ name = g_type_name_from_class ((GTypeClass *) enum_class); -+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, -+ "enum value '%d' is out of bounds for '%s'", -+ value, name); -+ return FALSE; -+ } -+ -+ return TRUE; -+} -+ -+gboolean -+bolt_enum_validate (GType enum_type, -+ gint value, -+ GError **error) -+{ -+ g_autoptr(GEnumClass) klass = g_type_class_ref (enum_type); -+ return bolt_enum_class_validate (klass, value, error); -+} -+ -+const char * -+bolt_enum_to_string (GType enum_type, -+ gint value, -+ GError **error) -+{ -+ g_autoptr(GEnumClass) klass = NULL; -+ GEnumValue *ev; -+ -+ klass = g_type_class_ref (enum_type); -+ -+ if (!bolt_enum_class_validate (klass, value, error)) -+ return NULL; -+ -+ ev = g_enum_get_value (klass, value); -+ return ev->value_nick; -+} -+ -+gint -+bolt_enum_from_string (GType enum_type, -+ const char *string, -+ GError **error) -+{ -+ g_autoptr(GEnumClass) klass = NULL; -+ const char *name; -+ GEnumValue *ev; -+ -+ klass = g_type_class_ref (enum_type); -+ -+ if (klass == NULL) -+ { -+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, -+ "could not determine enum class"); -+ return -1; -+ } -+ -+ if (string == NULL) -+ { -+ name = g_type_name_from_class ((GTypeClass *) klass); -+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, -+ "empty string passed for enum class for '%s'", -+ name); -+ return -1; -+ } -+ -+ ev = g_enum_get_value_by_nick (klass, string); -+ -+ if (ev == NULL) -+ { -+ name = g_type_name (enum_type); -+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, -+ "invalid string '%s' for enum '%s'", string, name); -+ return -1; -+ } -+ -+ return ev->value; -+} -+ -+char * -+bolt_flags_class_to_string (GFlagsClass *flags_class, -+ guint value, -+ GError **error) -+{ -+ g_autoptr(GString) str = NULL; -+ const char *name; -+ GFlagsValue *fv; -+ -+ if (flags_class == NULL) -+ { -+ name = g_type_name_from_class ((GTypeClass *) flags_class); -+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, -+ "could not determine flags class for '%s'", -+ name); -+ -+ return FALSE; -+ } -+ -+ fv = g_flags_get_first_value (flags_class, value); -+ if (fv == NULL) -+ { -+ if (value == 0) -+ return g_strdup (""); -+ -+ name = g_type_name_from_class ((GTypeClass *) flags_class); -+ -+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, -+ "invalid value '%u' for flags '%s'", value, name); -+ return NULL; -+ } -+ -+ value &= ~fv->value; -+ str = g_string_new (fv->value_nick); -+ -+ while (value != 0 && -+ (fv = g_flags_get_first_value (flags_class, value)) != NULL) -+ { -+ g_string_append (str, " | "); -+ g_string_append (str, fv->value_nick); -+ -+ value &= ~fv->value; -+ } -+ -+ if (value != 0) -+ { -+ name = g_type_name_from_class ((GTypeClass *) flags_class); -+ -+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, -+ "unhandled value '%u' for flags '%s'", value, name); -+ return NULL; -+ } -+ -+ return g_string_free (g_steal_pointer (&str), FALSE); -+} -+ -+gboolean -+bolt_flags_class_from_string (GFlagsClass *flags_class, -+ const char *string, -+ guint *flags_out, -+ GError **error) -+{ -+ g_auto(GStrv) vals = NULL; -+ const char *name; -+ guint flags = 0; -+ -+ if (flags_class == NULL) -+ { -+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, -+ "could not determine flags class"); -+ -+ return FALSE; -+ } -+ -+ if (string == NULL) -+ { -+ name = g_type_name_from_class ((GTypeClass *) flags_class); -+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, -+ "empty string passed for flags class for '%s'", -+ name); -+ return FALSE; -+ } -+ -+ vals = g_strsplit (string, "|", -1); -+ -+ for (guint i = 0; vals[i]; i++) -+ { -+ GFlagsValue *fv; -+ char *nick; -+ -+ nick = g_strstrip (vals[i]); -+ fv = g_flags_get_value_by_nick (flags_class, nick); -+ -+ if (fv == NULL) -+ { -+ name = g_type_name_from_class ((GTypeClass *) flags_class); -+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, -+ "invalid flag '%s' for flags '%s'", string, name); -+ -+ return FALSE; -+ } -+ -+ flags |= fv->value; -+ } -+ -+ if (flags_out != NULL) -+ *flags_out = flags; -+ -+ return TRUE; -+} -+ -+char * -+bolt_flags_to_string (GType flags_type, -+ guint value, -+ GError **error) -+{ -+ g_autoptr(GFlagsClass) klass = NULL; -+ -+ klass = g_type_class_ref (flags_type); -+ return bolt_flags_class_to_string (klass, value, error); -+} -+ -+gboolean -+bolt_flags_from_string (GType flags_type, -+ const char *string, -+ guint *flags_out, -+ GError **error) -+{ -+ g_autoptr(GFlagsClass) klass = NULL; -+ -+ klass = g_type_class_ref (flags_type); -+ return bolt_flags_class_from_string (klass, string, flags_out, error); -+} -+ -+gboolean -+bolt_flags_update (guint from, -+ guint *to, -+ guint mask) -+{ -+ guint val; -+ gboolean chg; -+ -+ g_return_val_if_fail (to != NULL, FALSE); -+ -+ val = *to & ~mask; /* clear all bits in mask */ -+ val = val | (from & mask); /* set all bits in from and mask */ -+ chg = *to != val; -+ *to = val; -+ -+ return chg; -+} -+ -+const char * -+bolt_status_to_string (BoltStatus status) -+{ -+ return bolt_enum_to_string (BOLT_TYPE_STATUS, status, NULL); -+} -+ -+gboolean -+bolt_status_is_authorized (BoltStatus status) -+{ -+ return status == BOLT_STATUS_AUTHORIZED || -+ status == BOLT_STATUS_AUTHORIZED_SECURE || -+ status == BOLT_STATUS_AUTHORIZED_NEWKEY; -+} -+ -+gboolean -+bolt_status_is_pending (BoltStatus status) -+{ -+ return status == BOLT_STATUS_AUTH_ERROR || -+ status == BOLT_STATUS_CONNECTED; -+} -+ -+gboolean -+bolt_status_validate (BoltStatus status) -+{ -+ return bolt_enum_validate (BOLT_TYPE_STATUS, status, NULL); -+} -+ -+gboolean -+bolt_status_is_connected (BoltStatus status) -+{ -+ return status > BOLT_STATUS_DISCONNECTED; -+} -+ -+BoltSecurity -+bolt_security_from_string (const char *str) -+{ -+ return bolt_enum_from_string (BOLT_TYPE_SECURITY, str, NULL); -+} -+ -+const char * -+bolt_security_to_string (BoltSecurity security) -+{ -+ return bolt_enum_to_string (BOLT_TYPE_SECURITY, security, NULL); -+} -+ -+gboolean -+bolt_security_validate (BoltSecurity security) -+{ -+ return bolt_enum_validate (BOLT_TYPE_SECURITY, security, NULL); -+} -+ -+gboolean -+bolt_security_allows_pcie (BoltSecurity security) -+{ -+ gboolean pcie = FALSE; -+ -+ switch (security) -+ { -+ case BOLT_SECURITY_NONE: -+ case BOLT_SECURITY_USER: -+ case BOLT_SECURITY_SECURE: -+ pcie = TRUE; -+ break; -+ -+ case BOLT_SECURITY_DPONLY: -+ case BOLT_SECURITY_USBONLY: -+ case BOLT_SECURITY_UNKNOWN: -+ pcie = FALSE; -+ break; -+ } -+ -+ return pcie; -+} -+ -+BoltPolicy -+bolt_policy_from_string (const char *str) -+{ -+ return bolt_enum_from_string (BOLT_TYPE_POLICY, str, NULL); -+} -+ -+const char * -+bolt_policy_to_string (BoltPolicy policy) -+{ -+ return bolt_enum_to_string (BOLT_TYPE_POLICY, policy, NULL); -+} -+ -+gboolean -+bolt_policy_validate (BoltPolicy policy) -+{ -+ return bolt_enum_validate (BOLT_TYPE_POLICY, policy, NULL); -+} -+ -+BoltDeviceType -+bolt_device_type_from_string (const char *str) -+{ -+ return bolt_enum_from_string (BOLT_TYPE_DEVICE_TYPE, str, NULL); -+} -+ -+const char * -+bolt_device_type_to_string (BoltDeviceType type) -+{ -+ return bolt_enum_to_string (BOLT_TYPE_DEVICE_TYPE, type, NULL); -+} -+ -+gboolean -+bolt_device_type_validate (BoltDeviceType type) -+{ -+ return bolt_enum_validate (BOLT_TYPE_DEVICE_TYPE, type, NULL); -+} -+ -+gboolean -+bolt_device_type_is_host (BoltDeviceType type) -+{ -+ return type == BOLT_DEVICE_HOST; -+} -diff --git a/panels/thunderbolt/bolt-enums.h b/panels/thunderbolt/bolt-enums.h -new file mode 100644 -index 000000000000..6e2953fa2fd2 ---- /dev/null -+++ b/panels/thunderbolt/bolt-enums.h -@@ -0,0 +1,249 @@ -+/* -+ * Copyright © 2017 Red Hat, Inc -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see . -+ * -+ * Authors: -+ * Christian J. Kellner -+ */ -+ -+#pragma once -+ -+#include "bolt-names.h" -+#include "bolt-enum-types.h" -+ -+ -+gboolean bolt_enum_validate (GType enum_type, -+ gint value, -+ GError **error); -+ -+gboolean bolt_enum_class_validate (GEnumClass *enum_class, -+ gint value, -+ GError **error); -+ -+const char * bolt_enum_to_string (GType enum_type, -+ gint value, -+ GError **error); -+ -+gint bolt_enum_from_string (GType enum_type, -+ const char *string, -+ GError **error); -+ -+ -+char * bolt_flags_class_to_string (GFlagsClass *flags_class, -+ guint value, -+ GError **error); -+ -+gboolean bolt_flags_class_from_string (GFlagsClass *flags_class, -+ const char *string, -+ guint *flags_out, -+ GError **error); -+ -+char * bolt_flags_to_string (GType flags_type, -+ guint value, -+ GError **error); -+ -+gboolean bolt_flags_from_string (GType flags_type, -+ const char *string, -+ guint *flags_out, -+ GError **error); -+ -+gboolean bolt_flags_update (guint from, -+ guint *to, -+ guint mask); -+ -+#define bolt_flag_isset(flags_, flag_) (!!(flags_ & flag_)) -+#define bolt_flag_isclear(flags_, flag_) (!(flags_ & flag_)) -+ -+/** -+ * BoltStatus: -+ * @BOLT_STATUS_UNKNOWN: Device is in an unknown state (should normally not happen). -+ * @BOLT_STATUS_DISCONNECTED: Device is not connected. -+ * @BOLT_STATUS_CONNECTING: Device is currently being connected. -+ * @BOLT_STATUS_CONNECTED: Device is connected, but not authorized. -+ * @BOLT_STATUS_AUTHORIZING: Device is currently authorizing. -+ * @BOLT_STATUS_AUTH_ERROR: Failed to authorize a device via a key. -+ * @BOLT_STATUS_AUTHORIZED: Device connected and authorized. -+ * @BOLT_STATUS_AUTHORIZED_SECURE: Device connected and securely authorized via a key (deprecated). -+ * @BOLT_STATUS_AUTHORIZED_NEWKEY: Device connected and authorized via a new key (deprecated). -+ * @BOLT_STATUS_AUTHORIZED_DPONLY: Device authorized but with thunderbolt disabled (deprecated). -+ * -+ * The current status of the device. -+ */ -+typedef enum { -+ -+ BOLT_STATUS_UNKNOWN = -1, -+ BOLT_STATUS_DISCONNECTED = 0, -+ BOLT_STATUS_CONNECTING, -+ BOLT_STATUS_CONNECTED, -+ BOLT_STATUS_AUTHORIZING, -+ BOLT_STATUS_AUTH_ERROR, -+ BOLT_STATUS_AUTHORIZED, -+ -+ /* deprecated, do not use */ -+ BOLT_STATUS_AUTHORIZED_SECURE, -+ BOLT_STATUS_AUTHORIZED_NEWKEY, -+ BOLT_STATUS_AUTHORIZED_DPONLY -+ -+} BoltStatus; -+ -+const char * bolt_status_to_string (BoltStatus status); -+gboolean bolt_status_is_authorized (BoltStatus status); -+gboolean bolt_status_is_connected (BoltStatus status); -+gboolean bolt_status_is_pending (BoltStatus status); -+gboolean bolt_status_validate (BoltStatus status); -+ -+/** -+ * BoltAuthFlags: -+ * @BOLT_AUTH_NONE: No specific authorization. -+ * @BOLT_AUTH_NOPCIE: PCIe tunnels are *not* authorized. -+ * @BOLT_AUTH_SECURE: Device is securely authorized. -+ * @BOLT_AUTH_NOKEY: Device does *not* support key verification. -+ * @BOLT_AUTH_BOOT: Device was already authorized during pre-boot. -+ * -+ * More specific information about device authorization. -+ */ -+typedef enum { /*< flags >*/ -+ -+ BOLT_AUTH_NONE = 0, -+ BOLT_AUTH_NOPCIE = 1 << 0, -+ BOLT_AUTH_SECURE = 1 << 1, -+ BOLT_AUTH_NOKEY = 1 << 2, -+ BOLT_AUTH_BOOT = 1 << 3, -+ -+} BoltAuthFlags; -+ -+/** -+ * BoltKeyState: -+ * @BOLT_KEY_UNKNOWN: unknown key state -+ * @BOLT_KEY_MISSING: no key -+ * @BOLT_KEY_HAVE: key exists -+ * @BOLT_KEY_NEW: key is new -+ * -+ * The state of the key. -+ */ -+ -+typedef enum { -+ -+ BOLT_KEY_UNKNOWN = -1, -+ BOLT_KEY_MISSING = 0, -+ BOLT_KEY_HAVE = 1, -+ BOLT_KEY_NEW = 2 -+ -+} BoltKeyState; -+ -+/** -+ * BoltSecurity: -+ * @BOLT_SECURITY_UNKNOWN : Unknown security. -+ * @BOLT_SECURITY_NONE : No security, all devices are automatically connected. -+ * @BOLT_SECURITY_DPONLY : Display Port only devices only. -+ * @BOLT_SECURITY_USER : User needs to authorize devices. -+ * @BOLT_SECURITY_SECURE : User needs to authorize devices. Authorization can -+ * be done via key exchange to verify the device identity. -+ * @BOLT_SECURITY_USBONLY : Only create a PCIe tunnel to the USB controller in a -+ * connected thunderbolt dock, allowing no downstream PCIe tunnels. -+ * -+ * The security level of the thunderbolt domain. -+ */ -+typedef enum { -+ -+ BOLT_SECURITY_UNKNOWN = -1, -+ BOLT_SECURITY_NONE = 0, -+ BOLT_SECURITY_DPONLY = 1, -+ BOLT_SECURITY_USER = '1', -+ BOLT_SECURITY_SECURE = '2', -+ BOLT_SECURITY_USBONLY = 4, -+ -+} BoltSecurity; -+ -+ -+BoltSecurity bolt_security_from_string (const char *str); -+const char * bolt_security_to_string (BoltSecurity security); -+gboolean bolt_security_validate (BoltSecurity security); -+gboolean bolt_security_allows_pcie (BoltSecurity security); -+ -+/** -+ * BoltPolicy: -+ * @BOLT_POLICY_UNKNOWN: Unknown policy. -+ * @BOLT_POLICY_DEFAULT: Default policy. -+ * @BOLT_POLICY_MANUAL: Manual authorization of the device. -+ * @BOLT_POLICY_AUTO: Connect the device automatically, -+ * with the best possible security level supported -+ * by the domain controller. -+ * -+ * What do to for connected devices. -+ */ -+typedef enum { -+ -+ BOLT_POLICY_UNKNOWN = -1, -+ BOLT_POLICY_DEFAULT = 0, -+ BOLT_POLICY_MANUAL = 1, -+ BOLT_POLICY_AUTO = 2, -+ -+} BoltPolicy; -+ -+ -+BoltPolicy bolt_policy_from_string (const char *str); -+const char * bolt_policy_to_string (BoltPolicy policy); -+gboolean bolt_policy_validate (BoltPolicy policy); -+ -+/** -+ * BoltAuthCtrl: -+ * @BOLT_AUTHCTRL_NONE: No authorization flags. -+ * -+ * Control authorization. -+ */ -+typedef enum { /*< flags >*/ -+ -+ BOLT_AUTHCTRL_NONE = 0 -+ -+} BoltAuthCtrl; -+ -+/** -+ * BoltDeviceType: -+ * @BOLT_DEVICE_UNKNOWN_TYPE: Unknown device type -+ * @BOLT_DEVICE_HOST: The device representing the host -+ * @BOLT_DEVICE_PERIPHERAL: A generic thunderbolt peripheral -+ * -+ * The type of the device. -+ */ -+typedef enum { -+ -+ BOLT_DEVICE_UNKNOWN_TYPE = -1, -+ BOLT_DEVICE_HOST = 0, -+ BOLT_DEVICE_PERIPHERAL -+ -+} BoltDeviceType; -+ -+BoltDeviceType bolt_device_type_from_string (const char *str); -+const char * bolt_device_type_to_string (BoltDeviceType type); -+gboolean bolt_device_type_validate (BoltDeviceType type); -+gboolean bolt_device_type_is_host (BoltDeviceType type); -+ -+/** -+ * BoltAuthMode: -+ * @BOLT_AUTH_DISABLED: Authorization is disabled -+ * @BOLT_AUTH_ENABLED: Authorization is enabled. -+ * -+ * Control authorization. -+ */ -+typedef enum { /*< flags >*/ -+ -+ BOLT_AUTH_DISABLED = 0, -+ BOLT_AUTH_ENABLED = 1 -+ -+} BoltAuthMode; -+ -+#define bolt_auth_mode_is_enabled(auth) ((auth & BOLT_AUTH_ENABLED) != 0) -+#define bolt_auth_mode_is_disabled(auth) (!bolt_auth_mode_is_enabled (auth)) -diff --git a/panels/thunderbolt/bolt-error.c b/panels/thunderbolt/bolt-error.c -new file mode 100644 -index 000000000000..37d844e4a14d ---- /dev/null -+++ b/panels/thunderbolt/bolt-error.c -@@ -0,0 +1,99 @@ -+/* -+ * Copyright © 2017 Red Hat, Inc -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see . -+ * -+ * Authors: -+ * Christian J. Kellner -+ */ -+ -+#include "config.h" -+ -+#include "bolt-error.h" -+ -+#include "bolt-names.h" -+ -+#include -+ -+/** -+ * SECTION:bolt-error -+ * @Title: Error codes -+ * -+ */ -+ -+static const GDBusErrorEntry bolt_error_entries[] = { -+ {BOLT_ERROR_FAILED, BOLT_DBUS_NAME ".Error.Failed"}, -+ {BOLT_ERROR_UDEV, BOLT_DBUS_NAME ".Error.UDev"}, -+}; -+ -+ -+GQuark -+bolt_error_quark (void) -+{ -+ static volatile gsize quark_volatile = 0; -+ -+ g_dbus_error_register_error_domain ("bolt-error-quark", -+ &quark_volatile, -+ bolt_error_entries, -+ G_N_ELEMENTS (bolt_error_entries)); -+ return (GQuark) quark_volatile; -+} -+ -+gboolean -+bolt_err_notfound (const GError *error) -+{ -+ return g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND) || -+ g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT) || -+ g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND) || -+ g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND); -+} -+ -+gboolean -+bolt_err_exists (const GError *error) -+{ -+ return g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS) || -+ g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_EXIST); -+} -+ -+gboolean -+bolt_err_inval (const GError *error) -+{ -+ return g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE); -+} -+ -+gboolean -+bolt_err_cancelled (const GError *error) -+{ -+ return g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED); -+} -+ -+gboolean -+bolt_error_propagate_stripped (GError **dest, -+ GError **source) -+{ -+ GError *src; -+ -+ g_return_val_if_fail (source != NULL, FALSE); -+ -+ src = *source; -+ -+ if (src == NULL) -+ return TRUE; -+ -+ if (g_dbus_error_is_remote_error (src)) -+ g_dbus_error_strip_remote_error (src); -+ -+ g_propagate_error (dest, g_steal_pointer (source)); -+ return FALSE; -+} -diff --git a/panels/thunderbolt/bolt-error.h b/panels/thunderbolt/bolt-error.h -new file mode 100644 -index 000000000000..39b3eee98917 ---- /dev/null -+++ b/panels/thunderbolt/bolt-error.h -@@ -0,0 +1,55 @@ -+/* -+ * Copyright © 2017 Red Hat, Inc -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see . -+ * -+ * Authors: -+ * Christian J. Kellner -+ */ -+ -+#pragma once -+ -+#include -+ -+G_BEGIN_DECLS -+ -+/** -+ * BoltError: -+ * @BOLT_ERROR_FAILED: Generic error code -+ * @BOLT_ERROR_UDEV: UDev error -+ * -+ * Error codes used inside Bolt. -+ */ -+enum { -+ BOLT_ERROR_FAILED = 0, -+ BOLT_ERROR_UDEV, -+ BOLT_ERROR_NOKEY, -+ BOLT_ERROR_BADKEY, -+ BOLT_ERROR_CFG, -+} BoltError; -+ -+ -+GQuark bolt_error_quark (void); -+#define BOLT_ERROR (bolt_error_quark ()) -+ -+/* helper function to check for certain error types */ -+gboolean bolt_err_notfound (const GError *error); -+gboolean bolt_err_exists (const GError *error); -+gboolean bolt_err_inval (const GError *error); -+gboolean bolt_err_cancelled (const GError *error); -+ -+gboolean bolt_error_propagate_stripped (GError **dest, -+ GError **source); -+ -+G_END_DECLS -diff --git a/panels/thunderbolt/bolt-names.h b/panels/thunderbolt/bolt-names.h -new file mode 100644 -index 000000000000..2c0a97b24b49 ---- /dev/null -+++ b/panels/thunderbolt/bolt-names.h -@@ -0,0 +1,50 @@ -+/* -+ * Copyright © 2018 Red Hat, Inc -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see . -+ * -+ * Authors: -+ * Christian J. Kellner -+ */ -+ -+#pragma once -+ -+/* D-Bus API revision (here for the lack of a better place) */ -+#define BOLT_DBUS_API_VERSION 1U -+ -+/* logging */ -+ -+#define BOLT_LOG_DEVICE_UID "BOLT_DEVICE_UID" -+#define BOLT_LOG_DEVICE_NAME "BOLT_DEVICE_NAME" -+#define BOLT_LOG_DEVICE_STATE "BOLT_DEVICE_STATE" -+ -+#define BOLT_LOG_ERROR_DOMAIN "ERROR_DOMAIN" -+#define BOLT_LOG_ERROR_CODE "ERROR_CODE" -+#define BOLT_LOG_ERROR_MESSAGE "ERROR_MESSAGE" -+ -+#define BOLT_LOG_TOPIC "BOLT_TOPIC" -+#define BOLT_LOG_VERSION "BOLT_VERSION" -+#define BOLT_LOG_CONTEXT "BOLT_LOG_CONTEXT" -+ -+/* logging - message ids */ -+#define BOLT_LOG_MSG_ID_STARTUP "dd11929c788e48bdbb6276fb5f26b08a" -+ -+ -+/* dbus */ -+ -+#define BOLT_DBUS_NAME "org.freedesktop.bolt" -+#define BOLT_DBUS_PATH "/org/freedesktop/bolt" -+#define BOLT_DBUS_INTERFACE "org.freedesktop.bolt1.Manager" -+ -+#define BOLT_DBUS_DEVICE_INTERFACE "org.freedesktop.bolt1.Device" -diff --git a/panels/thunderbolt/bolt-proxy.c b/panels/thunderbolt/bolt-proxy.c -new file mode 100644 -index 000000000000..e044c871f747 ---- /dev/null -+++ b/panels/thunderbolt/bolt-proxy.c -@@ -0,0 +1,514 @@ -+/* -+ * Copyright © 2017 Red Hat, Inc -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see . -+ * -+ * Authors: -+ * Christian J. Kellner -+ */ -+ -+#include "bolt-proxy.h" -+ -+#include "bolt-enums.h" -+#include "bolt-error.h" -+#include "bolt-names.h" -+#include "bolt-str.h" -+ -+static void bolt_proxy_handle_props_changed (GDBusProxy *proxy, -+ GVariant *changed_properties, -+ GStrv invalidated_properties, -+ gpointer user_data); -+ -+static void bolt_proxy_handle_dbus_signal (GDBusProxy *proxy, -+ const gchar *sender_name, -+ const gchar *signal_name, -+ GVariant *params, -+ gpointer user_data); -+ -+G_DEFINE_TYPE (BoltProxy, bolt_proxy, G_TYPE_DBUS_PROXY); -+ -+ -+static void -+bolt_proxy_constructed (GObject *object) -+{ -+ G_OBJECT_CLASS (bolt_proxy_parent_class)->constructed (object); -+ -+ g_signal_connect (object, "g-properties-changed", -+ G_CALLBACK (bolt_proxy_handle_props_changed), object); -+ -+ g_signal_connect (object, "g-signal", -+ G_CALLBACK (bolt_proxy_handle_dbus_signal), object); -+} -+ -+static const BoltProxySignal * -+bolt_proxy_get_dbus_signals (guint *n) -+{ -+ *n = 0; -+ return NULL; -+} -+ -+static void -+bolt_proxy_class_init (BoltProxyClass *klass) -+{ -+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass); -+ -+ gobject_class->constructed = bolt_proxy_constructed; -+ -+ klass->get_dbus_signals = bolt_proxy_get_dbus_signals; -+ -+} -+ -+static void -+bolt_proxy_init (BoltProxy *object) -+{ -+} -+ -+static void -+bolt_proxy_handle_props_changed (GDBusProxy *proxy, -+ GVariant *changed_properties, -+ GStrv invalidated_properties, -+ gpointer user_data) -+{ -+ g_autoptr(GVariantIter) iter = NULL; -+ gboolean handled; -+ GParamSpec **pp; -+ const char *key; -+ guint n; -+ -+ pp = g_object_class_list_properties (G_OBJECT_GET_CLASS (proxy), &n); -+ -+ g_variant_get (changed_properties, "a{sv}", &iter); -+ while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) -+ { -+ handled = FALSE; -+ for (guint i = 0; !handled && i < n; i++) -+ { -+ GParamSpec *pspec = pp[i]; -+ const char *nick; -+ const char *name; -+ -+ nick = g_param_spec_get_nick (pspec); -+ name = g_param_spec_get_name (pspec); -+ -+ handled = bolt_streq (nick, key); -+ -+ if (handled) -+ g_object_notify (G_OBJECT (user_data), name); -+ } -+ } -+ -+ g_free (pp); -+} -+ -+static void -+bolt_proxy_handle_dbus_signal (GDBusProxy *proxy, -+ const gchar *sender_name, -+ const gchar *signal_name, -+ GVariant *params, -+ gpointer user_data) -+{ -+ const BoltProxySignal *ps; -+ guint n; -+ -+ if (signal_name == NULL) -+ return; -+ -+ ps = BOLT_PROXY_GET_CLASS (proxy)->get_dbus_signals (&n); -+ -+ for (guint i = 0; i < n; i++) -+ { -+ const BoltProxySignal *sig = &ps[i]; -+ -+ if (g_str_equal (sig->theirs, signal_name)) -+ { -+ sig->handle (G_OBJECT (proxy), proxy, params); -+ break; -+ } -+ } -+ -+} -+ -+/* public methods */ -+ -+gboolean -+bolt_proxy_get_dbus_property (GObject *proxy, -+ GParamSpec *spec, -+ GValue *value) -+{ -+ g_autoptr(GVariant) val = NULL; -+ const GVariantType *vt; -+ gboolean handled = FALSE; -+ const char *nick; -+ -+ nick = g_param_spec_get_nick (spec); -+ val = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), nick); -+ -+ if (val == NULL) -+ return FALSE; -+ -+ vt = g_variant_get_type (val); -+ -+ if (g_variant_type_equal (vt, G_VARIANT_TYPE_STRING) && -+ G_IS_PARAM_SPEC_ENUM (spec)) -+ { -+ GParamSpecEnum *enum_spec = G_PARAM_SPEC_ENUM (spec); -+ GEnumValue *ev; -+ const char *str; -+ -+ str = g_variant_get_string (val, NULL); -+ ev = g_enum_get_value_by_nick (enum_spec->enum_class, str); -+ -+ handled = ev != NULL; -+ -+ if (handled) -+ g_value_set_enum (value, ev->value); -+ else -+ g_value_set_enum (value, enum_spec->default_value); -+ } -+ else if (g_variant_type_equal (vt, G_VARIANT_TYPE_STRING) && -+ G_IS_PARAM_SPEC_FLAGS (spec)) -+ { -+ GParamSpecFlags *flags_spec = G_PARAM_SPEC_FLAGS (spec); -+ GFlagsClass *flags_class = flags_spec->flags_class; -+ const char *str; -+ guint v; -+ -+ str = g_variant_get_string (val, NULL); -+ handled = bolt_flags_class_from_string (flags_class, str, &v, NULL); -+ -+ if (handled) -+ g_value_set_flags (value, v); -+ else -+ g_value_set_flags (value, flags_spec->default_value); -+ } -+ else -+ { -+ g_dbus_gvariant_to_gvalue (val, value); -+ } -+ -+ return handled; -+} -+ -+gboolean -+bolt_proxy_has_name_owner (BoltProxy *proxy) -+{ -+ const char *name_owner; -+ -+ g_return_val_if_fail (proxy != NULL, FALSE); -+ g_return_val_if_fail (BOLT_IS_PROXY (proxy), FALSE); -+ -+ name_owner = g_dbus_proxy_get_name_owner (G_DBUS_PROXY (proxy)); -+ -+ return name_owner != NULL; -+} -+ -+static GParamSpec * -+find_property (BoltProxy *proxy, -+ const char *name, -+ GError **error) -+{ -+ GParamSpec *res = NULL; -+ GParamSpec **pp; -+ guint n; -+ -+ pp = g_object_class_list_properties (G_OBJECT_GET_CLASS (proxy), &n); -+ -+ for (guint i = 0; i < n; i++) -+ { -+ GParamSpec *pspec = pp[i]; -+ -+ if (bolt_streq (pspec->name, name)) -+ { -+ res = pspec; -+ break; -+ } -+ } -+ -+ if (pp == NULL) -+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_PROPERTY, -+ "could not find property '%s'", name); -+ -+ g_free (pp); -+ return res; -+} -+ -+static GVariant * -+bolt_proxy_get_cached_property (BoltProxy *proxy, -+ const char *name) -+{ -+ const char *bus_name = NULL; -+ GParamSpec *pspec; -+ GVariant *var; -+ -+ g_return_val_if_fail (BOLT_IS_PROXY (proxy), NULL); -+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (proxy), name); -+ -+ if (pspec == NULL) -+ return NULL; -+ -+ bus_name = g_param_spec_get_nick (pspec); -+ var = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), bus_name); -+ -+ return var; -+} -+ -+gboolean -+bolt_proxy_get_property_bool (BoltProxy *proxy, -+ const char *name, -+ gboolean *value) -+{ -+ g_autoptr(GVariant) var = NULL; -+ -+ var = bolt_proxy_get_cached_property (proxy, name); -+ -+ if (var == NULL) -+ return FALSE; -+ else if (value) -+ *value = g_variant_get_boolean (var); -+ -+ return TRUE; -+} -+ -+gboolean -+bolt_proxy_get_property_enum (BoltProxy *proxy, -+ const char *name, -+ gint *value) -+{ -+ g_autoptr(GVariant) var = NULL; -+ const char *str = NULL; -+ const char *bus_name = NULL; -+ GParamSpec *pspec; -+ GEnumValue *ev; -+ -+ g_return_val_if_fail (BOLT_IS_PROXY (proxy), FALSE); -+ -+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (proxy), name); -+ -+ if (pspec == NULL) -+ return FALSE; -+ -+ bus_name = g_param_spec_get_nick (pspec); -+ var = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), bus_name); -+ if (var == NULL) -+ return FALSE; -+ -+ str = g_variant_get_string (var, NULL); -+ -+ if (str == NULL) -+ return FALSE; -+ -+ ev = g_enum_get_value_by_nick (G_PARAM_SPEC_ENUM (pspec)->enum_class, str); -+ -+ if (ev == NULL) -+ return FALSE; -+ -+ if (value) -+ *value = ev->value; -+ -+ return TRUE; -+} -+ -+gboolean -+bolt_proxy_get_property_flags (BoltProxy *proxy, -+ const char *name, -+ guint *value) -+{ -+ g_autoptr(GVariant) var = NULL; -+ const char *str = NULL; -+ const char *bus_name = NULL; -+ GFlagsClass *flags_class; -+ GParamSpec *pspec; -+ guint v; -+ gboolean ok; -+ -+ g_return_val_if_fail (BOLT_IS_PROXY (proxy), FALSE); -+ -+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (proxy), name); -+ -+ if (pspec == NULL || !G_IS_PARAM_SPEC_FLAGS (pspec)) -+ return FALSE; -+ -+ bus_name = g_param_spec_get_nick (pspec); -+ var = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), bus_name); -+ if (var == NULL) -+ return FALSE; -+ -+ str = g_variant_get_string (var, NULL); -+ -+ if (str == NULL) -+ return FALSE; -+ -+ flags_class = G_PARAM_SPEC_FLAGS (pspec)->flags_class; -+ ok = bolt_flags_class_from_string (flags_class, str, &v, NULL); -+ -+ if (ok && value) -+ *value = v; -+ -+ return ok; -+} -+ -+gboolean -+bolt_proxy_get_property_uint32 (BoltProxy *proxy, -+ const char *name, -+ guint *value) -+{ -+ g_autoptr(GVariant) var = NULL; -+ -+ var = bolt_proxy_get_cached_property (proxy, name); -+ -+ if (var == NULL) -+ return FALSE; -+ else if (value) -+ *value = g_variant_get_uint32 (var); -+ -+ return TRUE; -+} -+ -+gboolean -+bolt_proxy_get_property_int64 (BoltProxy *proxy, -+ const char *name, -+ gint64 *value) -+{ -+ g_autoptr(GVariant) var = NULL; -+ -+ var = bolt_proxy_get_cached_property (proxy, name); -+ -+ if (var == NULL) -+ return FALSE; -+ else if (value) -+ *value = g_variant_get_int64 (var); -+ -+ return TRUE; -+} -+ -+gboolean -+bolt_proxy_get_property_uint64 (BoltProxy *proxy, -+ const char *name, -+ guint64 *value) -+{ -+ g_autoptr(GVariant) var = NULL; -+ -+ var = bolt_proxy_get_cached_property (proxy, name); -+ -+ if (var == NULL) -+ return FALSE; -+ else if (value) -+ *value = g_variant_get_uint64 (var); -+ -+ return TRUE; -+} -+ -+const char * -+bolt_proxy_get_property_string (BoltProxy *proxy, -+ const char *name) -+{ -+ g_autoptr(GVariant) var = NULL; -+ const char *val = NULL; -+ -+ var = bolt_proxy_get_cached_property (proxy, name); -+ -+ if (var != NULL) -+ val = g_variant_get_string (var, NULL); -+ -+ if (val && *val == '\0') -+ val = NULL; -+ -+ return val; -+} -+ -+gboolean -+bolt_proxy_set_property (BoltProxy *proxy, -+ const char *name, -+ GVariant *value, -+ GCancellable *cancellable, -+ GError **error) -+{ -+ GParamSpec *pp; -+ const char *iface; -+ gboolean ok = FALSE; -+ GVariant *res; -+ -+ pp = find_property (proxy, name, NULL); -+ if (pp != NULL) -+ name = g_param_spec_get_nick (pp); -+ -+ iface = g_dbus_proxy_get_interface_name (G_DBUS_PROXY (proxy)); -+ -+ res = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), -+ "org.freedesktop.DBus.Properties.Set", -+ g_variant_new ("(ssv)", -+ iface, -+ name, -+ value), -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ cancellable, -+ error); -+ -+ if (res) -+ { -+ g_variant_unref (res); -+ ok = TRUE; -+ } -+ -+ return ok; -+} -+ -+void -+bolt_proxy_set_property_async (BoltProxy *proxy, -+ const char *name, -+ GVariant *value, -+ GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ GParamSpec *pp; -+ const char *iface; -+ -+ pp = find_property (proxy, name, NULL); -+ -+ if (pp != NULL) -+ name = g_param_spec_get_nick (pp); -+ -+ iface = g_dbus_proxy_get_interface_name (G_DBUS_PROXY (proxy)); -+ -+ g_dbus_proxy_call (G_DBUS_PROXY (proxy), -+ "org.freedesktop.DBus.Properties.Set", -+ g_variant_new ("(ssv)", -+ iface, -+ name, -+ value), -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ cancellable, -+ callback, -+ user_data); -+} -+ -+gboolean -+bolt_proxy_set_property_finish (GAsyncResult *res, -+ GError **error) -+{ -+ BoltProxy *proxy; -+ GVariant *val = NULL; -+ -+ proxy = (BoltProxy *) g_async_result_get_source_object (res); -+ val = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); -+ -+ if (val == NULL) -+ return FALSE; -+ -+ g_variant_unref (val); -+ return TRUE; -+} -diff --git a/panels/thunderbolt/bolt-proxy.h b/panels/thunderbolt/bolt-proxy.h -new file mode 100644 -index 000000000000..c05eb8c8850f ---- /dev/null -+++ b/panels/thunderbolt/bolt-proxy.h -@@ -0,0 +1,97 @@ -+/* -+ * Copyright © 2017 Red Hat, Inc -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see . -+ * -+ * Authors: -+ * Christian J. Kellner -+ */ -+ -+#pragma once -+ -+#include -+ -+G_BEGIN_DECLS -+ -+typedef struct BoltProxySignal -+{ -+ -+ const char *theirs; -+ void (*handle)(GObject *self, -+ GDBusProxy *bus_proxy, -+ GVariant *params); -+ -+} BoltProxySignal; -+ -+#define BOLT_TYPE_PROXY (bolt_proxy_get_type ()) -+G_DECLARE_DERIVABLE_TYPE (BoltProxy, bolt_proxy, BOLT, PROXY, GDBusProxy) -+ -+struct _BoltProxyClass -+{ -+ GDBusProxyClass parent; -+ -+ /* virtuals */ -+ const BoltProxySignal * (*get_dbus_signals) (guint *n); -+}; -+ -+gboolean bolt_proxy_get_dbus_property (GObject *proxy, -+ GParamSpec *spec, -+ GValue *value); -+ -+gboolean bolt_proxy_has_name_owner (BoltProxy *proxy); -+ -+gboolean bolt_proxy_get_property_bool (BoltProxy *proxy, -+ const char *name, -+ gboolean *value); -+ -+gboolean bolt_proxy_get_property_enum (BoltProxy *proxy, -+ const char *name, -+ gint *value); -+ -+gboolean bolt_proxy_get_property_flags (BoltProxy *proxy, -+ const char *name, -+ guint *value); -+ -+gboolean bolt_proxy_get_property_uint32 (BoltProxy *proxy, -+ const char *name, -+ guint *value); -+ -+gboolean bolt_proxy_get_property_int64 (BoltProxy *proxy, -+ const char *name, -+ gint64 *value); -+ -+gboolean bolt_proxy_get_property_uint64 (BoltProxy *proxy, -+ const char *name, -+ guint64 *value); -+ -+const char * bolt_proxy_get_property_string (BoltProxy *proxy, -+ const char *name); -+ -+gboolean bolt_proxy_set_property (BoltProxy *proxy, -+ const char *name, -+ GVariant *value, -+ GCancellable *cancellable, -+ GError **error); -+ -+void bolt_proxy_set_property_async (BoltProxy *proxy, -+ const char *name, -+ GVariant *value, -+ GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data); -+ -+gboolean bolt_proxy_set_property_finish (GAsyncResult *res, -+ GError **error); -+ -+G_END_DECLS -diff --git a/panels/thunderbolt/bolt-str.c b/panels/thunderbolt/bolt-str.c -new file mode 100644 -index 000000000000..fe0580d4863a ---- /dev/null -+++ b/panels/thunderbolt/bolt-str.c -@@ -0,0 +1,117 @@ -+/* -+ * Copyright © 2017 Red Hat, Inc -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see . -+ * -+ * Authors: -+ * Christian J. Kellner -+ */ -+ -+#include "config.h" -+ -+#include "bolt-str.h" -+ -+#include -+ -+typedef void (* zero_fn_t) (void *s, -+ size_t n); -+void -+bolt_erase_n (void *data, gsize n) -+{ -+#if !HAVE_FN_EXPLICIT_BZERO -+ #warning no explicit bzero, using fallback -+ static volatile zero_fn_t explicit_bzero = bzero; -+#endif -+ -+ explicit_bzero (data, n); -+} -+ -+void -+bolt_str_erase (char *str) -+{ -+ if (str == NULL) -+ return; -+ -+ bolt_erase_n (str, strlen (str)); -+} -+ -+void -+bolt_str_erase_clear (char **str) -+{ -+ g_return_if_fail (str != NULL); -+ if (*str == NULL) -+ return; -+ -+ bolt_str_erase (*str); -+ g_free (*str); -+ *str = NULL; -+} -+ -+GStrv -+bolt_strv_from_ptr_array (GPtrArray **array) -+{ -+ GPtrArray *a; -+ -+ if (array == NULL || *array == NULL) -+ return NULL; -+ -+ a = *array; -+ -+ if (a->len == 0 || a->pdata[a->len - 1] != NULL) -+ g_ptr_array_add (a, NULL); -+ -+ *array = NULL; -+ return (GStrv) g_ptr_array_free (a, FALSE); -+} -+ -+char * -+bolt_strdup_validate (const char *string) -+{ -+ g_autofree char *str = NULL; -+ gboolean ok; -+ gsize l; -+ -+ if (string == NULL) -+ return NULL; -+ -+ str = g_strdup (string); -+ str = g_strstrip (str); -+ -+ l = strlen (str); -+ if (l == 0) -+ return NULL; -+ -+ ok = g_utf8_validate (str, l, NULL); -+ -+ if (!ok) -+ return NULL; -+ -+ return g_steal_pointer (&str); -+} -+ -+char * -+bolt_strstrip (char *string) -+{ -+ char *str; -+ -+ if (string == NULL) -+ return NULL; -+ -+ str = g_strstrip (string); -+ -+ if (strlen (str) == 0) -+ g_clear_pointer (&str, g_free); -+ -+ return str; -+} -diff --git a/panels/thunderbolt/bolt-str.h b/panels/thunderbolt/bolt-str.h -new file mode 100644 -index 000000000000..ecf95a7ed885 ---- /dev/null -+++ b/panels/thunderbolt/bolt-str.h -@@ -0,0 +1,43 @@ -+/* -+ * Copyright © 2017 Red Hat, Inc -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see . -+ * -+ * Authors: -+ * Christian J. Kellner -+ */ -+ -+#pragma once -+ -+#include -+#include -+ -+G_BEGIN_DECLS -+ -+void bolt_erase_n (void *data, -+ gsize n); -+void bolt_str_erase (char *str); -+void bolt_str_erase_clear (char **str); -+ -+#define bolt_streq(s1, s2) (g_strcmp0 (s1, s2) == 0) -+ -+GStrv bolt_strv_from_ptr_array (GPtrArray **array); -+ -+#define bolt_yesno(val) val ? "yes" : "no" -+ -+char *bolt_strdup_validate (const char *string); -+ -+char *bolt_strstrip (char *string); -+ -+G_END_DECLS -diff --git a/panels/thunderbolt/bolt-time.c b/panels/thunderbolt/bolt-time.c -new file mode 100644 -index 000000000000..606aed69a444 ---- /dev/null -+++ b/panels/thunderbolt/bolt-time.c -@@ -0,0 +1,44 @@ -+/* -+ * Copyright © 2018 Red Hat, Inc -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see . -+ * -+ * Authors: -+ * Christian J. Kellner -+ */ -+ -+#include "config.h" -+ -+#include "bolt-time.h" -+ -+char * -+bolt_epoch_format (guint64 seconds, const char *format) -+{ -+ g_autoptr(GDateTime) dt = NULL; -+ -+ dt = g_date_time_new_from_unix_utc ((gint64) seconds); -+ -+ if (dt == NULL) -+ return NULL; -+ -+ return g_date_time_format (dt, format); -+} -+ -+guint64 -+bolt_now_in_seconds (void) -+{ -+ gint64 now = g_get_real_time (); -+ -+ return (guint64) now / G_USEC_PER_SEC; -+} -diff --git a/panels/thunderbolt/bolt-time.h b/panels/thunderbolt/bolt-time.h -new file mode 100644 -index 000000000000..fc3ed9741940 ---- /dev/null -+++ b/panels/thunderbolt/bolt-time.h -@@ -0,0 +1,32 @@ -+/* -+ * Copyright © 2018 Red Hat, Inc -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library. If not, see . -+ * -+ * Authors: -+ * Christian J. Kellner -+ */ -+ -+#pragma once -+ -+#include -+ -+G_BEGIN_DECLS -+ -+char * bolt_epoch_format (guint64 seconds, -+ const char *format); -+ -+guint64 bolt_now_in_seconds (void); -+ -+G_END_DECLS -diff --git a/panels/thunderbolt/cc-bolt-device-dialog.c b/panels/thunderbolt/cc-bolt-device-dialog.c -new file mode 100644 -index 000000000000..11469d46cb0b ---- /dev/null -+++ b/panels/thunderbolt/cc-bolt-device-dialog.c -@@ -0,0 +1,476 @@ -+/* Copyright (C) 2018 Red Hat, Inc -+ * -+ * 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, see . -+ * -+ * Authors: Christian J. Kellner -+ * -+ */ -+ -+#include -+ -+#include -+ -+#include "bolt-device.h" -+#include "bolt-error.h" -+#include "bolt-time.h" -+ -+#include "cc-thunderbolt-resources.h" -+ -+#include "cc-bolt-device-dialog.h" -+ -+struct _CcBoltDeviceDialog -+{ -+ GtkDialog parent; -+ -+ BoltClient *client; -+ BoltDevice *device; -+ GCancellable *cancel; -+ -+ /* main ui */ -+ GtkHeaderBar *header_bar; -+ -+ /* notifications */ -+ GtkLabel *notify_label; -+ GtkRevealer *notify_revealer; -+ -+ /* device details */ -+ GtkLabel *name_label; -+ GtkLabel *status_label; -+ GtkLabel *uuid_label; -+ -+ GtkLabel *time_title; -+ GtkLabel *time_label; -+ -+ /* actions */ -+ GtkWidget *button_box; -+ GtkSpinner *spinner; -+ GtkButton *connect_button; -+ GtkButton *forget_button; -+}; -+ -+static void on_notify_button_clicked_cb (GtkButton *button, -+ CcBoltDeviceDialog *panel); -+ -+static void on_forget_button_clicked_cb (CcBoltDeviceDialog *dialog); -+static void on_connect_button_clicked_cb (CcBoltDeviceDialog *dialog); -+ -+G_DEFINE_TYPE (CcBoltDeviceDialog, cc_bolt_device_dialog, GTK_TYPE_DIALOG); -+ -+#define RESOURCE_UI "/org/gnome/control-center/thunderbolt/cc-bolt-device-dialog.ui" -+ -+static const char * -+status_to_string_for_ui (BoltDevice *dev) -+{ -+ BoltStatus status; -+ BoltAuthFlags aflags; -+ gboolean nopcie; -+ -+ status = bolt_device_get_status (dev); -+ aflags = bolt_device_get_authflags(dev); -+ nopcie = bolt_flag_isset (aflags, BOLT_AUTH_NOPCIE); -+ -+ switch (status) -+ { -+ case BOLT_STATUS_DISCONNECTED: -+ return C_("Thunderbolt Device Status", "Disconnected"); -+ -+ case BOLT_STATUS_CONNECTING: -+ return C_("Thunderbolt Device Status", "Connecting"); -+ -+ case BOLT_STATUS_CONNECTED: -+ return C_("Thunderbolt Device Status", "Connected"); -+ -+ case BOLT_STATUS_AUTH_ERROR: -+ return C_("Thunderbolt Device Status", "Authorization Error"); -+ -+ case BOLT_STATUS_AUTHORIZING: -+ return C_("Thunderbolt Device Status", "Authorizing"); -+ -+ case BOLT_STATUS_AUTHORIZED: -+ case BOLT_STATUS_AUTHORIZED_NEWKEY: -+ case BOLT_STATUS_AUTHORIZED_SECURE: -+ case BOLT_STATUS_AUTHORIZED_DPONLY: -+ if (nopcie) -+ return C_("Thunderbolt Device Status", "Reduced Functionality"); -+ else -+ return C_("Thunderbolt Device Status", "Connected & Authorized"); -+ -+ case BOLT_STATUS_UNKNOWN: -+ break; /* use default return value, i.e. Unknown */ -+ } -+ -+ return C_("Thunderbolt Device Status", "Unknown"); -+} -+ -+static void -+dialog_update_from_device (CcBoltDeviceDialog *dialog) -+{ -+ g_autofree char *generated = NULL; -+ g_autofree char *timestr = NULL; -+ const char *label; -+ const char *uuid; -+ const char *status_brief; -+ BoltStatus status; -+ gboolean stored; -+ BoltDevice *dev; -+ guint timestamp; -+ -+ if (gtk_widget_in_destruction (GTK_WIDGET (dialog))) -+ return; -+ -+ dev = dialog->device; -+ -+ uuid = bolt_device_get_uid (dev); -+ label = bolt_device_get_label (dev); -+ -+ stored = bolt_device_is_stored (dev); -+ status = bolt_device_get_status (dev); -+ -+ if (label == NULL) -+ { -+ const char *name = bolt_device_get_name (dev); -+ const char *vendor = bolt_device_get_vendor (dev); -+ -+ generated = g_strdup_printf ("%s %s", name, vendor); -+ label = generated; -+ } -+ -+ gtk_label_set_label (dialog->name_label, label); -+ gtk_header_bar_set_title (dialog->header_bar, label); -+ -+ status_brief = status_to_string_for_ui (dev); -+ gtk_label_set_label (dialog->status_label, status_brief); -+ gtk_widget_set_visible (GTK_WIDGET (dialog->forget_button), stored); -+ -+ /* while we are having an ongoing operation we are setting the buttons -+ * to be in-sensitive. In that case, if the button was visible -+ * before it will be hidden when the operation is finished by the -+ * dialog_operation_done() function */ -+ if (gtk_widget_is_sensitive (GTK_WIDGET (dialog->connect_button))) -+ gtk_widget_set_visible (GTK_WIDGET (dialog->connect_button), -+ status == BOLT_STATUS_CONNECTED); -+ -+ gtk_label_set_label (dialog->uuid_label, uuid); -+ -+ if (bolt_status_is_authorized (status)) -+ { -+ /* Translators: The time point the device was authorized. */ -+ gtk_label_set_label (dialog->time_title, _("Authorized at:")); -+ timestamp = bolt_device_get_authtime (dev); -+ } -+ else if (bolt_status_is_connected (status)) -+ { -+ /* Translators: The time point the device was connected. */ -+ gtk_label_set_label (dialog->time_title, _("Connected at:")); -+ timestamp = bolt_device_get_conntime (dev); -+ } -+ else -+ { -+ /* Translators: The time point the device was enrolled, -+ * i.e. authorized and stored in the device database. */ -+ gtk_label_set_label (dialog->time_title, _("Enrolled at:")); -+ timestamp = bolt_device_get_storetime (dev); -+ } -+ -+ timestr = bolt_epoch_format (timestamp, "%c"); -+ gtk_label_set_label (dialog->time_label, timestr); -+ -+} -+ -+static void -+on_device_notify_cb (GObject *gobject, -+ GParamSpec *pspec, -+ gpointer user_data) -+{ -+ CcBoltDeviceDialog *dialog = CC_BOLT_DEVICE_DIALOG (user_data); -+ -+ dialog_update_from_device (dialog); -+} -+ -+static void -+dialog_operation_start (CcBoltDeviceDialog *dialog) -+{ -+ gtk_widget_set_sensitive (GTK_WIDGET (dialog->connect_button), FALSE); -+ gtk_widget_set_sensitive (GTK_WIDGET (dialog->forget_button), FALSE); -+ gtk_spinner_start (dialog->spinner); -+} -+ -+static void -+dialog_operation_done (CcBoltDeviceDialog *dialog, -+ GtkWidget *sender, -+ GError *error) -+{ -+ GtkWidget *cb = GTK_WIDGET (dialog->connect_button); -+ GtkWidget *fb = GTK_WIDGET (dialog->forget_button); -+ -+ /* don' do anything if we are being destroyed */ -+ if (gtk_widget_in_destruction (GTK_WIDGET (dialog))) -+ return; -+ -+ /* also don't do anything if the op was canceled */ -+ if (error != NULL && bolt_err_cancelled (error)) -+ return; -+ -+ gtk_spinner_stop (dialog->spinner); -+ -+ if (error != NULL) -+ { -+ gtk_label_set_label (dialog->notify_label, error->message); -+ gtk_revealer_set_reveal_child (dialog->notify_revealer, TRUE); -+ -+ /* set the *other* button to sensitive */ -+ gtk_widget_set_sensitive (cb, cb != sender); -+ gtk_widget_set_sensitive (fb, fb != sender); -+ } -+ else -+ { -+ gtk_widget_set_visible (sender, FALSE); -+ gtk_widget_set_sensitive (cb, TRUE); -+ gtk_widget_set_sensitive (fb, TRUE); -+ } -+} -+ -+static void -+dialog_authorize_done (CcBoltDeviceDialog *dialog, -+ gboolean ok, -+ GError *error) -+{ -+ if (!ok) -+ g_prefix_error (&error, _("Failed to authorize device: ")); -+ -+ dialog_operation_done (dialog, GTK_WIDGET (dialog->connect_button), error); -+} -+ -+static void -+on_device_authorized (GObject *source, -+ GAsyncResult *res, -+ gpointer user_data) -+{ -+ g_autoptr(GError) err = NULL; -+ CcBoltDeviceDialog *dialog = CC_BOLT_DEVICE_DIALOG (user_data); -+ gboolean ok; -+ -+ ok = bolt_device_authorize_finish (BOLT_DEVICE (source), res, &err); -+ dialog_authorize_done (dialog, ok, err); -+} -+ -+static void -+on_device_enrolled (GObject *source_object, -+ GAsyncResult *res, -+ gpointer user_data) -+{ -+ g_autoptr(GError) err = NULL; -+ CcBoltDeviceDialog *dialog = CC_BOLT_DEVICE_DIALOG (user_data); -+ gboolean ok; -+ -+ ok = bolt_client_enroll_device_finish (dialog->client, res, NULL, &err); -+ dialog_authorize_done (dialog, ok, err); -+} -+ -+static void -+on_connect_button_clicked_cb (CcBoltDeviceDialog *dialog) -+{ -+ BoltDevice *device = dialog->device; -+ gboolean stored; -+ -+ g_return_if_fail (device != NULL); -+ -+ dialog_operation_start (dialog); -+ -+ stored = bolt_device_is_stored (device); -+ if (stored) -+ { -+ bolt_device_authorize_async (device, -+ BOLT_AUTHCTRL_NONE, -+ dialog->cancel, -+ on_device_authorized, -+ dialog); -+ } -+ else -+ { -+ const char *uid = bolt_device_get_uid (device); -+ -+ bolt_client_enroll_device_async (dialog->client, -+ uid, -+ BOLT_POLICY_DEFAULT, -+ BOLT_AUTHCTRL_NONE, -+ dialog->cancel, -+ on_device_enrolled, -+ dialog); -+ } -+ -+} -+ -+static void -+on_forget_device_done (GObject *source_object, -+ GAsyncResult *res, -+ gpointer user_data) -+{ -+ g_autoptr(GError) err = NULL; -+ CcBoltDeviceDialog *dialog = CC_BOLT_DEVICE_DIALOG (user_data); -+ gboolean ok; -+ -+ ok = bolt_client_forget_device_finish (dialog->client, res, &err); -+ -+ if (!ok) -+ g_prefix_error (&err, _("Failed to forget device: ")); -+ -+ dialog_operation_done (dialog, GTK_WIDGET (dialog->forget_button), err); -+} -+ -+static void -+on_forget_button_clicked_cb (CcBoltDeviceDialog *dialog) -+{ -+ const char *uid = NULL; -+ -+ g_return_if_fail (dialog->device != NULL); -+ -+ uid = bolt_device_get_uid (dialog->device); -+ dialog_operation_start (dialog); -+ -+ bolt_client_forget_device_async (dialog->client, -+ uid, -+ dialog->cancel, -+ on_forget_device_done, -+ dialog); -+} -+ -+static void -+on_notify_button_clicked_cb (GtkButton *button, -+ CcBoltDeviceDialog *dialog) -+{ -+ gtk_revealer_set_reveal_child (dialog->notify_revealer, FALSE); -+} -+ -+ -+static void -+cc_bolt_device_dialog_finalize (GObject *object) -+{ -+ CcBoltDeviceDialog *dialog = CC_BOLT_DEVICE_DIALOG (object); -+ -+ g_clear_object (&dialog->device); -+ g_cancellable_cancel (dialog->cancel); -+ g_clear_object (&dialog->cancel); -+ g_clear_object (&dialog->client); -+ -+ G_OBJECT_CLASS (cc_bolt_device_dialog_parent_class)->finalize (object); -+} -+ -+static void -+cc_bolt_device_dialog_class_init (CcBoltDeviceDialogClass *klass) -+{ -+ GObjectClass *object_class = G_OBJECT_CLASS (klass); -+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); -+ -+ object_class->finalize = cc_bolt_device_dialog_finalize; -+ -+ gtk_widget_class_set_template_from_resource (widget_class, RESOURCE_UI); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltDeviceDialog, header_bar); -+ -+ gtk_widget_class_bind_template_child (widget_class, CcBoltDeviceDialog, notify_label); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltDeviceDialog, notify_revealer); -+ -+ gtk_widget_class_bind_template_child (widget_class, CcBoltDeviceDialog, name_label); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltDeviceDialog, status_label); -+ -+ gtk_widget_class_bind_template_child (widget_class, CcBoltDeviceDialog, uuid_label); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltDeviceDialog, time_title); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltDeviceDialog, time_label); -+ -+ gtk_widget_class_bind_template_child (widget_class, CcBoltDeviceDialog, button_box); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltDeviceDialog, spinner); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltDeviceDialog, connect_button); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltDeviceDialog, forget_button); -+ -+ gtk_widget_class_bind_template_callback (widget_class, on_notify_button_clicked_cb); -+ gtk_widget_class_bind_template_callback (widget_class, on_connect_button_clicked_cb); -+ gtk_widget_class_bind_template_callback (widget_class, on_forget_button_clicked_cb); -+} -+ -+static void -+cc_bolt_device_dialog_init (CcBoltDeviceDialog *dialog) -+{ -+ g_resources_register (cc_thunderbolt_get_resource ()); -+ gtk_widget_init_template (GTK_WIDGET (dialog)); -+} -+ -+/* public functions */ -+CcBoltDeviceDialog * -+cc_bolt_device_dialog_new (void) -+{ -+ CcBoltDeviceDialog *dialog; -+ -+ dialog = g_object_new (CC_TYPE_BOLT_DEVICE_DIALOG, -+ "use-header-bar", TRUE, -+ NULL); -+ return dialog; -+} -+ -+void -+cc_bolt_device_dialog_set_client (CcBoltDeviceDialog *dialog, -+ BoltClient *client) -+{ -+ g_clear_object (&dialog->client); -+ dialog->client = g_object_ref (client); -+} -+ -+void -+cc_bolt_device_dialog_set_device (CcBoltDeviceDialog *dialog, -+ BoltDevice *device) -+{ -+ if (device == dialog->device) -+ return; -+ -+ if (dialog->device) -+ { -+ g_cancellable_cancel (dialog->cancel); -+ g_clear_object (&dialog->cancel); -+ dialog->cancel = g_cancellable_new (); -+ -+ g_signal_handlers_disconnect_by_func (dialog->device, -+ G_CALLBACK (on_device_notify_cb), -+ dialog); -+ g_clear_object (&dialog->device); -+ } -+ -+ if (device == NULL) -+ return; -+ -+ dialog->device = g_object_ref (device); -+ g_signal_connect_object (dialog->device, -+ "notify", -+ G_CALLBACK (on_device_notify_cb), -+ dialog, -+ 0); -+ -+ /* reset the sensitivity of the buttons, because -+ * dialog_update_from_device, because it can't know */ -+ gtk_widget_set_sensitive (GTK_WIDGET (dialog->connect_button), TRUE); -+ gtk_widget_set_sensitive (GTK_WIDGET (dialog->forget_button), TRUE); -+ -+ dialog_update_from_device (dialog); -+} -+ -+BoltDevice * -+cc_bolt_device_dialog_peek_device (CcBoltDeviceDialog *dialog) -+{ -+ return dialog->device; -+} -+ -+gboolean -+cc_bolt_device_dialog_device_equal (CcBoltDeviceDialog *dialog, -+ BoltDevice *device) -+{ -+ return dialog->device != NULL && device == dialog->device; -+} -diff --git a/panels/thunderbolt/cc-bolt-device-dialog.h b/panels/thunderbolt/cc-bolt-device-dialog.h -new file mode 100644 -index 000000000000..d2c44c8589a8 ---- /dev/null -+++ b/panels/thunderbolt/cc-bolt-device-dialog.h -@@ -0,0 +1,45 @@ -+/* Copyright (C) 2018 Red Hat, Inc -+ * -+ * 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, see . -+ * -+ * Authors: Christian J. Kellner -+ * -+ */ -+ -+#pragma once -+ -+#include -+ -+#include "bolt-client.h" -+#include "bolt-device.h" -+ -+G_BEGIN_DECLS -+ -+#define CC_TYPE_BOLT_DEVICE_DIALOG cc_bolt_device_dialog_get_type () -+G_DECLARE_FINAL_TYPE (CcBoltDeviceDialog, cc_bolt_device_dialog, CC, BOLT_DEVICE_DIALOG, GtkDialog); -+ -+ -+CcBoltDeviceDialog * cc_bolt_device_dialog_new (void); -+ -+void cc_bolt_device_dialog_set_client (CcBoltDeviceDialog *dialog, -+ BoltClient *client); -+ -+void cc_bolt_device_dialog_set_device (CcBoltDeviceDialog *dialog, -+ BoltDevice *device); -+BoltDevice * cc_bolt_device_dialog_peek_device (CcBoltDeviceDialog *dialog); -+ -+gboolean cc_bolt_device_dialog_device_equal (CcBoltDeviceDialog *dialog, -+ BoltDevice *device); -+ -+G_END_DECLS -diff --git a/panels/thunderbolt/cc-bolt-device-dialog.ui b/panels/thunderbolt/cc-bolt-device-dialog.ui -new file mode 100644 -index 000000000000..cd19796db20d ---- /dev/null -+++ b/panels/thunderbolt/cc-bolt-device-dialog.ui -@@ -0,0 +1,359 @@ -+ -+ -+ -+ -+ -+ -diff --git a/panels/thunderbolt/cc-bolt-device-entry.c b/panels/thunderbolt/cc-bolt-device-entry.c -new file mode 100644 -index 000000000000..1e6d6e75a228 ---- /dev/null -+++ b/panels/thunderbolt/cc-bolt-device-entry.c -@@ -0,0 +1,218 @@ -+/* Copyright (C) 2018 Red Hat, Inc -+ * -+ * 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, see . -+ * -+ * Authors: Christian J. Kellner -+ * -+ */ -+ -+#include -+ -+#include "bolt-str.h" -+ -+#include "cc-bolt-device-entry.h" -+ -+#include "cc-thunderbolt-resources.h" -+ -+#include -+ -+struct _CcBoltDeviceEntry -+{ -+ GtkListBoxRow parent; -+ -+ BoltDevice *device; -+ -+ /* main ui */ -+ GtkLabel *name_label; -+ GtkLabel *status_label; -+}; -+ -+static const char * device_status_to_brief_for_ui (BoltDevice *dev); -+ -+enum -+{ -+ SIGNAL_STATUS_CHANGED, -+ SIGNAL_LAST -+}; -+ -+static guint signals[SIGNAL_LAST] = {0}; -+ -+G_DEFINE_TYPE (CcBoltDeviceEntry, cc_bolt_device_entry, GTK_TYPE_LIST_BOX_ROW); -+ -+#define RESOURCE_UI "/org/gnome/control-center/thunderbolt/cc-bolt-device-entry.ui" -+ -+static void -+entry_set_name (CcBoltDeviceEntry *entry) -+{ -+ g_autofree char *name = NULL; -+ BoltDevice *dev = entry->device; -+ -+ g_return_if_fail (dev != NULL); -+ -+ name = bolt_device_get_display_name (dev); -+ -+ gtk_label_set_label (entry->name_label, name); -+} -+ -+static void -+entry_update_status (CcBoltDeviceEntry *entry) -+{ -+ const char *brief; -+ BoltStatus status; -+ -+ status = bolt_device_get_status (entry->device); -+ brief = device_status_to_brief_for_ui (entry->device); -+ -+ gtk_label_set_label (entry->status_label, brief); -+ -+ g_signal_emit (entry, -+ signals[SIGNAL_STATUS_CHANGED], -+ 0, -+ status); -+} -+ -+static void -+on_device_notify_cb (GObject *gobject, -+ GParamSpec *pspec, -+ gpointer user_data) -+{ -+ CcBoltDeviceEntry *entry = CC_BOLT_DEVICE_ENTRY (user_data); -+ const char *what; -+ -+ what = g_param_spec_get_name (pspec); -+ -+ if (bolt_streq (what, "status")) -+ entry_update_status (entry); -+ else if (bolt_streq (what, "label") || -+ bolt_streq (what, "name") || -+ bolt_streq (what, "vendor")) -+ entry_set_name (entry); -+} -+ -+/* device helpers */ -+ -+static const char * -+device_status_to_brief_for_ui (BoltDevice *dev) -+{ -+ BoltStatus status; -+ BoltAuthFlags aflags; -+ gboolean nopcie; -+ -+ status = bolt_device_get_status (dev); -+ aflags = bolt_device_get_authflags(dev); -+ nopcie = bolt_flag_isset (aflags, BOLT_AUTH_NOPCIE); -+ -+ switch (status) -+ { -+ case BOLT_STATUS_DISCONNECTED: -+ return C_("Thunderbolt Device Status", "Disconnected"); -+ -+ case BOLT_STATUS_CONNECTING: -+ return C_("Thunderbolt Device Status", "Connecting"); -+ -+ case BOLT_STATUS_CONNECTED: -+ case BOLT_STATUS_AUTHORIZED_DPONLY: -+ return C_("Thunderbolt Device Status", "Connected"); -+ -+ case BOLT_STATUS_AUTH_ERROR: -+ return C_("Thunderbolt Device Status", "Error"); -+ -+ case BOLT_STATUS_AUTHORIZING: -+ return C_("Thunderbolt Device Status", "Authorizing"); -+ -+ case BOLT_STATUS_AUTHORIZED: -+ case BOLT_STATUS_AUTHORIZED_NEWKEY: -+ case BOLT_STATUS_AUTHORIZED_SECURE: -+ if (nopcie) -+ return C_("Thunderbolt Device Status", "Connected"); -+ else -+ return C_("Thunderbolt Device Status", "Authorized"); -+ -+ case BOLT_STATUS_UNKNOWN: -+ break; /* use function default */ -+ } -+ -+ return C_("Thunderbolt Device Status", "Unknown"); -+} -+ -+static void -+cc_bolt_device_entry_finalize (GObject *object) -+{ -+ CcBoltDeviceEntry *entry = CC_BOLT_DEVICE_ENTRY (object); -+ -+ g_clear_object (&entry->device); -+ -+ G_OBJECT_CLASS (cc_bolt_device_entry_parent_class)->finalize (object); -+} -+ -+static void -+cc_bolt_device_entry_class_init (CcBoltDeviceEntryClass *klass) -+{ -+ GObjectClass *object_class = G_OBJECT_CLASS (klass); -+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); -+ -+ object_class->finalize = cc_bolt_device_entry_finalize; -+ -+ gtk_widget_class_set_template_from_resource (widget_class, RESOURCE_UI); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltDeviceEntry, name_label); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltDeviceEntry, status_label); -+ -+ signals[SIGNAL_STATUS_CHANGED] = -+ g_signal_new ("status-changed", -+ G_TYPE_FROM_CLASS (object_class), -+ G_SIGNAL_RUN_LAST, -+ 0, -+ NULL, NULL, -+ NULL, -+ G_TYPE_NONE, -+ 1, BOLT_TYPE_STATUS); -+} -+ -+static void -+cc_bolt_device_entry_init (CcBoltDeviceEntry *entry) -+{ -+ g_resources_register (cc_thunderbolt_get_resource ()); -+ gtk_widget_init_template (GTK_WIDGET (entry)); -+} -+ -+/* public function */ -+ -+CcBoltDeviceEntry * -+cc_bolt_device_entry_new (BoltDevice *device) -+{ -+ CcBoltDeviceEntry *entry; -+ -+ entry = g_object_new (CC_TYPE_BOLT_DEVICE_ENTRY, NULL); -+ entry->device = g_object_ref (device); -+ -+ entry_set_name (entry); -+ entry_update_status (entry); -+ -+ g_signal_connect_object (entry->device, -+ "notify", -+ G_CALLBACK (on_device_notify_cb), -+ entry, -+ 0); -+ -+ return entry; -+} -+ -+BoltDevice * -+cc_bolt_device_entry_get_device (CcBoltDeviceEntry *entry) -+{ -+ g_return_val_if_fail (entry != NULL, NULL); -+ g_return_val_if_fail (CC_IS_BOLT_DEVICE_ENTRY (entry), NULL); -+ -+ return entry->device; -+} -diff --git a/panels/thunderbolt/cc-bolt-device-entry.h b/panels/thunderbolt/cc-bolt-device-entry.h -new file mode 100644 -index 000000000000..f93cee5f825b ---- /dev/null -+++ b/panels/thunderbolt/cc-bolt-device-entry.h -@@ -0,0 +1,34 @@ -+/* Copyright (C) 2018 Red Hat, Inc -+ * -+ * 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, see . -+ * -+ * Authors: Christian J. Kellner -+ * -+ */ -+ -+#pragma once -+ -+#include -+#include "bolt-device.h" -+ -+G_BEGIN_DECLS -+ -+#define CC_TYPE_BOLT_DEVICE_ENTRY cc_bolt_device_entry_get_type () -+G_DECLARE_FINAL_TYPE (CcBoltDeviceEntry, cc_bolt_device_entry, CC, BOLT_DEVICE_ENTRY, GtkListBoxRow); -+ -+ -+CcBoltDeviceEntry * cc_bolt_device_entry_new (BoltDevice *device); -+BoltDevice * cc_bolt_device_entry_get_device (CcBoltDeviceEntry *entry); -+ -+G_END_DECLS -diff --git a/panels/thunderbolt/cc-bolt-device-entry.ui b/panels/thunderbolt/cc-bolt-device-entry.ui -new file mode 100644 -index 000000000000..37f865333d71 ---- /dev/null -+++ b/panels/thunderbolt/cc-bolt-device-entry.ui -@@ -0,0 +1,49 @@ -+ -+ -+ -+ -+ -+ -diff --git a/panels/thunderbolt/cc-bolt-panel.c b/panels/thunderbolt/cc-bolt-panel.c -new file mode 100644 -index 000000000000..e67e3625eb2c ---- /dev/null -+++ b/panels/thunderbolt/cc-bolt-panel.c -@@ -0,0 +1,958 @@ -+/* Copyright (C) 2018 Red Hat, Inc -+ * -+ * 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, see . -+ * -+ * Authors: Christian J. Kellner -+ * -+ */ -+ -+#include -+ -+#include -+#include -+ -+#include -+#include -+ -+#include "cc-bolt-device-dialog.h" -+#include "cc-bolt-device-entry.h" -+ -+#include "bolt-client.h" -+#include "bolt-str.h" -+ -+#include "cc-thunderbolt-resources.h" -+ -+#define CC_TYPE_BOLT_PANEL cc_bolt_panel_get_type () -+G_DECLARE_FINAL_TYPE (CcBoltPanel, cc_bolt_panel, CC, BOLT_PANEL, CcPanel); -+ -+struct _CcBoltPanel -+{ -+ CcPanel parent; -+ -+ BoltClient *client; -+ GCancellable *cancel; -+ -+ /* headerbar menu */ -+ GtkBox *headerbar_box; -+ GtkLockButton *lock_button; -+ -+ /* main ui */ -+ GtkStack *container; -+ -+ /* empty state */ -+ GtkLabel *notb_caption; -+ GtkLabel *notb_details; -+ -+ /* notifications */ -+ GtkLabel *notification_label; -+ GtkRevealer *notification_revealer; -+ -+ /* authmode */ -+ GtkSwitch *authmode_switch; -+ GtkSpinner *authmode_spinner; -+ GtkStack *authmode_mode; -+ -+ /* device list */ -+ GHashTable *devices; -+ -+ GtkStack *devices_stack; -+ GtkBox *devices_box; -+ GtkBox *pending_box; -+ -+ GtkListBox *devices_list; -+ GtkListBox *pending_list; -+ -+ /* device details dialog */ -+ CcBoltDeviceDialog *device_dialog; -+ -+ /* polkit integration */ -+ GPermission *permission; -+}; -+ -+/* initialization */ -+static void bolt_client_ready (GObject *source, -+ GAsyncResult *res, -+ gpointer user_data); -+ -+/* panel functions */ -+static void cc_bolt_panel_set_no_thunderbolt (CcBoltPanel *panel, -+ const char *custom_msg); -+ -+static void cc_bolt_panel_name_owner_changed (CcBoltPanel *panel); -+ -+static CcBoltDeviceEntry * cc_bolt_panel_add_device (CcBoltPanel *panel, -+ BoltDevice *dev); -+ -+static void cc_bolt_panel_del_device_entry (CcBoltPanel *panel, -+ CcBoltDeviceEntry *entry); -+ -+static void cc_bolt_panel_authmode_sync (CcBoltPanel *panel); -+ -+static void cc_panel_list_box_migrate (CcBoltPanel *panel, -+ GtkListBox *from, -+ GtkListBox *to, -+ CcBoltDeviceEntry *entry); -+ -+/* bolt client signals */ -+static void on_bolt_name_owner_changed_cb (GObject *object, -+ GParamSpec *pspec, -+ gpointer user_data); -+ -+static void on_bolt_device_added_cb (BoltClient *cli, -+ const char *path, -+ CcBoltPanel *panel); -+ -+static void on_bolt_device_removed_cb (BoltClient *cli, -+ const char *opath, -+ CcBoltPanel *panel); -+ -+static void on_bolt_notify_authmode_cb (GObject *gobject, -+ GParamSpec *pspec, -+ gpointer user_data); -+ -+/* panel signals */ -+static gboolean on_authmode_state_set_cb (CcBoltPanel *panel, -+ gboolean state, -+ GtkSwitch *toggle); -+ -+static void on_device_entry_row_activated_cb (CcBoltPanel *panel, -+ GtkListBoxRow *row); -+ -+static gboolean on_device_dialog_delete_event_cb (GtkWidget *widget, -+ GdkEvent *event, -+ CcBoltPanel *panel); -+ -+static void on_device_entry_status_changed_cb (CcBoltDeviceEntry *entry, -+ BoltStatus new_status, -+ CcBoltPanel *panel); -+ -+static void on_notification_button_clicked_cb (GtkButton *button, -+ CcBoltPanel *panel); -+ -+ -+/* polkit */ -+static void on_permission_ready (GObject *source_object, -+ GAsyncResult *res, -+ gpointer user_data); -+ -+static void on_permission_notify_cb (GPermission *permission, -+ GParamSpec *pspec, -+ CcBoltPanel *panel); -+ -+/* device related helpers helpers */ -+static gint device_entries_sort_by_recency (GtkListBoxRow *a_row, -+ GtkListBoxRow *b_row, -+ gpointer user_data); -+ -+static gint device_entries_sort_by_syspath (GtkListBoxRow *a_row, -+ GtkListBoxRow *b_row, -+ gpointer user_data); -+ -+#define RESOURCE_PANEL_UI "/org/gnome/control-center/thunderbolt/cc-bolt-panel.ui" -+ -+CC_PANEL_REGISTER (CcBoltPanel, cc_bolt_panel); -+ -+static void -+bolt_client_ready (GObject *source, -+ GAsyncResult *res, -+ gpointer user_data) -+{ -+ g_autoptr(GError) err = NULL; -+ g_autoptr(CcBoltPanel) panel = NULL; -+ BoltClient *client; -+ -+ panel = CC_BOLT_PANEL (user_data); -+ client = bolt_client_new_finish (res, &err); -+ -+ if (client == NULL) -+ { -+ const char *text; -+ -+ /* operation got cancelled because the panel got destroyed */ -+ if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED) || -+ g_error_matches (err, G_IO_ERROR, G_IO_ERROR_FAILED_HANDLED)) -+ return; -+ -+ g_warning ("Could not create client: %s", err->message); -+ text = _("The thunderbolt subsystem (boltd) is not installed or " -+ "not setup properly."); -+ -+ gtk_label_set_label (panel->notb_details, text); -+ gtk_stack_set_visible_child_name (panel->container, "no-thunderbolt"); -+ -+ return; -+ } -+ -+ g_signal_connect_object (client, "notify::g-name-owner", -+ G_CALLBACK (on_bolt_name_owner_changed_cb), -+ panel, 0); -+ -+ g_signal_connect_object (client, "device-added", -+ G_CALLBACK (on_bolt_device_added_cb), -+ panel, 0); -+ -+ g_signal_connect_object (client, "device-removed", -+ G_CALLBACK (on_bolt_device_removed_cb), -+ panel, 0); -+ -+ g_signal_connect_object (client, "notify::auth-mode", -+ G_CALLBACK (on_bolt_notify_authmode_cb), -+ panel, 0); -+ -+ panel->client = client; -+ -+ cc_bolt_device_dialog_set_client (panel->device_dialog, client); -+ -+ cc_bolt_panel_authmode_sync (panel); -+ -+ g_object_bind_property (panel->authmode_switch, "active", -+ panel->devices_box, "sensitive", -+ G_BINDING_SYNC_CREATE); -+ -+ g_object_bind_property (panel->authmode_switch, "active", -+ panel->pending_box, "sensitive", -+ G_BINDING_SYNC_CREATE); -+ -+ gtk_stack_set_visible_child_name (panel->devices_stack, "no-devices"); -+ cc_bolt_panel_name_owner_changed (panel); -+} -+ -+static gboolean -+devices_table_transfer_entry (GHashTable *from, -+ GHashTable *to, -+ gconstpointer key) -+{ -+ gpointer k, v; -+ gboolean found; -+ -+ found = g_hash_table_lookup_extended (from, key, &k, &v); -+ -+ if (found) -+ { -+ g_hash_table_steal (from, key); -+ g_hash_table_insert (to, k, v); -+ } -+ -+ return found; -+} -+ -+static void -+devices_table_clear_entries (GHashTable *table, -+ CcBoltPanel *panel) -+{ -+ GHashTableIter iter; -+ gpointer key, value; -+ -+ g_hash_table_iter_init (&iter, table); -+ while (g_hash_table_iter_next (&iter, &key, &value)) -+ { -+ CcBoltDeviceEntry *entry = value; -+ -+ cc_bolt_panel_del_device_entry (panel, entry); -+ g_hash_table_iter_remove (&iter); -+ } -+} -+ -+static void -+devices_table_synchronize (CcBoltPanel *panel) -+{ -+ g_autoptr(GError) err = NULL; -+ g_autoptr(GPtrArray) devices = NULL; -+ g_autoptr(GHashTable) old = NULL; -+ -+ devices = bolt_client_list_devices (panel->client, panel->cancel, &err); -+ -+ if (devices == NULL) -+ { -+ g_warning ("Could not list devices: %s", err->message); -+ devices = g_ptr_array_new_with_free_func (g_object_unref); -+ } -+ -+ old = panel->devices; -+ panel->devices = g_hash_table_new (g_str_hash, g_str_equal); -+ -+ for (guint i = 0; i < devices->len; i++) -+ { -+ BoltDevice *dev = g_ptr_array_index (devices, i); -+ const char *path; -+ gboolean found; -+ -+ path = g_dbus_proxy_get_object_path (G_DBUS_PROXY (dev)); -+ found = devices_table_transfer_entry (old, panel->devices, path); -+ -+ if (found) -+ continue; -+ -+ cc_bolt_panel_add_device (panel, dev); -+ } -+ -+ devices_table_clear_entries (old, panel); -+ gtk_stack_set_visible_child_name (panel->container, "devices-listing"); -+} -+ -+static gboolean -+list_box_sync_visible (GtkListBox *lstbox) -+{ -+ g_autoptr(GList) children = NULL; -+ gboolean show; -+ -+ children = gtk_container_get_children (GTK_CONTAINER (lstbox)); -+ show = g_list_length (children) > 0; -+ -+ gtk_widget_set_visible (GTK_WIDGET (lstbox), show); -+ -+ return show; -+} -+ -+static GtkWidget * -+cc_bolt_panel_box_for_listbox (CcBoltPanel *panel, -+ GtkListBox *lstbox) -+{ -+ if ((gpointer) lstbox == panel->devices_list) -+ return GTK_WIDGET (panel->devices_box); -+ else if ((gpointer) lstbox == panel->pending_list) -+ return GTK_WIDGET (panel->pending_box); -+ -+ g_return_val_if_reached (NULL); -+} -+ -+static CcBoltDeviceEntry * -+cc_bolt_panel_add_device (CcBoltPanel *panel, -+ BoltDevice *dev) -+{ -+ CcBoltDeviceEntry *entry; -+ BoltDeviceType type; -+ BoltStatus status; -+ const char *path; -+ -+ type = bolt_device_get_device_type (dev); -+ -+ if (type != BOLT_DEVICE_PERIPHERAL) -+ return FALSE; -+ -+ entry = cc_bolt_device_entry_new (dev); -+ path = g_dbus_proxy_get_object_path (G_DBUS_PROXY (dev)); -+ -+ /* add to the list box */ -+ gtk_widget_show_all (GTK_WIDGET (entry)); -+ -+ status = bolt_device_get_status (dev); -+ -+ if (bolt_status_is_pending (status)) -+ { -+ gtk_container_add (GTK_CONTAINER (panel->pending_list), GTK_WIDGET (entry)); -+ gtk_widget_show_all (GTK_WIDGET (panel->pending_list)); -+ gtk_widget_show_all (GTK_WIDGET (panel->pending_box)); -+ } -+ else -+ { -+ gtk_container_add (GTK_CONTAINER (panel->devices_list), GTK_WIDGET (entry)); -+ gtk_widget_show_all (GTK_WIDGET (panel->devices_list)); -+ gtk_widget_show_all (GTK_WIDGET (panel->devices_box)); -+ } -+ -+ g_signal_connect_object (entry, "status-changed", -+ G_CALLBACK (on_device_entry_status_changed_cb), -+ panel, 0); -+ -+ gtk_stack_set_visible_child_name (panel->devices_stack, "have-devices"); -+ g_hash_table_insert (panel->devices, (gpointer) path, entry); -+ return entry; -+} -+ -+static void -+cc_bolt_panel_del_device_entry (CcBoltPanel *panel, -+ CcBoltDeviceEntry *entry) -+{ -+ BoltDevice *dev; -+ GtkWidget *box; -+ GtkWidget *p; -+ gboolean show; -+ -+ dev = cc_bolt_device_entry_get_device (entry); -+ if (cc_bolt_device_dialog_device_equal (panel->device_dialog, dev)) -+ { -+ gtk_widget_hide (GTK_WIDGET (panel->device_dialog)); -+ cc_bolt_device_dialog_set_device (panel->device_dialog, NULL); -+ } -+ -+ p = gtk_widget_get_parent (GTK_WIDGET (entry)); -+ gtk_widget_destroy (GTK_WIDGET (entry)); -+ -+ box = cc_bolt_panel_box_for_listbox (panel, GTK_LIST_BOX (p)); -+ show = list_box_sync_visible (GTK_LIST_BOX (p)); -+ gtk_widget_set_visible (box, show); -+ -+ if (!gtk_widget_is_visible (GTK_WIDGET (panel->pending_list)) && -+ !gtk_widget_is_visible (GTK_WIDGET (panel->devices_list))) -+ gtk_stack_set_visible_child_name (panel->devices_stack, "no-devices"); -+} -+ -+static void -+cc_bolt_panel_authmode_sync (CcBoltPanel *panel) -+{ -+ BoltClient *client = panel->client; -+ BoltAuthMode mode; -+ gboolean enabled; -+ const char *name; -+ -+ mode = bolt_client_get_authmode (client); -+ -+ enabled = (mode & BOLT_AUTH_ENABLED) != 0; -+ -+ g_signal_handlers_block_by_func (panel->authmode_switch, -+ on_authmode_state_set_cb, -+ panel); -+ -+ gtk_switch_set_state (panel->authmode_switch, enabled); -+ -+ g_signal_handlers_unblock_by_func (panel->authmode_switch, -+ on_authmode_state_set_cb, -+ panel); -+ -+ name = enabled ? "enabled" : "disabled"; -+ gtk_stack_set_visible_child_name (panel->authmode_mode, name); -+} -+ -+static void -+cc_panel_list_box_migrate (CcBoltPanel *panel, -+ GtkListBox *from, -+ GtkListBox *to, -+ CcBoltDeviceEntry *entry) -+{ -+ GtkWidget *from_box; -+ GtkWidget *to_box; -+ gboolean show; -+ GtkWidget *target; -+ -+ target = GTK_WIDGET (entry); -+ -+ gtk_container_remove (GTK_CONTAINER (from), target); -+ gtk_container_add (GTK_CONTAINER (to), target); -+ gtk_widget_show_all (GTK_WIDGET (to)); -+ -+ from_box = cc_bolt_panel_box_for_listbox (panel, from); -+ to_box = cc_bolt_panel_box_for_listbox (panel, to); -+ -+ show = list_box_sync_visible (from); -+ gtk_widget_set_visible (from_box, show); -+ gtk_widget_set_visible (to_box, TRUE); -+} -+ -+/* bolt client signals */ -+static void -+cc_bolt_panel_set_no_thunderbolt (CcBoltPanel *panel, -+ const char *msg) -+{ -+ if (msg == NULL) -+ msg = _("Thunderbolt could not be detected.\n" -+ "Either the system lacks Thunderbolt support, " -+ "it has been disabled in the BIOS or is set to " -+ "an unsupported security level in the BIOS."); -+ -+ gtk_label_set_label (panel->notb_details, msg); -+ gtk_stack_set_visible_child_name (panel->container, "no-thunderbolt"); -+} -+ -+static void -+cc_bolt_panel_name_owner_changed (CcBoltPanel *panel) -+{ -+ BoltClient *client = panel->client; -+ BoltSecurity sl; -+ gboolean notb = TRUE; -+ const char *text = NULL; -+ const char *name_owner; -+ -+ name_owner = g_dbus_proxy_get_name_owner (G_DBUS_PROXY (panel->client)); -+ -+ if (name_owner == NULL) -+ { -+ cc_bolt_panel_set_no_thunderbolt (panel, NULL); -+ devices_table_clear_entries (panel->devices, panel); -+ gtk_widget_hide (GTK_WIDGET (panel->headerbar_box)); -+ return; -+ } -+ -+ gtk_stack_set_visible_child_name (panel->container, "loading"); -+ -+ sl = bolt_client_get_security (client); -+ -+ switch (sl) -+ { -+ case BOLT_SECURITY_NONE: -+ case BOLT_SECURITY_SECURE: -+ case BOLT_SECURITY_USER: -+ /* we fetch the device list and show them here */ -+ notb = FALSE; -+ break; -+ -+ case BOLT_SECURITY_DPONLY: -+ case BOLT_SECURITY_USBONLY: -+ text = _("Thunderbolt support has been disabled in the BIOS."); -+ break; -+ -+ case BOLT_SECURITY_UNKNOWN: -+ text = NULL; -+ break; -+ } -+ -+ if (notb) -+ { -+ /* security level is unknown or un-handled */ -+ cc_bolt_panel_set_no_thunderbolt (panel, text); -+ return; -+ } -+ -+ if (panel->permission) -+ gtk_widget_show (GTK_WIDGET (panel->headerbar_box)); -+ else -+ polkit_permission_new ("org.freedesktop.bolt.manage", -+ NULL, -+ panel->cancel, -+ on_permission_ready, -+ g_object_ref (panel)); -+ -+ devices_table_synchronize (panel); -+} -+ -+/* bolt client signals */ -+static void -+on_bolt_name_owner_changed_cb (GObject *object, -+ GParamSpec *pspec, -+ gpointer user_data) -+{ -+ CcBoltPanel *panel = CC_BOLT_PANEL (user_data); -+ -+ cc_bolt_panel_name_owner_changed (panel); -+} -+ -+static void -+on_bolt_device_added_cb (BoltClient *cli, -+ const char *path, -+ CcBoltPanel *panel) -+{ -+ g_autoptr(GError) err = NULL; -+ GDBusConnection *bus; -+ BoltDevice *dev; -+ gboolean found; -+ -+ found = g_hash_table_contains (panel->devices, path); -+ -+ if (found) -+ return; -+ -+ bus = g_dbus_proxy_get_connection (G_DBUS_PROXY (panel->client)); -+ dev = bolt_device_new_for_object_path (bus, path, panel->cancel, &err); -+ -+ if (dev == NULL) -+ { -+ g_warning ("Could not create proxy for %s", path); -+ return; -+ } -+ -+ cc_bolt_panel_add_device (panel, dev); -+} -+ -+static void -+on_bolt_device_removed_cb (BoltClient *cli, -+ const char *path, -+ CcBoltPanel *panel) -+{ -+ CcBoltDeviceEntry *entry; -+ -+ entry = g_hash_table_lookup (panel->devices, path); -+ -+ if (entry == NULL) -+ return; -+ -+ cc_bolt_panel_del_device_entry (panel, entry); -+ g_hash_table_remove (panel->devices, path); -+} -+ -+static void -+on_bolt_notify_authmode_cb (GObject *gobject, -+ GParamSpec *pspec, -+ gpointer user_data) -+{ -+ CcBoltPanel *panel = CC_BOLT_PANEL (user_data); -+ -+ cc_bolt_panel_authmode_sync (panel); -+} -+ -+/* panel signals */ -+ -+static void -+on_authmode_ready (GObject *source_object, -+ GAsyncResult *res, -+ gpointer user_data) -+{ -+ g_autoptr(GError) error = NULL; -+ CcBoltPanel *panel = CC_BOLT_PANEL (user_data); -+ gboolean ok; -+ -+ ok = bolt_client_set_authmode_finish (BOLT_CLIENT (source_object), res, &error); -+ if (!ok) -+ { -+ g_autofree char *text; -+ -+ g_warning ("Could not set authmode: %s", error->message); -+ -+ text = g_strdup_printf (_("Error switching direct mode: %s"), error->message); -+ gtk_label_set_markup (panel->notification_label, text); -+ gtk_revealer_set_reveal_child (panel->notification_revealer, TRUE); -+ -+ /* make sure we are reflecting the correct state */ -+ cc_bolt_panel_authmode_sync (panel); -+ } -+ -+ gtk_spinner_stop (panel->authmode_spinner); -+ gtk_widget_set_sensitive (GTK_WIDGET (panel->authmode_switch), TRUE); -+} -+ -+static gboolean -+on_authmode_state_set_cb (CcBoltPanel *panel, -+ gboolean enable, -+ GtkSwitch *toggle) -+{ -+ BoltClient *client = panel->client; -+ BoltAuthMode mode; -+ -+ gtk_widget_set_sensitive (GTK_WIDGET (panel->authmode_switch), FALSE); -+ gtk_spinner_start (panel->authmode_spinner); -+ -+ mode = bolt_client_get_authmode (client); -+ -+ if (enable) -+ mode = mode | BOLT_AUTH_ENABLED; -+ else -+ mode = mode & ~BOLT_AUTH_ENABLED; -+ -+ bolt_client_set_authmode_async (client, mode, NULL, on_authmode_ready, panel); -+ -+ return TRUE; -+} -+ -+static void -+on_device_entry_row_activated_cb (CcBoltPanel *panel, -+ GtkListBoxRow *row) -+{ -+ CcBoltDeviceEntry *entry; -+ BoltDevice *device; -+ -+ if (!CC_IS_BOLT_DEVICE_ENTRY (row)) -+ return; -+ -+ entry = CC_BOLT_DEVICE_ENTRY (row); -+ device = cc_bolt_device_entry_get_device (entry); -+ -+ cc_bolt_device_dialog_set_device (panel->device_dialog, device); -+ gtk_window_resize (GTK_WINDOW (panel->device_dialog), 1, 1); -+ gtk_widget_show (GTK_WIDGET (panel->device_dialog)); -+} -+ -+static gboolean -+on_device_dialog_delete_event_cb (GtkWidget *widget, -+ GdkEvent *event, -+ CcBoltPanel *panel) -+{ -+ CcBoltDeviceDialog *dialog; -+ -+ dialog = CC_BOLT_DEVICE_DIALOG (widget); -+ -+ cc_bolt_device_dialog_set_device (dialog, NULL); -+ gtk_widget_hide (widget); -+ -+ return TRUE; -+} -+ -+static void -+on_device_entry_status_changed_cb (CcBoltDeviceEntry *entry, -+ BoltStatus new_status, -+ CcBoltPanel *panel) -+{ -+ GtkListBox *from = NULL; -+ GtkListBox *to = NULL; -+ GtkWidget *p; -+ gboolean is_pending; -+ gboolean parent_pending; -+ -+ /* if we are doing some active work, then lets not change -+ * the list the entry is in; otherwise we might just hop -+ * from one box to the other and back again. -+ */ -+ if (new_status == BOLT_STATUS_CONNECTING || -+ new_status == BOLT_STATUS_AUTHORIZING) -+ return; -+ -+ is_pending = bolt_status_is_pending (new_status); -+ -+ p = gtk_widget_get_parent (GTK_WIDGET (entry)); -+ parent_pending = (gpointer) p == panel->pending_list; -+ -+ /* */ -+ if (is_pending && !parent_pending) -+ { -+ from = panel->devices_list; -+ to = panel->pending_list; -+ } -+ else if (!is_pending && parent_pending) -+ { -+ from = panel->pending_list; -+ to = panel->devices_list; -+ } -+ -+ if (from && to) -+ cc_panel_list_box_migrate (panel, from, to, entry); -+} -+ -+ -+static void -+on_notification_button_clicked_cb (GtkButton *button, -+ CcBoltPanel *panel) -+{ -+ gtk_revealer_set_reveal_child (panel->notification_revealer, FALSE); -+} -+ -+/* polkit */ -+ -+static void -+on_permission_ready (GObject *source_object, -+ GAsyncResult *res, -+ gpointer user_data) -+{ -+ g_autoptr(GError) err = NULL; -+ g_autoptr(CcBoltPanel) panel = user_data; -+ GPermission *permission; -+ gboolean is_allowed; -+ const char *name; -+ -+ permission = polkit_permission_new_finish (res, &err); -+ panel->permission = permission; -+ -+ if (panel->permission == NULL) -+ { -+ g_warning ("Could not get polkit permissions: %s", err->message); -+ return; -+ } -+ -+ g_signal_connect_object (permission, -+ "notify", -+ G_CALLBACK (on_permission_notify_cb), -+ panel, -+ G_CONNECT_AFTER); -+ -+ is_allowed = g_permission_get_allowed (permission); -+ gtk_widget_set_sensitive (GTK_WIDGET (panel->authmode_switch), is_allowed); -+ gtk_lock_button_set_permission (panel->lock_button, permission); -+ -+ name = gtk_stack_get_visible_child_name (panel->container); -+ -+ gtk_widget_set_visible (GTK_WIDGET (panel->headerbar_box), -+ bolt_streq (name, "devices-listing")); -+} -+ -+static void -+on_permission_notify_cb (GPermission *permission, -+ GParamSpec *pspec, -+ CcBoltPanel *panel) -+{ -+ gboolean is_allowed = g_permission_get_allowed (permission); -+ -+ gtk_widget_set_sensitive (GTK_WIDGET (panel->authmode_switch), is_allowed); -+} -+ -+static gint -+device_entries_sort_by_recency (GtkListBoxRow *a_row, -+ GtkListBoxRow *b_row, -+ gpointer user_data) -+{ -+ CcBoltDeviceEntry *a_entry = CC_BOLT_DEVICE_ENTRY (a_row); -+ CcBoltDeviceEntry *b_entry = CC_BOLT_DEVICE_ENTRY (b_row); -+ BoltDevice *a = cc_bolt_device_entry_get_device (a_entry); -+ BoltDevice *b = cc_bolt_device_entry_get_device (b_entry); -+ BoltStatus status; -+ gint64 a_ts, b_ts; -+ gint64 score; -+ -+ a_ts = (gint64) bolt_device_get_timestamp (a); -+ b_ts = (gint64) bolt_device_get_timestamp (b); -+ -+ score = b_ts - a_ts; -+ -+ if (score != 0) -+ return score; -+ -+ status = bolt_device_get_status (a); -+ -+ if (bolt_status_is_connected (status)) -+ { -+ const char *a_path; -+ const char *b_path; -+ -+ a_path = bolt_device_get_syspath (a); -+ b_path = bolt_device_get_syspath (b); -+ -+ return g_strcmp0 (a_path, b_path); -+ } -+ else -+ { -+ const char *a_name; -+ const char *b_name; -+ -+ a_name = bolt_device_get_name (a); -+ b_name = bolt_device_get_name (b); -+ -+ return g_strcmp0 (a_name, b_name); -+ } -+ -+ return 0; -+} -+ -+static gint -+device_entries_sort_by_syspath (GtkListBoxRow *a_row, -+ GtkListBoxRow *b_row, -+ gpointer user_data) -+{ -+ CcBoltDeviceEntry *a_entry = CC_BOLT_DEVICE_ENTRY (a_row); -+ CcBoltDeviceEntry *b_entry = CC_BOLT_DEVICE_ENTRY (b_row); -+ BoltDevice *a = cc_bolt_device_entry_get_device (a_entry); -+ BoltDevice *b = cc_bolt_device_entry_get_device (b_entry); -+ -+ const char *a_path; -+ const char *b_path; -+ -+ a_path = bolt_device_get_syspath (a); -+ b_path = bolt_device_get_syspath (b); -+ -+ return g_strcmp0 (a_path, b_path); -+} -+ -+static void -+cc_bolt_panel_finalize (GObject *object) -+{ -+ CcBoltPanel *panel = CC_BOLT_PANEL (object); -+ -+ g_clear_object (&panel->client); -+ g_clear_pointer (&panel->devices, g_hash_table_unref); -+ g_clear_object (&panel->permission); -+ -+ G_OBJECT_CLASS (cc_bolt_panel_parent_class)->finalize (object); -+} -+ -+static void -+cc_bolt_panel_dispose (GObject *object) -+{ -+ CcBoltPanel *panel = CC_BOLT_PANEL (object); -+ -+ /* cancel any ongoing operation */ -+ g_cancellable_cancel (panel->cancel); -+ -+ /* Must be destroyed in dispose, not finalize. */ -+ g_clear_pointer (&panel->device_dialog, gtk_widget_destroy); -+ -+ G_OBJECT_CLASS (cc_bolt_panel_parent_class)->dispose (object); -+} -+ -+static void -+cc_bolt_panel_constructed (GObject *object) -+{ -+ CcBoltPanel *panel = CC_BOLT_PANEL (object); -+ GtkWindow *parent; -+ CcShell *shell; -+ -+ parent = GTK_WINDOW (cc_shell_get_toplevel (cc_panel_get_shell (CC_PANEL (panel)))); -+ gtk_window_set_transient_for (GTK_WINDOW (panel->device_dialog), parent); -+ -+ G_OBJECT_CLASS (cc_bolt_panel_parent_class)->constructed (object); -+ -+ shell = cc_panel_get_shell (CC_PANEL (panel)); -+ cc_shell_embed_widget_in_header (shell, GTK_WIDGET (panel->headerbar_box)); -+} -+ -+static void -+cc_bolt_panel_class_init (CcBoltPanelClass *klass) -+{ -+ GObjectClass *object_class = G_OBJECT_CLASS (klass); -+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); -+ -+ object_class->constructed = cc_bolt_panel_constructed; -+ object_class->dispose = cc_bolt_panel_dispose; -+ object_class->finalize = cc_bolt_panel_finalize; -+ -+ gtk_widget_class_set_template_from_resource (widget_class, RESOURCE_PANEL_UI); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltPanel, headerbar_box); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltPanel, lock_button); -+ -+ gtk_widget_class_bind_template_child (widget_class, CcBoltPanel, container); -+ -+ gtk_widget_class_bind_template_child (widget_class, CcBoltPanel, notb_caption); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltPanel, notb_details); -+ -+ gtk_widget_class_bind_template_child (widget_class, CcBoltPanel, notification_label); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltPanel, notification_revealer); -+ -+ gtk_widget_class_bind_template_child (widget_class, CcBoltPanel, authmode_mode); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltPanel, authmode_switch); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltPanel, authmode_spinner); -+ -+ gtk_widget_class_bind_template_child (widget_class, CcBoltPanel, devices_stack); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltPanel, devices_box); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltPanel, pending_box); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltPanel, devices_list); -+ gtk_widget_class_bind_template_child (widget_class, CcBoltPanel, pending_list); -+ -+ gtk_widget_class_bind_template_callback (widget_class, on_notification_button_clicked_cb); -+ gtk_widget_class_bind_template_callback (widget_class, on_authmode_state_set_cb); -+ gtk_widget_class_bind_template_callback (widget_class, on_device_entry_row_activated_cb); -+} -+ -+static void -+cc_bolt_panel_init (CcBoltPanel *panel) -+{ -+ g_resources_register (cc_thunderbolt_get_resource ()); -+ gtk_widget_init_template (GTK_WIDGET (panel)); -+ -+ gtk_stack_set_visible_child_name (panel->container, "loading"); -+ -+ gtk_list_box_set_header_func (panel->devices_list, -+ cc_list_box_update_header_func, -+ NULL, NULL); -+ -+ gtk_list_box_set_header_func (panel->pending_list, -+ cc_list_box_update_header_func, -+ NULL, NULL); -+ -+ gtk_list_box_set_sort_func (panel->devices_list, -+ device_entries_sort_by_recency, -+ panel, -+ NULL); -+ -+ gtk_list_box_set_sort_func (panel->pending_list, -+ device_entries_sort_by_syspath, -+ panel, -+ NULL); -+ -+ panel->devices = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, NULL); -+ -+ panel->device_dialog = cc_bolt_device_dialog_new (); -+ g_signal_connect_object (panel->device_dialog, "delete-event", -+ G_CALLBACK (on_device_dialog_delete_event_cb), -+ panel, 0); -+ -+ panel->cancel = g_cancellable_new (); -+ bolt_client_new_async (panel->cancel, -+ bolt_client_ready, -+ g_object_ref (panel)); -+ -+} -diff --git a/panels/thunderbolt/cc-bolt-panel.ui b/panels/thunderbolt/cc-bolt-panel.ui -new file mode 100644 -index 000000000000..5ec6748600b9 ---- /dev/null -+++ b/panels/thunderbolt/cc-bolt-panel.ui -@@ -0,0 +1,594 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ False -+ False -+ 6 -+ end -+ -+ -+ True -+ -+ -+ -+ -+ -diff --git a/panels/thunderbolt/gnome-thunderbolt-panel.desktop.in.in b/panels/thunderbolt/gnome-thunderbolt-panel.desktop.in.in -new file mode 100644 -index 000000000000..db2477e45a74 ---- /dev/null -+++ b/panels/thunderbolt/gnome-thunderbolt-panel.desktop.in.in -@@ -0,0 +1,17 @@ -+[Desktop Entry] -+Name=Thunderbolt -+Comment=Manage Thunderbolt devices -+Exec=gnome-control-center thunderbolt -+Icon=thunderbolt -+Terminal=false -+Type=Application -+NoDisplay=true -+StartupNotify=true -+Categories=GNOME;GTK;Settings;X-GNOME-Settings-Panel;HardwareSettings;X-GNOME-DevicesSettings;X-GNOME-ConnectivitySettings; -+OnlyShowIn=GNOME;Unity; -+X-GNOME-Bugzilla-Bugzilla=GNOME -+X-GNOME-Bugzilla-Product=gnome-control-center -+X-GNOME-Bugzilla-Component=thunderbolt -+X-GNOME-Bugzilla-Version=@VERSION@ -+# Translators: those are keywords for the thunderbolt control-center panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! -+Keywords=Thunderbolt; -diff --git a/panels/thunderbolt/meson.build b/panels/thunderbolt/meson.build -new file mode 100644 -index 000000000000..e855661574fc ---- /dev/null -+++ b/panels/thunderbolt/meson.build -@@ -0,0 +1,74 @@ -+panels_list += cappletname -+ -+desktop = 'gnome-@0@-panel.desktop'.format(cappletname) -+desktop_in = configure_file( -+ input: desktop + '.in.in', -+ output: desktop + '.in', -+ configuration: desktop_conf -+) -+ -+i18n.merge_file( -+ desktop, -+ type: 'desktop', -+ input: desktop_in, -+ output: desktop, -+ po_dir: po_dir, -+ install: true, -+ install_dir: control_center_desktopdir -+) -+ -+sources = files( -+ 'bolt-client.c', -+ 'bolt-device.c', -+ 'bolt-enums.c', -+ 'bolt-error.c', -+ 'bolt-proxy.c', -+ 'bolt-str.c', -+ 'bolt-time.c', -+ 'cc-bolt-panel.c', -+ 'cc-bolt-device-dialog.c', -+ 'cc-bolt-device-entry.c', -+) -+ -+enum_headers = [ -+ 'bolt-enums.h', -+ 'bolt-error.h' -+] -+ -+sources += gnome.mkenums_simple( -+ 'bolt-enum-types', -+ sources: enum_headers) -+ -+resource_data = files( -+ 'cc-bolt-device-dialog.ui', -+ 'cc-bolt-device-entry.ui', -+ 'cc-bolt-panel.ui' -+) -+ -+sources += gnome.compile_resources( -+ 'cc-' + cappletname + '-resources', -+ cappletname + '.gresource.xml', -+ source_dir: '.', -+ c_name: 'cc_' + cappletname, -+ dependencies: resource_data, -+ export: true -+) -+ -+deps = common_deps + [ -+ gnome_desktop_dep, -+ polkit_gobject_dep, -+ m_dep, -+] -+ -+cflags += [ -+ '-DGNOMELOCALEDIR="@0@"'.format(control_center_localedir), -+ '-DBINDIR="@0@"'.format(control_center_bindir) -+] -+ -+panels_libs += static_library( -+ cappletname, -+ sources: sources, -+ include_directories: top_inc, -+ dependencies: deps, -+ c_args: cflags -+) -diff --git a/panels/thunderbolt/thunderbolt.gresource.xml b/panels/thunderbolt/thunderbolt.gresource.xml -new file mode 100644 -index 000000000000..8953d6243275 ---- /dev/null -+++ b/panels/thunderbolt/thunderbolt.gresource.xml -@@ -0,0 +1,9 @@ -+ -+ -+ -+ cc-bolt-device-dialog.ui -+ cc-bolt-device-entry.ui -+ cc-bolt-panel.ui -+ -+ -+ -diff --git a/panels/thunderbolt/update-from-bolt.sh b/panels/thunderbolt/update-from-bolt.sh -new file mode 100755 -index 000000000000..8b22f0831781 ---- /dev/null -+++ b/panels/thunderbolt/update-from-bolt.sh -@@ -0,0 +1,50 @@ -+#!/bin/bash -+ -+if [ $# -ne 1 ]; then -+ echo "$0: usage: " -+ exit 1 -+fi -+ -+boltsrc="$1" -+ -+function die() { -+ echo $* -+ exit 1 -+} -+ -+function copyone() { -+ dst=$1 -+ src="$boltsrc/$dst" -+ -+ search=(common cli) -+ for base in ${search[*]} -+ do -+ path="$boltsrc/$base/$dst" -+ if [ -f $path ]; then -+ src=$path -+ break; -+ fi -+ done -+ -+ if [ ! -f $src ]; then -+ echo -e "$dst \t[ skipped ] $src (ENOENT)" -+ elif cmp -s $src $dst; then -+ echo -e "$dst \t[ unchanged ]" -+ else -+ cp $src $dst || die "$dst [failed] source: $src" -+ echo -e "$dst \t[ updated ] $src" -+ git add $dst -+ fi -+} -+ -+names=(client device enums error names proxy str time) -+ -+for fn in ${names[*]} -+do -+ header="bolt-$fn.h" -+ source="bolt-$fn.c" -+ -+ copyone $header -+ copyone $source -+done -+ -diff --git a/shell/cc-panel-list.c b/shell/cc-panel-list.c -index 0fd093cf9758..99d8a91144ad 100644 ---- a/shell/cc-panel-list.c -+++ b/shell/cc-panel-list.c -@@ -276,6 +276,7 @@ static const gchar * const panel_order[] = { - "wifi", - "mobile-broadband", - "bluetooth", -+ "thunderbolt", - "background", - "notifications", - "search", -diff --git a/shell/cc-panel-loader.c b/shell/cc-panel-loader.c -index 675833c129d7..9b8aca5c6f9b 100644 ---- a/shell/cc-panel-loader.c -+++ b/shell/cc-panel-loader.c -@@ -54,6 +54,9 @@ extern GType cc_region_panel_get_type (void); - extern GType cc_search_panel_get_type (void); - extern GType cc_sharing_panel_get_type (void); - extern GType cc_sound_panel_get_type (void); -+#ifdef BUILD_THUNDERBOLT -+extern GType cc_bolt_panel_get_type (void); -+#endif /* BUILD_THUNDERBOLT */ - extern GType cc_ua_panel_get_type (void); - extern GType cc_user_panel_get_type (void); - #ifdef BUILD_WACOM -@@ -99,6 +102,9 @@ static struct { - PANEL_TYPE("search", cc_search_panel_get_type ), - PANEL_TYPE("sharing", cc_sharing_panel_get_type ), - PANEL_TYPE("sound", cc_sound_panel_get_type ), -+#ifdef BUILD_THUNDERBOLT -+ PANEL_TYPE("thunderbolt", cc_bolt_panel_get_type ), -+#endif - PANEL_TYPE("universal-access", cc_ua_panel_get_type ), - PANEL_TYPE("user-accounts", cc_user_panel_get_type ), - #ifdef BUILD_WACOM --- -2.17.0 - diff --git a/0004-info-Better-support-registered-but-no-subscriptions-.patch b/0004-info-Better-support-registered-but-no-subscriptions-.patch deleted file mode 100644 index 04ed1b2..0000000 --- a/0004-info-Better-support-registered-but-no-subscriptions-.patch +++ /dev/null @@ -1,1367 +0,0 @@ -From 26bae6e6d9a7968bbc2e189bf72c8d1588135dfa Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Sun, 24 Jan 2021 13:59:17 -0500 -Subject: [PATCH 4/4] info: Better support registered-but-no-subscriptions - cases - -There are cases when the machine can be registered for updates, -but not have any active subscriptions. For instance, if the -admin runs "subscription-manager register" but fails to pass ---auto-attach. As another case, the org may be configured to -be in "Simple Content Access" mode where updates don't require -specific production subscriptions. - -This commit tries to accomodate those cases better. If the user -is registered, but needs a subscription, the dialog provides a -way to attach one. - -If the user is registered and doesn't need a subscription, the -dialog now shows an updated message to reflect that fact. ---- - panels/info/cc-info-overview-panel.c | 25 +- - panels/info/cc-subscription-details-dialog.c | 180 ++++++++++++- - panels/info/cc-subscription-details-dialog.ui | 249 +++++++++++++++--- - panels/info/info-overview.ui | 35 ++- - 4 files changed, 431 insertions(+), 58 deletions(-) - -diff --git a/panels/info/cc-info-overview-panel.c b/panels/info/cc-info-overview-panel.c -index 65246758e..571654fa0 100644 ---- a/panels/info/cc-info-overview-panel.c -+++ b/panels/info/cc-info-overview-panel.c -@@ -49,60 +49,61 @@ - #include - #endif - - #include "gsd-disk-space-helper.h" - - #include "cc-info-overview-panel.h" - - - typedef struct { - /* Will be one or 2 GPU name strings, or "Unknown" */ - char *hardware_string; - } GraphicsData; - - typedef struct - { - GtkWidget *system_image; - GtkWidget *version_label; - GtkWidget *name_entry; - GtkWidget *memory_label; - GtkWidget *processor_label; - GtkWidget *os_name_label; - GtkWidget *os_type_label; - GtkWidget *disk_label; - GtkWidget *graphics_label; - GtkWidget *virt_type_label; - GtkWidget *subscription_stack; - GtkWidget *details_button; - GtkWidget *register_button; - GtkWidget *updates_separator; - GtkWidget *updates_button; -+ GtkWidget *updates_stack; - - /* Virtualisation labels */ - GtkWidget *label8; - GtkWidget *grid1; - GtkWidget *label18; - - char *gnome_version; - char *gnome_distributor; - char *gnome_date; - - GCancellable *cancellable; - GCancellable *subscription_cancellable; - - /* Free space */ - GList *primary_mounts; - guint64 total_bytes; - - GraphicsData *graphics_data; - - GDBusProxy *subscription_proxy; - } CcInfoOverviewPanelPrivate; - - struct _CcInfoOverviewPanel - { - CcPanel parent_instance; - - /*< private >*/ - CcInfoOverviewPanelPrivate *priv; - }; - -@@ -796,72 +797,85 @@ info_overview_panel_setup_overview (CcInfoOverviewPanel *self) - - os_name_text = get_os_name (); - gtk_label_set_text (GTK_LABEL (priv->os_name_label), os_name_text ? os_name_text : ""); - - get_primary_disc_info (self); - - gtk_label_set_markup (GTK_LABEL (priv->graphics_label), priv->graphics_data->hardware_string); - } - - static void - reload_subscription_status (CcInfoOverviewPanel *self) - { - CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); - GsdSubmanSubscriptionStatus status; - - if (priv->subscription_proxy == NULL) - { - gtk_widget_hide (priv->subscription_stack); - return; - } - - if (!get_subscription_status (priv->subscription_proxy, &status)) - { - gtk_widget_hide (priv->subscription_stack); - return; - } - - switch (status) - { - case GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN: -- case GSD_SUBMAN_SUBSCRIPTION_STATUS_INVALID: -- case GSD_SUBMAN_SUBSCRIPTION_STATUS_DISABLED: -- case GSD_SUBMAN_SUBSCRIPTION_STATUS_PARTIALLY_VALID: - gtk_stack_set_visible_child_name (GTK_STACK (priv->subscription_stack), "not-registered"); -+ gtk_stack_set_visible_child_name (GTK_STACK (priv->updates_stack), "no-updates"); - gtk_widget_set_sensitive (priv->updates_button, FALSE); - break; -- -+ case GSD_SUBMAN_SUBSCRIPTION_STATUS_DISABLED: -+ gtk_stack_set_visible_child_name (GTK_STACK (priv->subscription_stack), "registered"); -+ gtk_stack_set_visible_child_name (GTK_STACK (priv->updates_stack), "updates"); -+ gtk_widget_set_sensitive (priv->updates_button, TRUE); -+ break; - case GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID: -+ case GSD_SUBMAN_SUBSCRIPTION_STATUS_PARTIALLY_VALID: - gtk_stack_set_visible_child_name (GTK_STACK (priv->subscription_stack), "registered"); -+ gtk_stack_set_visible_child_name (GTK_STACK (priv->updates_stack), "updates"); - gtk_widget_set_sensitive (priv->updates_button, TRUE); - break; -- -+ case GSD_SUBMAN_SUBSCRIPTION_STATUS_INVALID: -+ gtk_stack_set_visible_child_name (GTK_STACK (priv->subscription_stack), "registered"); -+ gtk_stack_set_visible_child_name (GTK_STACK (priv->updates_stack), "no-updates"); -+ gtk_widget_set_sensitive (priv->updates_button, FALSE); -+ break; -+ case GSD_SUBMAN_SUBSCRIPTION_STATUS_NO_INSTALLED_PRODUCTS: -+ gtk_stack_set_visible_child_name (GTK_STACK (priv->subscription_stack), "not-registered"); -+ gtk_stack_set_visible_child_name (GTK_STACK (priv->updates_stack), "no-updates"); -+ gtk_widget_set_sensitive (priv->updates_button, FALSE); -+ break; - default: - g_assert_not_reached (); - break; - } - } - - static void - on_details_button_clicked (GtkWidget *widget, - CcInfoOverviewPanel *self) - { - CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); - CcSubscriptionDetailsDialog *dialog; - GtkWindow *toplevel; - - dialog = cc_subscription_details_dialog_new (priv->subscription_proxy, - priv->subscription_cancellable); - toplevel = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))); - gtk_window_set_transient_for (GTK_WINDOW (dialog), toplevel); - - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (GTK_WIDGET (dialog)); - } - - static void - on_register_button_clicked (GtkWidget *widget, - CcInfoOverviewPanel *self) - { - CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); - CcSubscriptionRegisterDialog *dialog; - GtkWindow *toplevel; -@@ -994,60 +1008,61 @@ cc_info_overview_panel_finalize (GObject *object) - - G_OBJECT_CLASS (cc_info_overview_panel_parent_class)->finalize (object); - } - - static void - cc_info_overview_panel_class_init (CcInfoOverviewPanelClass *klass) - { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - - object_class->finalize = cc_info_overview_panel_finalize; - object_class->dispose = cc_info_overview_panel_dispose; - - gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/info/info-overview.ui"); - - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, system_image); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, version_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, name_entry); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, memory_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, processor_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, os_name_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, os_type_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, disk_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, graphics_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, virt_type_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, subscription_stack); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, details_button); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, register_button); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, updates_separator); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, updates_button); -+ gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, updates_stack); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, label8); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, grid1); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, label18); - - g_type_ensure (CC_TYPE_HOSTNAME_ENTRY); - } - - static void - cc_info_overview_panel_init (CcInfoOverviewPanel *self) - { - CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); - - gtk_widget_init_template (GTK_WIDGET (self)); - - g_resources_register (cc_info_get_resource ()); - - priv->cancellable = g_cancellable_new (); - priv->subscription_cancellable = g_cancellable_new (); - - priv->graphics_data = get_graphics_data (); - - if (does_gnome_software_exist () || does_gpk_update_viewer_exist ()) - g_signal_connect (priv->updates_button, "clicked", G_CALLBACK (on_updates_button_clicked), self); - else - gtk_widget_hide (priv->updates_button); - - info_overview_panel_setup_overview (self); - info_overview_panel_setup_virt (self); - info_overview_panel_setup_subscriptions (self); - -diff --git a/panels/info/cc-subscription-details-dialog.c b/panels/info/cc-subscription-details-dialog.c -index 3d77e6c48..f8e70d751 100644 ---- a/panels/info/cc-subscription-details-dialog.c -+++ b/panels/info/cc-subscription-details-dialog.c -@@ -1,420 +1,578 @@ - /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright 2019 Red Hat, Inc, - * - * 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, see . - * - * Written by: Kalev Lember - */ - - #include "config.h" - - #include - #include - #include - - #include "cc-subscription-details-dialog.h" -+#include "cc-subscription-common.h" - - #define DBUS_TIMEOUT 300000 /* 5 minutes */ - - typedef enum { - DIALOG_STATE_SHOW_DETAILS, -+ DIALOG_STATE_SUBSCRIBE, -+ DIALOG_STATE_SUBSCRIBING, - DIALOG_STATE_UNREGISTER, - DIALOG_STATE_UNREGISTERING - } DialogState; - - struct _CcSubscriptionDetailsDialog - { - GtkDialog parent_instance; - - DialogState state; - GCancellable *cancellable; - GDBusProxy *subscription_proxy; - GPtrArray *products; - - /* template widgets */ - GtkButton *back_button; - GtkSpinner *spinner; -+ GtkStack *header_stack; -+ GtkButton *header_subscribe_button; - GtkButton *header_unregister_button; - GtkRevealer *notification_revealer; - GtkLabel *error_label; - GtkStack *stack; -+ GtkStack *status_stack; - GtkBox *products_box1; - GtkBox *products_box2; -+ GtkBox *products_box3; -+ GtkButton *subscribe_button; -+ GtkSeparator *separator; - GtkButton *unregister_button; - }; - - G_DEFINE_TYPE (CcSubscriptionDetailsDialog, cc_subscription_details_dialog, GTK_TYPE_DIALOG); - -+static void reload_installed_products (CcSubscriptionDetailsDialog *self); -+ - typedef struct - { - gchar *product_name; - gchar *product_id; - gchar *version; - gchar *arch; - gchar *status; - gchar *starts; - gchar *ends; - } ProductData; - - static void - product_data_free (ProductData *product) - { - g_free (product->product_name); - g_free (product->product_id); - g_free (product->version); - g_free (product->arch); - g_free (product->status); - g_free (product->starts); - g_free (product->ends); - g_free (product); - } - - G_DEFINE_AUTOPTR_CLEANUP_FUNC (ProductData, product_data_free); - - static void - add_product_row (GtkGrid *product_grid, const gchar *name, const gchar *value, gint top_attach) - { - GtkWidget *w; - - w = gtk_label_new (name); - gtk_style_context_add_class (gtk_widget_get_style_context (w), "dim-label"); - gtk_grid_attach (product_grid, w, 0, top_attach, 1, 1); - gtk_widget_set_halign (w, GTK_ALIGN_END); - gtk_widget_show (w); - - if (value == NULL) - value = _("Unknown"); - - w = gtk_label_new (value); - gtk_grid_attach (product_grid, w, 1, top_attach, 1, 1); - gtk_widget_set_halign (w, GTK_ALIGN_START); - gtk_widget_set_hexpand (w, TRUE); - gtk_widget_show (w); - } - - static GtkWidget * --add_product (CcSubscriptionDetailsDialog *self, ProductData *product) -+add_product (CcSubscriptionDetailsDialog *self, ProductData *product, GsdSubmanSubscriptionStatus status) - { - GtkGrid *product_grid; - const gchar *status_text; - - if (g_strcmp0 (product->status, "subscribed") == 0) - status_text = _("Subscribed"); -+ else if (status == GSD_SUBMAN_SUBSCRIPTION_STATUS_DISABLED) -+ status_text = _("No Specific Subscription"); - else -- status_text = _("Not Subscribed (Not supported by a valid subscription.)"); -+ status_text = _("Not Subscribed"); - - product_grid = GTK_GRID (gtk_grid_new ()); - gtk_grid_set_column_spacing (product_grid, 12); - gtk_grid_set_row_spacing (product_grid, 6); - gtk_widget_set_margin_top (GTK_WIDGET (product_grid), 18); - gtk_widget_set_margin_bottom (GTK_WIDGET (product_grid), 12); - gtk_widget_show (GTK_WIDGET (product_grid)); - - add_product_row (product_grid, _("Product Name"), product->product_name, 0); - add_product_row (product_grid, _("Product ID"), product->product_id, 1); - add_product_row (product_grid, _("Version"), product->version, 2); - add_product_row (product_grid, _("Arch"), product->arch, 3); - add_product_row (product_grid, _("Status"), status_text, 4); -- add_product_row (product_grid, _("Starts"), product->starts, 5); -- add_product_row (product_grid, _("Ends"), product->ends, 6); -+ -+ if (product->starts[0] != '\0' && product->ends[0] != '\0') -+ { -+ add_product_row (product_grid, _("Starts"), product->starts, 5); -+ add_product_row (product_grid, _("Ends"), product->ends, 6); -+ } - - return GTK_WIDGET (product_grid); - } - - static void - remove_all_children (GtkContainer *container) - { - g_autoptr(GList) list = gtk_container_get_children (container); - - for (GList *l = list; l != NULL; l = l->next) - gtk_container_remove (container, (GtkWidget *) l->data); - } - - static void - dialog_reload (CcSubscriptionDetailsDialog *self) - { - GtkHeaderBar *header = GTK_HEADER_BAR (gtk_dialog_get_header_bar (GTK_DIALOG (self))); -+ GsdSubmanSubscriptionStatus status = GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN; -+ -+ reload_installed_products (self); - - switch (self->state) - { - case DIALOG_STATE_SHOW_DETAILS: - gtk_header_bar_set_show_close_button (header, TRUE); - - gtk_window_set_title (GTK_WINDOW (self), _("Registration Details")); - gtk_widget_set_sensitive (GTK_WIDGET (self->header_unregister_button), TRUE); -+ gtk_widget_set_sensitive (GTK_WIDGET (self->header_subscribe_button), TRUE); - - gtk_widget_hide (GTK_WIDGET (self->back_button)); -- gtk_widget_hide (GTK_WIDGET (self->header_unregister_button)); -+ gtk_widget_hide (GTK_WIDGET (self->header_stack)); - - gtk_stack_set_visible_child_name (self->stack, "show-details"); - break; - -+ case DIALOG_STATE_SUBSCRIBE: -+ gtk_header_bar_set_show_close_button (header, FALSE); -+ gtk_stack_set_visible_child_name (self->header_stack, "subscribe"); -+ gtk_window_set_title (GTK_WINDOW (self), _("Subscribe System")); -+ gtk_widget_set_sensitive (GTK_WIDGET (self->header_subscribe_button), TRUE); -+ -+ gtk_widget_show (GTK_WIDGET (self->back_button)); -+ -+ gtk_stack_set_visible_child_name (self->header_stack, "subscribe"); -+ gtk_widget_show (GTK_WIDGET (self->header_stack)); -+ -+ gtk_stack_set_visible_child_name (self->stack, "subscribe"); -+ break; -+ -+ case DIALOG_STATE_SUBSCRIBING: -+ gtk_header_bar_set_show_close_button (header, FALSE); -+ gtk_window_set_title (GTK_WINDOW (self), _("Looking For Available Subscriptions…")); -+ gtk_widget_set_sensitive (GTK_WIDGET (self->header_subscribe_button), FALSE); -+ -+ gtk_widget_show (GTK_WIDGET (self->back_button)); -+ -+ gtk_stack_set_visible_child_name (self->header_stack, "subscribe"); -+ gtk_widget_show (GTK_WIDGET (self->header_stack)); -+ -+ gtk_stack_set_visible_child_name (self->stack, "subscribe"); -+ break; -+ - case DIALOG_STATE_UNREGISTER: - gtk_header_bar_set_show_close_button (header, FALSE); - - gtk_window_set_title (GTK_WINDOW (self), _("Unregister System")); - gtk_widget_set_sensitive (GTK_WIDGET (self->header_unregister_button), TRUE); - - gtk_widget_show (GTK_WIDGET (self->back_button)); -- gtk_widget_show (GTK_WIDGET (self->header_unregister_button)); -+ -+ gtk_stack_set_visible_child_name (self->header_stack, "unregister"); -+ gtk_widget_show (GTK_WIDGET (self->header_stack)); - - gtk_stack_set_visible_child_name (self->stack, "unregister"); - break; - - case DIALOG_STATE_UNREGISTERING: - gtk_header_bar_set_show_close_button (header, FALSE); - - gtk_window_set_title (GTK_WINDOW (self), _("Unregistering System…")); - gtk_widget_set_sensitive (GTK_WIDGET (self->header_unregister_button), FALSE); - - gtk_widget_show (GTK_WIDGET (self->back_button)); -- gtk_widget_show (GTK_WIDGET (self->header_unregister_button)); -+ -+ gtk_stack_set_visible_child_name (self->header_stack, "unregister"); -+ gtk_widget_show (GTK_WIDGET (self->header_stack)); - - gtk_stack_set_visible_child_name (self->stack, "unregister"); - break; - - default: - g_assert_not_reached (); - break; - } - - remove_all_children (GTK_CONTAINER (self->products_box1)); - remove_all_children (GTK_CONTAINER (self->products_box2)); -+ remove_all_children (GTK_CONTAINER (self->products_box3)); - - if (self->products == NULL || self->products->len == 0) - { - /* the widgets are duplicate to allow sliding between two stack pages */ - GtkWidget *w1 = gtk_label_new (_("No installed products detected.")); - GtkWidget *w2 = gtk_label_new (_("No installed products detected.")); -+ GtkWidget *w3 = gtk_label_new (_("No installed products detected.")); - gtk_widget_show (w1); - gtk_widget_show (w2); -+ gtk_widget_show (w3); - gtk_container_add (GTK_CONTAINER (self->products_box1), w1); - gtk_container_add (GTK_CONTAINER (self->products_box2), w2); -+ gtk_container_add (GTK_CONTAINER (self->products_box3), w3); -+ gtk_stack_set_visible_child_name (self->status_stack, "no-installed-products"); -+ -+ gtk_widget_hide (GTK_WIDGET (self->subscribe_button)); -+ gtk_widget_hide (GTK_WIDGET (self->separator)); - return; - } - -+ get_subscription_status (self->subscription_proxy, &status); -+ - for (guint i = 0; i < self->products->len; i++) - { - ProductData *product = g_ptr_array_index (self->products, i); - /* the widgets are duplicate to allow sliding between two stack pages */ -- GtkWidget *w1 = add_product (self, product); -- GtkWidget *w2 = add_product (self, product); -+ GtkWidget *w1 = add_product (self, product, status); -+ GtkWidget *w2 = add_product (self, product, status); -+ GtkWidget *w3 = add_product (self, product, status); - gtk_container_add (GTK_CONTAINER (self->products_box1), w1); - gtk_container_add (GTK_CONTAINER (self->products_box2), w2); -+ gtk_container_add (GTK_CONTAINER (self->products_box3), w3); - } -+ -+ switch (status) -+ { -+ case GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID: -+ gtk_stack_set_visible_child_name (self->status_stack, "fully-subscribed"); -+ gtk_widget_hide (GTK_WIDGET (self->subscribe_button)); -+ break; -+ -+ case GSD_SUBMAN_SUBSCRIPTION_STATUS_PARTIALLY_VALID: -+ gtk_stack_set_visible_child_name (self->status_stack, "partly-subscribed"); -+ gtk_widget_show (GTK_WIDGET (self->subscribe_button)); -+ break; -+ -+ case GSD_SUBMAN_SUBSCRIPTION_STATUS_DISABLED: -+ gtk_stack_set_visible_child_name (self->status_stack, "subscription-not-needed"); -+ gtk_widget_hide (GTK_WIDGET (self->subscribe_button)); -+ break; -+ -+ case GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN: -+ default: -+ gtk_stack_set_visible_child_name (self->status_stack, "not-subscribed"); -+ gtk_widget_show (GTK_WIDGET (self->subscribe_button)); -+ break; -+ } -+ -+ gtk_widget_set_visible (GTK_WIDGET (self->separator), -+ gtk_widget_get_visible (GTK_WIDGET (self->subscribe_button))); -+ - } - - static ProductData * - parse_product_variant (GVariant *product_variant) - { - g_autoptr(ProductData) product = g_new0 (ProductData, 1); - g_auto(GVariantDict) dict; - - g_variant_dict_init (&dict, product_variant); - - g_variant_dict_lookup (&dict, "product-name", "s", &product->product_name); - g_variant_dict_lookup (&dict, "product-id", "s", &product->product_id); - g_variant_dict_lookup (&dict, "version", "s", &product->version); - g_variant_dict_lookup (&dict, "arch", "s", &product->arch); - g_variant_dict_lookup (&dict, "status", "s", &product->status); - g_variant_dict_lookup (&dict, "starts", "s", &product->starts); - g_variant_dict_lookup (&dict, "ends", "s", &product->ends); - - return g_steal_pointer (&product); - } - - static void --load_installed_products (CcSubscriptionDetailsDialog *self) -+reload_installed_products (CcSubscriptionDetailsDialog *self) - { - GVariantIter iter_array; - GVariant *child; - g_autoptr(GError) error = NULL; - g_autoptr(GVariant) installed_products_variant = NULL; - - installed_products_variant = g_dbus_proxy_get_cached_property (self->subscription_proxy, "InstalledProducts"); - if (installed_products_variant == NULL) - { - g_debug ("Unable to get InstalledProducts dbus property"); - return; - } - - g_ptr_array_set_size (self->products, 0); - - g_variant_iter_init (&iter_array, installed_products_variant); - while ((child = g_variant_iter_next_value (&iter_array)) != NULL) - { - g_autoptr(GVariant) product_variant = g_steal_pointer (&child); - g_ptr_array_add (self->products, parse_product_variant (product_variant)); - } - } - -+static void -+subscription_done_cb (GObject *source_object, -+ GAsyncResult *res, -+ gpointer user_data) -+{ -+ CcSubscriptionDetailsDialog *self = (CcSubscriptionDetailsDialog *) user_data; -+ g_autoptr(GVariant) results = NULL; -+ g_autoptr(GError) error = NULL; -+ -+ results = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), -+ res, -+ &error); -+ if (results == NULL) -+ { -+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) -+ return; -+ -+ g_dbus_error_strip_remote_error (error); -+ gtk_label_set_text (self->error_label, error->message); -+ gtk_revealer_set_reveal_child (self->notification_revealer, TRUE); -+ -+ gtk_spinner_stop (self->spinner); -+ -+ self->state = DIALOG_STATE_SUBSCRIBE; -+ dialog_reload (self); -+ return; -+ } -+ -+ gtk_spinner_stop (self->spinner); -+ -+ self->state = DIALOG_STATE_SHOW_DETAILS; -+ dialog_reload (self); -+} -+ -+static void -+header_subscribe_button_clicked_cb (CcSubscriptionDetailsDialog *self) -+{ -+ gtk_spinner_start (self->spinner); -+ -+ self->state = DIALOG_STATE_SUBSCRIBING; -+ dialog_reload (self); -+ -+ g_dbus_proxy_call (self->subscription_proxy, -+ "Attach", -+ NULL, -+ G_DBUS_CALL_FLAGS_NONE, -+ DBUS_TIMEOUT, -+ self->cancellable, -+ subscription_done_cb, -+ self); -+} -+ - static void - unregistration_done_cb (GObject *source_object, - GAsyncResult *res, - gpointer user_data) - { - CcSubscriptionDetailsDialog *self = (CcSubscriptionDetailsDialog *) user_data; - g_autoptr(GVariant) results = NULL; - g_autoptr(GError) error = NULL; - - results = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), - res, - &error); - if (results == NULL) - { - if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) - return; - - g_dbus_error_strip_remote_error (error); - gtk_label_set_text (self->error_label, error->message); - gtk_revealer_set_reveal_child (self->notification_revealer, TRUE); - - gtk_spinner_stop (self->spinner); - - self->state = DIALOG_STATE_UNREGISTER; - dialog_reload (self); - return; - } - - gtk_spinner_stop (self->spinner); - - gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_ACCEPT); - } - - static void - header_unregister_button_clicked_cb (CcSubscriptionDetailsDialog *self) - { - gtk_spinner_start (self->spinner); - - self->state = DIALOG_STATE_UNREGISTERING; - dialog_reload (self); - - g_dbus_proxy_call (self->subscription_proxy, - "Unregister", - NULL, - G_DBUS_CALL_FLAGS_NONE, - DBUS_TIMEOUT, - self->cancellable, - unregistration_done_cb, - self); - } - - static void - back_button_clicked_cb (CcSubscriptionDetailsDialog *self) - { - gtk_spinner_stop (self->spinner); - - self->state = DIALOG_STATE_SHOW_DETAILS; - dialog_reload (self); - } - -+static void -+subscribe_button_clicked_cb (CcSubscriptionDetailsDialog *self) -+{ -+ self->state = DIALOG_STATE_SUBSCRIBE; -+ dialog_reload (self); -+} -+ - static void - unregister_button_clicked_cb (CcSubscriptionDetailsDialog *self) - { - self->state = DIALOG_STATE_UNREGISTER; - dialog_reload (self); - } - - static void - dismiss_notification (CcSubscriptionDetailsDialog *self) - { - gtk_revealer_set_reveal_child (self->notification_revealer, FALSE); - } - - static void - cc_subscription_details_dialog_init (CcSubscriptionDetailsDialog *self) - { - gtk_widget_init_template (GTK_WIDGET (self)); - - self->products = g_ptr_array_new_with_free_func ((GDestroyNotify) product_data_free); - self->state = DIALOG_STATE_SHOW_DETAILS; - } - - static void - cc_subscription_details_dialog_dispose (GObject *obj) - { - CcSubscriptionDetailsDialog *self = (CcSubscriptionDetailsDialog *) obj; - - g_cancellable_cancel (self->cancellable); - g_clear_object (&self->cancellable); - g_clear_object (&self->subscription_proxy); - - G_OBJECT_CLASS (cc_subscription_details_dialog_parent_class)->dispose (obj); - } - - static void - cc_subscription_details_dialog_finalize (GObject *obj) - { - CcSubscriptionDetailsDialog *self = (CcSubscriptionDetailsDialog *) obj; - - g_clear_pointer (&self->products, g_ptr_array_unref); - - G_OBJECT_CLASS (cc_subscription_details_dialog_parent_class)->finalize (obj); - } - - static void - cc_subscription_details_dialog_class_init (CcSubscriptionDetailsDialogClass *klass) - { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - - object_class->dispose = cc_subscription_details_dialog_dispose; - object_class->finalize = cc_subscription_details_dialog_finalize; - - gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/info/cc-subscription-details-dialog.ui"); - - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, back_button); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, spinner); -+ gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, header_stack); -+ gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, header_subscribe_button); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, header_unregister_button); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, notification_revealer); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, error_label); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, stack); -+ gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, status_stack); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, products_box1); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, products_box2); -+ gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, products_box3); -+ gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, subscribe_button); -+ gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, separator); - gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, unregister_button); - - gtk_widget_class_bind_template_callback (widget_class, back_button_clicked_cb); -+ gtk_widget_class_bind_template_callback (widget_class, header_subscribe_button_clicked_cb); - gtk_widget_class_bind_template_callback (widget_class, header_unregister_button_clicked_cb); -+ gtk_widget_class_bind_template_callback (widget_class, subscribe_button_clicked_cb); - gtk_widget_class_bind_template_callback (widget_class, unregister_button_clicked_cb); - gtk_widget_class_bind_template_callback (widget_class, dismiss_notification); - } - - static void - on_dialog_cancelled (CcSubscriptionDetailsDialog *self) - { - gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_CLOSE); - } - - CcSubscriptionDetailsDialog * - cc_subscription_details_dialog_new (GDBusProxy *subscription_proxy, - GCancellable *cancellable) - { - CcSubscriptionDetailsDialog *self; - - self = g_object_new (CC_TYPE_SUBSCRIPTION_DETAILS_DIALOG, "use-header-bar", TRUE, NULL); - self->subscription_proxy = g_object_ref (subscription_proxy); - self->cancellable = g_object_ref (cancellable); - - g_signal_connect_object (G_OBJECT (self->cancellable), - "cancelled", - G_CALLBACK (on_dialog_cancelled), - self, - G_CONNECT_SWAPPED); - -- load_installed_products (self); - dialog_reload (self); - - return self; - } -diff --git a/panels/info/cc-subscription-details-dialog.ui b/panels/info/cc-subscription-details-dialog.ui -index 6f0b16930..6cdfc1220 100644 ---- a/panels/info/cc-subscription-details-dialog.ui -+++ b/panels/info/cc-subscription-details-dialog.ui -@@ -6,75 +6,106 @@ - True - True - dialog - Registration Details - 1 - - - True - False - False - - - True - True - True - center - - - - True - False - go-previous-symbolic - - - - - - -- -- _Unregister -+ - True -- True -- True -- True -- True -- False -- True -- center -- -- -+ False -+ slide-left-right -+ -+ -+ _Unregister -+ True -+ True -+ True -+ True -+ True -+ False -+ True -+ center -+ -+ -+ -+ -+ unregister -+ -+ -+ -+ -+ _Subscribe -+ True -+ True -+ True -+ True -+ True -+ False -+ True -+ center -+ -+ -+ -+ -+ subscribe -+ -+ - - - end - - - - - True - False - center - 6 - 6 - - - end - - - - - - - True - False - vertical - 0 - - - True - - -@@ -120,129 +151,275 @@ - Unable to reach developers.redhat.com. Please try again later. - - - - - - - True - start - - - - - True - window-close-symbolic - - - - - - - - - - - True - False - slide-left-right -+ -+ -+ True -+ vertical -+ 24 -+ 32 -+ 12 -+ 12 -+ -+ -+ True -+ False -+ -+ -+ True -+ False -+ This system is subscribed to receive software updates. -+ 45 -+ 45 -+ 0 -+ start -+ True -+ -+ -+ -+ fully-subscribed -+ -+ -+ -+ -+ True -+ False -+ This system lacks subscriptions to receive updates for some installed software. -+ 45 -+ 45 -+ 0 -+ start -+ True -+ -+ -+ -+ partly-subscribed -+ -+ -+ -+ -+ True -+ False -+ This system lacks subscriptions to receive software updates. -+ 45 -+ 45 -+ 0 -+ start -+ True -+ -+ -+ -+ not-subscribed -+ -+ -+ -+ -+ True -+ False -+ This system is registered to receive software updates. -+ 45 -+ 45 -+ 0 -+ start -+ True -+ -+ -+ -+ subscription-not-needed -+ -+ -+ -+ -+ True -+ False -+ This system has no supported software installed. -+ 45 -+ 45 -+ 0 -+ start -+ True -+ -+ -+ -+ no-installed-products -+ -+ -+ -+ -+ -+ -+ True -+ vertical -+ True -+ 6 -+ 6 -+ -+ -+ -+ -+ True -+ False -+ horizontal -+ 12 -+ end -+ -+ -+ _Unregister… -+ True -+ True -+ True -+ False -+ end -+ True -+ -+ -+ -+ -+ -+ -+ True -+ -+ -+ -+ -+ _Subscribe… -+ True -+ True -+ True -+ False -+ end -+ True -+ -+ -+ -+ -+ -+ -+ -+ -+ show-details -+ -+ - - - True - vertical - 24 - 32 - 32 - 20 - - - True - False -- Registration with Red Hat allows this system to receive software updates. -+ Subscribing with Red Hat will allow this system to receive software updates. - 45 - 45 - 0 - start - True -- - - - -- -+ - True - vertical - 6 - 6 - True - - -- -- -- _Unregister… -- True -- True -- True -- False -- end -- True -- -- -- -- - - -- show-details -+ subscribe - - - - - True - vertical - 24 - 32 - 32 - 20 - - - True - False - Warning: unregistering this system will result in it no longer receiving software updates. - 45 - 45 - 0 - start - True - - - -- -+ - True - vertical - 6 - 6 - True - - - - - unregister - - - - - - - False - True - 0 - - - - - - -diff --git a/panels/info/info-overview.ui b/panels/info/info-overview.ui -index e33ba399a..3ed79712a 100644 ---- a/panels/info/info-overview.ui -+++ b/panels/info/info-overview.ui -@@ -366,68 +366,91 @@ - - - - not-registered - - - - - True - False - horizontal - 12 - - - True - False - vertical - - - True - False - 0 - Registered System - - - - - - - -- -+ - True - False -- 0 -- System is registered and able to receive software updates. -- -- -- -+ -+ -+ True -+ False -+ 0 -+ System is registered and able to receive software updates. -+ -+ -+ -+ -+ -+ updates -+ -+ -+ -+ -+ True -+ False -+ 0 -+ System is registered but is unable to receive all software updates. -+ -+ -+ -+ -+ -+ no-updates -+ -+ - - - - - - - _Details - True - True - True - False - True - end - True - - - - - registered - - - - - - - True - - - - --- -2.28.0 - diff --git a/0004-net-device-wifi-Decode-SAE-AP-security.patch b/0004-net-device-wifi-Decode-SAE-AP-security.patch deleted file mode 100644 index 6cfeb0d..0000000 --- a/0004-net-device-wifi-Decode-SAE-AP-security.patch +++ /dev/null @@ -1,42 +0,0 @@ -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/0004-thunderbolt-move-to-the-Devices-page.patch b/0004-thunderbolt-move-to-the-Devices-page.patch deleted file mode 100644 index 23659fa..0000000 --- a/0004-thunderbolt-move-to-the-Devices-page.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 2d1da22e17f703e27ff1b3177e35a54aa0c3aecc Mon Sep 17 00:00:00 2001 -From: Christian Kellner -Date: Fri, 13 Apr 2018 16:03:21 +0200 -Subject: [PATCH 4/4] thunderbolt: move to the 'Devices' page - -The 'Devices' page is a fitting place for the thunderbolt, being -an IO technology. It is expected that people that need to go to -that page will be sent there via a gnome-shell notification, so -there is no need for it to be on the main page. -Ok'ed by the design team (jimmac). ---- - panels/thunderbolt/gnome-thunderbolt-panel.desktop.in.in | 2 +- - shell/cc-panel-list.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/panels/thunderbolt/gnome-thunderbolt-panel.desktop.in.in b/panels/thunderbolt/gnome-thunderbolt-panel.desktop.in.in -index db2477e45a74..abd317341bfd 100644 ---- a/panels/thunderbolt/gnome-thunderbolt-panel.desktop.in.in -+++ b/panels/thunderbolt/gnome-thunderbolt-panel.desktop.in.in -@@ -7,7 +7,7 @@ Terminal=false - Type=Application - NoDisplay=true - StartupNotify=true --Categories=GNOME;GTK;Settings;X-GNOME-Settings-Panel;HardwareSettings;X-GNOME-DevicesSettings;X-GNOME-ConnectivitySettings; -+Categories=GNOME;GTK;Settings;X-GNOME-Settings-Panel;HardwareSettings;X-GNOME-DevicesSettings; - OnlyShowIn=GNOME;Unity; - X-GNOME-Bugzilla-Bugzilla=GNOME - X-GNOME-Bugzilla-Product=gnome-control-center -diff --git a/shell/cc-panel-list.c b/shell/cc-panel-list.c -index 99d8a91144ad..f5b83509d646 100644 ---- a/shell/cc-panel-list.c -+++ b/shell/cc-panel-list.c -@@ -276,7 +276,6 @@ static const gchar * const panel_order[] = { - "wifi", - "mobile-broadband", - "bluetooth", -- "thunderbolt", - "background", - "notifications", - "search", -@@ -295,6 +294,7 @@ static const gchar * const panel_order[] = { - "mouse", - "printers", - "removable-media", -+ "thunderbolt", - "wacom", - "color", - --- -2.17.0 - diff --git a/0005-network-complete-SAE-support.patch b/0005-network-complete-SAE-support.patch deleted file mode 100644 index d3ffe1d..0000000 --- a/0005-network-complete-SAE-support.patch +++ /dev/null @@ -1,477 +0,0 @@ -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/0006-Add-support-for-Enhanced-Open-WiFi-security.patch b/0006-Add-support-for-Enhanced-Open-WiFi-security.patch deleted file mode 100644 index bd73588..0000000 --- a/0006-Add-support-for-Enhanced-Open-WiFi-security.patch +++ /dev/null @@ -1,114 +0,0 @@ -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/0007-network-Fix-connection-selection-and-SSID-display-fo.patch b/0007-network-Fix-connection-selection-and-SSID-display-fo.patch deleted file mode 100644 index 0bfa761..0000000 --- a/0007-network-Fix-connection-selection-and-SSID-display-fo.patch +++ /dev/null @@ -1,216 +0,0 @@ -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/0008-network-Fix-saving-passwords-for-non-wifi-connection.patch b/0008-network-Fix-saving-passwords-for-non-wifi-connection.patch deleted file mode 100644 index 324de72..0000000 --- a/0008-network-Fix-saving-passwords-for-non-wifi-connection.patch +++ /dev/null @@ -1,51 +0,0 @@ -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/Update-translations.patch b/Update-translations.patch deleted file mode 100644 index aa49149..0000000 --- a/Update-translations.patch +++ /dev/null @@ -1,25594 +0,0 @@ -From 069b43926986c9f935871c6c82c5c61e7d60651d Mon Sep 17 00:00:00 2001 -From: Kalev Lember -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 ++++++++++++++++++++++++++++----------------------- - 4 files changed, 7124 insertions(+), 5989 deletions(-) - -diff --git a/po/fr.po b/po/fr.po -index 7c55fd2aa..b71cd5c3f 100644 ---- a/po/fr.po -+++ b/po/fr.po -@@ -35,9 +35,8 @@ - msgid "" - msgstr "" - "Project-Id-Version: gnome-control-center HEAD\n" --"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" --"issues\n" --"POT-Creation-Date: 2018-03-01 16:23+0000\n" -+"Report-Msgid-Bugs-To: \n" -+"POT-Creation-Date: 2021-02-12 14:19+0100\n" - "PO-Revision-Date: 2018-03-01 20:03+0100\n" - "Last-Translator: Alain Lojewski \n" - "Language-Team: GNOME French Team \n" -@@ -127,13 +126,13 @@ msgstr "Dossier personnel" - #: panels/background/cc-background-chooser-dialog.c:555 - #, c-format - msgid "You can add images to your %s folder and they will show up here" --msgstr "" --"Vous pouvez ajouter des images dans votre dossier %s où elles s’afficheront" -+msgstr "Vous pouvez ajouter des images dans votre dossier %s où elles s’afficheront" - - #: 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 -@@ -144,15 +143,15 @@ msgstr "" - #: 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 "_Annuler" - -@@ -215,9 +214,7 @@ msgstr "Bluetooth désactivé" - - #: panels/bluetooth/cc-bluetooth-panel.c:331 - msgid "Turn on to connect devices and receive file transfers." --msgstr "" --"Activez pour connecter des périphériques et recevoir des transfert de " --"fichiers." -+msgstr "Activez pour connecter des périphériques et recevoir des transfert de fichiers." - - #: panels/bluetooth/cc-bluetooth-panel.c:332 - msgid "Airplane Mode is on" -@@ -237,14 +234,10 @@ msgstr "Désactivez le mode avion pour activer le 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 "Autres périphériques" -- - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Active/désactive le Bluetooth et connecte vos périphériques" -@@ -262,8 +255,7 @@ msgstr "partage;partager;bluetooth;obex;" - #. TRANSLATORS: The user has to attach the sensor to the screen - #: panels/color/cc-color-calibrate.c:361 - msgid "Place your calibration device over the square and press “Start”" --msgstr "" --"Posez votre sonde d’étalonnage sur le carré et appuyez sur « Démarrer »" -+msgstr "Posez votre sonde d’étalonnage sur le carré et appuyez sur « Démarrer »" - - #. TRANSLATORS: Some calibration devices need the user to move a - #. * dial or switch manually. We also show a picture showing them -@@ -271,9 +263,7 @@ msgstr "" - #: panels/color/cc-color-calibrate.c:367 - msgid "" - "Move your calibration device to the calibrate position and press “Continue”" --msgstr "" --"Déplacez votre sonde d’étalonnage vers l’emplacement à étalonner et appuyez " --"sur « Continuer »" -+msgstr "Déplacez votre sonde d’étalonnage vers l’emplacement à étalonner et appuyez sur « Continuer »" - - #. TRANSLATORS: Some calibration devices need the user to move a - #. * dial or switch manually. We also show a picture showing them -@@ -281,9 +271,7 @@ msgstr "" - #: panels/color/cc-color-calibrate.c:373 - msgid "" - "Move your calibration device to the surface position and press “Continue”" --msgstr "" --"Déplacez votre sonde d’étalonnage à l’aplomb de l’emplacement à étalonner et " --"appuyez sur « Continuer »" -+msgstr "Déplacez votre sonde d’étalonnage à l’aplomb de l’emplacement à étalonner et appuyez sur « Continuer »" - - #. TRANSLATORS: on some hardware e.g. Lenovo W700 the sensor - #. * is built into the palmrest and we need to fullscreen the -@@ -456,14 +444,11 @@ msgstr "Saisissez cet URL." - - #: panels/color/cc-color-panel.c:925 - msgid "Restart this computer and boot your normal operating system." --msgstr "" --"Redémarrez cet ordinateur et lancez votre sysème d’exploitation habituel." -+msgstr "Redémarrez cet ordinateur et lancez votre sysème d’exploitation habituel." - - #: panels/color/cc-color-panel.c:926 - msgid "Type the URL into your browser to download and install the profile." --msgstr "" --"Saisissez cet URL dans votre navigateur pour télécharger et installer le " --"profil." -+msgstr "Saisissez cet URL dans votre navigateur pour télécharger et installer le profil." - - #. TRANSLATORS: this is the dialog to save the ICC profile - #: panels/color/cc-color-panel.c:960 -@@ -485,15 +470,12 @@ msgstr "Créer un profil de couleur pour le périphérique sélectionné" - msgid "" - "The measuring instrument is not detected. Please check it is turned on and " - "correctly connected." --msgstr "" --"L’instrument de mesure n’est pas détecté. Vérifiez qu’il est allumé et " --"connecté correctement." -+msgstr "L’instrument de mesure n’est pas détecté. Vérifiez qu’il est allumé et connecté correctement." - - #. TRANSLATORS: this is when the button is insensitive - #: panels/color/cc-color-panel.c:1374 - msgid "The measuring instrument does not support printer profiling." --msgstr "" --"L’instrument de mesure ne prend pas en charge les profils d’imprimante." -+msgstr "L’instrument de mesure ne prend pas en charge les profils d’imprimante." - - #. TRANSLATORS: this is when the button is insensitive - #: panels/color/cc-color-panel.c:1385 -@@ -609,10 +591,7 @@ msgid "" - "Calibration will produce a profile that you can use to color manage your " - "screen. The longer you spend on calibration, the better the quality of the " - "color profile." --msgstr "" --"L’étalonnage va générer un profil que vous pourrez utiliser pour gérer la " --"couleur de votre écran. Plus l’étalonnage est long, meilleure est la qualité " --"du profil de couleur." -+msgstr "L’étalonnage va générer un profil que vous pourrez utiliser pour gérer la couleur de votre écran. Plus l’étalonnage est long, meilleure est la qualité du profil de couleur." - - #: panels/color/color.ui:38 - msgid "" -@@ -653,9 +632,7 @@ msgstr "Type d’écran" - msgid "" - "Select a display target white point. Most displays should be calibrated to a " - "D65 illuminant." --msgstr "" --"Sélectionnez un point blanc cible pour l’écran. La plupart des écrans " --"doivent être étalonnés à l’illuminant D65." -+msgstr "Sélectionnez un point blanc cible pour l’écran. La plupart des écrans doivent être étalonnés à l’illuminant D65." - - #: panels/color/color.ui:278 - msgid "Profile Whitepoint" -@@ -665,17 +642,13 @@ msgstr "Point blanc du profil" - msgid "" - "Please set the display to a brightness that is typical for you. Color " - "management will be most accurate at this brightness level." --msgstr "" --"Réglez la luminosité de l’écran à une valeur qui vous est habituelle. La " --"gestion de couleur n’en sera que plus fiable." -+msgstr "Réglez la luminosité de l’écran à une valeur qui vous est habituelle. La gestion de couleur n’en sera que plus fiable." - - #: panels/color/color.ui:307 - msgid "" - "Alternatively, you can use the brightness level used with one of the other " - "profiles for this device." --msgstr "" --"Vous pouvez aussi utiliser la luminosité déjà définie dans d’autres profils " --"pour ce périphérique." -+msgstr "Vous pouvez aussi utiliser la luminosité déjà définie dans d’autres profils pour ce périphérique." - - #: panels/color/color.ui:318 - msgid "Display Brightness" -@@ -685,9 +658,7 @@ msgstr "Luminosité de l’écran" - msgid "" - "You can use a color profile on different computers, or even create profiles " - "for different lighting conditions." --msgstr "" --"Vous pouvez utiliser le même profil de couleurs sur différents ordinateurs " --"et aussi créer des profils adaptés à différentes conditions d’éclairage." -+msgstr "Vous pouvez utiliser le même profil de couleurs sur différents ordinateurs et aussi créer des profils adaptés à différentes conditions d’éclairage." - - #: panels/color/color.ui:348 - msgid "Profile Name:" -@@ -722,10 +693,7 @@ msgid "" - "You may find these instructions on how to use the profile on GNU/Linux, Apple OS X and Microsoft Windows systems useful." --msgstr "" --"Ici, vous pouvez consulter d’utiles conseils sur l’utilisation d’un profil " --"GNU/Linux, Apple OS X et Microsoft Windows." -+msgstr "Ici, vous pouvez consulter d’utiles conseils sur l’utilisation d’un profil GNU/Linux, Apple OS X et Microsoft Windows." - - #: panels/color/color.ui:607 panels/user-accounts/um-fingerprint-dialog.c:720 - msgid "Summary" -@@ -750,15 +718,11 @@ msgstr "_Ajouter" - msgid "" - "Problems detected. The profile may not work correctly. Show " - "details." --msgstr "" --"Il y a un problème. Il se peut que le profil ne fonctionne pas correctement. " --"Afficher les détails" -+msgstr "Il y a un problème. Il se peut que le profil ne fonctionne pas correctement. Afficher les détails" - - #: panels/color/color.ui:807 - msgid "Each device needs an up to date color profile to be color managed." --msgstr "" --"Chaque périphérique a besoin d’un profil de couleur à jour pour la prise en " --"charge des couleurs." -+msgstr "Chaque périphérique a besoin d’un profil de couleur à jour pour la prise en charge des couleurs." - - #: panels/color/color.ui:829 - msgid "Learn more" -@@ -900,9 +864,7 @@ msgstr "Couleur" - #: panels/color/gnome-color-panel.desktop.in.in:4 - msgid "" - "Calibrate the color of your devices, such as displays, cameras or printers" --msgstr "" --"Étalonne la couleur de vos périphériques, comme les écrans, les appareils " --"photos ou les imprimantes" -+msgstr "Étalonne la couleur de vos périphériques, comme les écrans, les appareils photos ou les imprimantes" - - #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! - #: panels/color/gnome-color-panel.desktop.in.in:7 -@@ -1143,100 +1105,98 @@ msgstr "Modifier la date et l’heure du système" - msgid "To change time or date settings, you need to authenticate." - msgstr "Vous devez vous authentifier pour modifier la date ou l’heure." - --#: panels/display/cc-display-panel.c:729 -+#: panels/display/cc-display-panel.c:732 - msgctxt "Display rotation" - msgid "Landscape" - msgstr "Paysage" - --#: panels/display/cc-display-panel.c:732 -+#: panels/display/cc-display-panel.c:735 - msgctxt "Display rotation" - msgid "Portrait Right" - msgstr "Portrait sur la droite" - --#: panels/display/cc-display-panel.c:735 -+#: panels/display/cc-display-panel.c:738 - msgctxt "Display rotation" - msgid "Portrait Left" - msgstr "Portrait sur la gauche" - --#: panels/display/cc-display-panel.c:738 -+#: panels/display/cc-display-panel.c:741 - msgctxt "Display rotation" - msgid "Landscape (flipped)" - msgstr "Paysage (retourné)" - - #. 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 "Orientation" - --#: 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 "Résolution" - --#: panels/display/cc-display-panel.c:958 -+#: panels/display/cc-display-panel.c:961 - msgid "Refresh Rate" - msgstr "Taux de rafraîchissement" - --#: panels/display/cc-display-panel.c:1095 -+#: panels/display/cc-display-panel.c:1098 - msgid "Scale" - msgstr "Échelle" - --#: panels/display/cc-display-panel.c:1148 -+#: panels/display/cc-display-panel.c:1151 - msgid "Adjust for TV" - msgstr "Adapter aux téléviseurs" - --#: panels/display/cc-display-panel.c:1410 -+#: panels/display/cc-display-panel.c:1413 - msgid "Primary Display" - msgstr "Écran principal" - --#: panels/display/cc-display-panel.c:1439 -+#: panels/display/cc-display-panel.c:1442 - msgid "Display Arrangement" - msgstr "Disposition des écrans" - --#: 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." --msgstr "" --"Faites glisser vos écrans pour apparier votre configuration. La barre " --"supérieure se trouve sur l’écran principal." -+msgstr "Faites glisser vos écrans pour apparier votre configuration. La barre supérieure se trouve sur l’écran principal." - --#: panels/display/cc-display-panel.c:1863 -+#: panels/display/cc-display-panel.c:1866 - msgid "Display Mode" - msgstr "Mode d’affichage" - --#: panels/display/cc-display-panel.c:1879 -+#: panels/display/cc-display-panel.c:1882 - msgid "Join Displays" - msgstr "Joindre les écrans" - --#: panels/display/cc-display-panel.c:1882 -+#: panels/display/cc-display-panel.c:1885 - msgid "Mirror" - msgstr "Cloner" - --#: panels/display/cc-display-panel.c:1885 -+#: panels/display/cc-display-panel.c:1888 - msgid "Single Display" - msgstr "Écran unique" - --#: panels/display/cc-display-panel.c:2590 -+#: panels/display/cc-display-panel.c:2593 - msgid "Apply Changes?" - msgstr "Appliquer les changements ?" - --#: 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 "_Appliquer" - --#: 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:1991 panels/power/cc-power-panel.c:1998 -+#: 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 -@@ -1246,9 +1206,9 @@ msgstr "%.2lf Hz" - msgid "On" - msgstr "Activé" - --#: 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:1985 panels/power/cc-power-panel.c:1996 -+#: 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 -@@ -1262,11 +1222,11 @@ msgstr "Activé" - msgid "Off" - msgstr "Désactivé" - --#: panels/display/cc-display-panel.c:3216 -+#: panels/display/cc-display-panel.c:3219 - msgid "_Night Light" - msgstr "Mode _nuit" - --#: panels/display/cc-display-panel.c:3281 -+#: panels/display/cc-display-panel.c:3284 - msgid "Could not get screen information" - msgstr "Impossible d’obtenir les informations concernant l’écran" - -@@ -1284,9 +1244,7 @@ msgstr "Désactivé temporairement jusqu’à demain" - msgid "" - "Night light makes the screen color warmer. This can help to prevent eye " - "strain and sleeplessness." --msgstr "" --"Le mode nuit adoucit les couleurs bleues de l’écran. Il peut réduire la " --"fatigue des yeux et les risques d’insomnies." -+msgstr "Le mode nuit adoucit les couleurs bleues de l’écran. Il peut réduire la fatigue des yeux et les risques d’insomnies." - - #. This is the redshift functionality where we suppress blue light when the sun has gone down - #: panels/display/display.ui:171 panels/display/display.ui:567 -@@ -1350,14 +1308,13 @@ msgstr "preferences-desktop-display" - msgid "" - "Panel;Projector;xrandr;Screen;Resolution;Refresh;Monitor;Night;Light;Blue;" - "redshift;color;sunset;sunrise;" --msgstr "" --"Panneau;Projecteur;xrandr;Écran;Définition;Résolution;Rafraîchissement;" --"Moniteur;Nuit;Éclairage;Lumière;Bleue;redshift;décalage;spectral;couleur;" --"lever;coucher;" -+msgstr "Panneau;Projecteur;xrandr;Écran;Définition;Résolution;Rafraîchissement;Moniteur;Nuit;Éclairage;Lumière;Bleue;redshift;décalage;spectral;couleur;lever;coucher;" - - #. 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 "Inconnu" - -@@ -1365,24 +1322,24 @@ msgstr "Inconnu" - #. * 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 ; (identifiant de construction : %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-bit" - - #. 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-bit" - --#: panels/info/cc-info-overview-panel.c:775 -+#: panels/info/cc-info-overview-panel.c:782 - #, c-format - msgid "Version %s" - msgstr "Version %s" -@@ -1417,8 +1374,7 @@ msgstr "Sélectionnez une application à lancer lorsqu’un baladeur est connect - - #: panels/info/cc-info-removable-media-panel.c:427 - msgid "Select an application to run when a camera is connected" --msgstr "" --"Sélectionnez une application à lancer lorsqu’un appareil photo est connecté" -+msgstr "Sélectionnez une application à lancer lorsqu’un appareil photo est connecté" - - #: panels/info/cc-info-removable-media-panel.c:428 - msgid "Select an application for software CDs" -@@ -1477,6 +1433,210 @@ msgstr "CD vidéo" - msgid "Windows software" - msgstr "Logiciels Windows" - -+#: panels/info/cc-subscription-details-dialog.c:125 -+msgid "Subscribed" -+msgstr "Abonné" -+ -+#: panels/info/cc-subscription-details-dialog.c:127 -+msgid "No Specific Subscription" -+msgstr "Pas d'abonnement spécifique" -+ -+#: panels/info/cc-subscription-details-dialog.c:129 -+msgid "Not Subscribed" -+msgstr "Non abonné" -+ -+#: panels/info/cc-subscription-details-dialog.c:138 -+msgid "Product Name" -+msgstr "Nom du produit" -+ -+#: panels/info/cc-subscription-details-dialog.c:139 -+msgid "Product ID" -+msgstr "ID Produit" -+ -+#: panels/info/cc-subscription-details-dialog.c:140 -+msgid "Version" -+msgstr "Version" -+ -+#: panels/info/cc-subscription-details-dialog.c:141 -+msgid "Arch" -+msgstr "Arch" -+ -+#: panels/info/cc-subscription-details-dialog.c:142 -+msgid "Status" -+msgstr "Statut" -+ -+#: panels/info/cc-subscription-details-dialog.c:146 -+msgid "Starts" -+msgstr "Démarre" -+ -+#: panels/info/cc-subscription-details-dialog.c:147 -+msgid "Ends" -+msgstr "Termine" -+ -+#: 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 "Informations d’inscription" -+ -+#: panels/info/cc-subscription-details-dialog.c:188 -+msgid "Subscribe System" -+msgstr "S’abonner au système " -+ -+#: panels/info/cc-subscription-details-dialog.c:201 -+msgid "Looking For Available Subscriptions…" -+msgstr "Tous les abonnements disponibles..." -+ -+#: panels/info/cc-subscription-details-dialog.c:215 -+msgid "Unregister System" -+msgstr "Annulation de l’enregistrement du système" -+ -+#: panels/info/cc-subscription-details-dialog.c:229 -+msgid "Unregistering System…" -+msgstr "Annulation de l’enregistrement du système ..." -+ -+#. 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 "Aucun produit installé n’a été détecté." -+ -+#: panels/info/cc-subscription-details-dialog.ui:42 -+msgid "_Unregister" -+msgstr "_Annulation" -+ -+#: panels/info/cc-subscription-details-dialog.ui:63 -+msgid "_Subscribe" -+msgstr "_S’abonner" -+ -+#: panels/info/cc-subscription-details-dialog.ui:138 -+msgid "Failed to Unregister System" -+msgstr "L’annulation de l’enregistrement du système a échoué" -+ -+#: panels/info/cc-subscription-details-dialog.ui:197 -+msgid "This system is subscribed to receive software updates." -+msgstr "Ce système est lié à un niveau d’abonnement qui permet de recevoir les mises à jour des logiciels." -+ -+#: panels/info/cc-subscription-details-dialog.ui:215 -+msgid "" -+"This system lacks subscriptions to receive updates for some installed " -+"software." -+msgstr "Ce système ne dispose pas d’un niveau d'abonnement qui permette de recevoir les mises à jour de certains logiciels installés." -+ -+#: panels/info/cc-subscription-details-dialog.ui:233 -+msgid "This system lacks subscriptions to receive software updates." -+msgstr "Ce système n’est pas lié à un niveau d’abonnement qui permette de recevoir des mises à jour des logiciels." -+ -+#: panels/info/cc-subscription-details-dialog.ui:251 -+msgid "This system is registered to receive software updates." -+msgstr "Ce système est enregistré pour recevoir les mises à jour des logiciels." -+ -+#: panels/info/cc-subscription-details-dialog.ui:269 -+msgid "This system has no supported software installed." -+msgstr "Ce système n'a pas de logiciel supporté installé." -+ -+#: panels/info/cc-subscription-details-dialog.ui:303 -+msgid "_Unregister…" -+msgstr "_Annulation..." -+ -+#: panels/info/cc-subscription-details-dialog.ui:324 -+msgid "_Subscribe…" -+msgstr "_S’abonner..." -+ -+#: panels/info/cc-subscription-details-dialog.ui:357 -+msgid "" -+"Subscribing with Red Hat will allow this system to receive software updates." -+msgstr "L'abonnement à Red Hat permettra à ce système de recevoir des mises à jour de logiciels." -+ -+#: panels/info/cc-subscription-details-dialog.ui:391 -+msgid "" -+"Warning: unregistering this system will result in it no longer receiving " -+"software updates." -+msgstr "Attention : si vous désenregistrez ce système, il ne recevra plus les mises à jour des logiciels." -+ -+#: panels/info/cc-subscription-register-dialog.c:81 -+#: panels/info/cc-subscription-register-dialog.ui:9 -+msgid "Register System" -+msgstr "Enregistrement du système" -+ -+#: panels/info/cc-subscription-register-dialog.c:88 -+msgid "Registering System…" -+msgstr "Enregistrement du système ..." -+ -+#: panels/info/cc-subscription-register-dialog.ui:37 -+msgid "_Register" -+msgstr "_Enregistrer" -+ -+#: panels/info/cc-subscription-register-dialog.ui:107 -+msgid "Failed to Register System" -+msgstr "L’enregistrement du système a échoué" -+ -+#: panels/info/cc-subscription-register-dialog.ui:159 -+msgid "Register this system with Red Hat to receive software updates." -+msgstr "Ce système est enregistré avec Red Hat pour recevoir les mises à jour des logiciels." -+ -+#: panels/info/cc-subscription-register-dialog.ui:179 -+msgid "Registration Server" -+msgstr "Serveur d'enregistrement" -+ -+#: 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 "Adresse personnalisée" -+ -+#: panels/info/cc-subscription-register-dialog.ui:236 -+msgid "_URL" -+msgstr "_URL" -+ -+#: panels/info/cc-subscription-register-dialog.ui:270 -+msgid "Registration Type" -+msgstr "Type d'enregistrement" -+ -+#: panels/info/cc-subscription-register-dialog.ui:289 -+msgid "Red Hat Account" -+msgstr "Compte Red Hat" -+ -+#: panels/info/cc-subscription-register-dialog.ui:302 -+msgid "Activation Keys" -+msgstr "Clé d'activation" -+ -+#: 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 "_Mot de passe" -+ -+#: panels/info/cc-subscription-register-dialog.ui:427 -+#: panels/info/cc-subscription-register-dialog.ui:540 -+msgid "_Organization" -+msgstr "_Organisation" -+ -+#: 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 "Entrez la ou les clés d'activation séparées par des virgules. Si les clés d'activation ont des paramètres contradictoires, la clé la plus à droite sera priorisée." -+ -+#: panels/info/cc-subscription-register-dialog.ui:508 -+msgid "_Activation Keys" -+msgstr "_Clé d'activation" -+ - #: panels/info/gnome-default-apps-panel.desktop.in.in:3 - msgid "Default Applications" - msgstr "Applications par défaut" -@@ -1517,10 +1677,7 @@ msgstr "help-about" - msgid "" - "device;system;information;memory;processor;version;default;application;" - "preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;" --msgstr "" --"périphérique;système;information;mémoire;processeur;version;défaut;" --"application;préféré;cd;dvd;usb;audio;vidéo;disque;amovible;média;exécution " --"automatique;" -+msgstr "périphérique;système;information;mémoire;processeur;version;défaut;application;préféré;cd;dvd;usb;audio;vidéo;disque;amovible;média;exécution automatique;" - - #: panels/info/gnome-removable-media-panel.desktop.in.in:3 - msgid "Removable Media" -@@ -1540,9 +1697,7 @@ msgstr "media-removable" - msgid "" - "device;system;default;application;preferred;cd;dvd;usb;audio;video;disc;" - "removable;media;autorun;" --msgstr "" --"périphérique;système;par défaut;application;préférée;cd;dvd;usb;audio;vidéo;" --"disque;amovible;média;exécution automatique;" -+msgstr "périphérique;système;par défaut;application;préférée;cd;dvd;usb;audio;vidéo;disque;amovible;média;exécution automatique;" - - #: panels/info/info-default-apps.ui:31 - msgid "_Web" -@@ -1568,47 +1723,70 @@ msgstr "_Vidéos" - msgid "_Photos" - msgstr "_Photos" - --#: panels/info/info-overview.ui:58 -+#: panels/info/info-overview.ui:61 - msgid "Device name" - msgstr "Nom du périphérique" - --#: panels/info/info-overview.ui:74 -+#: panels/info/info-overview.ui:77 - msgid "Memory" - msgstr "Mémoire" - --#: panels/info/info-overview.ui:90 -+#: panels/info/info-overview.ui:93 - msgid "Processor" - msgstr "Processeur" - --#: panels/info/info-overview.ui:106 -+#: panels/info/info-overview.ui:109 - msgid "Graphics" - msgstr "Carte graphique" - --#. To translators: this field contains the distro name and version --#: panels/info/info-overview.ui:121 --msgid "OS name" --msgstr "Nom du système d’exploitation" -- - #. To translators: this field contains the distro type --#: panels/info/info-overview.ui:137 -+#: panels/info/info-overview.ui:140 - msgid "OS type" - msgstr "Type de système d’exploitation" - --#: panels/info/info-overview.ui:153 -+#: panels/info/info-overview.ui:156 - msgid "Virtualization" - msgstr "Virtualisation" - --#: panels/info/info-overview.ui:169 -+#: panels/info/info-overview.ui:172 - msgid "Disk" - msgstr "Disque" - --#: panels/info/info-overview.ui:274 -+#: panels/info/info-overview.ui:277 - msgid "Calculating…" - msgstr "Calcul en cours…" - --#: panels/info/info-overview.ui:314 --msgid "Check for updates" --msgstr "Recherche de mises à jour" -+#: panels/info/info-overview.ui:333 -+msgid "System Not Registered" -+msgstr "Le système n'est pas enregistré" -+ -+#: panels/info/info-overview.ui:345 -+msgid "Register this system to receive software updates." -+msgstr "Enregistrez ce système pour recevoir les mises à jour du logiciel." -+ -+#: panels/info/info-overview.ui:355 -+msgid "_Register…" -+msgstr "_Enregistrer..." -+ -+#: panels/info/info-overview.ui:388 -+msgid "Registered System" -+msgstr "Système enregistré" -+ -+#: panels/info/info-overview.ui:404 -+msgid "System is registered and able to receive software updates." -+msgstr "Ce système est enregistré et en mesure de recevoir les mises à jour des logiciels." -+ -+#: panels/info/info-overview.ui:418 -+msgid "System is registered but is unable to receive all software updates." -+msgstr "Ce système est enregistré mais n’est pas en mesure de recevoir les mises à jour des logiciels." -+ -+#: panels/info/info-overview.ui:433 -+msgid "_Details" -+msgstr "_Détails" -+ -+#: panels/info/info-overview.ui:457 -+msgid "_View Updates" -+msgstr "_Afficher les détails des mises à jour" - - #: panels/info/info-removable-media.ui:43 - msgid "Select how media should be handled" -@@ -1714,8 +1892,8 @@ msgstr "Lanceurs" - msgid "Launch help browser" - msgstr "Démarrer le navigateur d’aide" - --#: 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 "Paramètres" -@@ -1741,6 +1919,11 @@ msgstr "Dossier personnel" - msgid "Search" - msgstr "Recherche" - -+#: panels/keyboard/01-launchers.xml.in:16 -+msgctxt "keybinding" -+msgid "Search" -+msgstr "Recherche" -+ - #: panels/keyboard/01-screenshot.xml.in:2 - msgid "Screenshots" - msgstr "Captures d’écran" -@@ -1861,8 +2044,7 @@ msgstr "Touche de composition" - - #: panels/keyboard/cc-keyboard-option.c:355 - msgid "Modifiers-only switch to next source" --msgstr "" --"Avec les touches de modification seules, basculer vers la source suivante" -+msgstr "Avec les touches de modification seules, basculer vers la source suivante" - - #: panels/keyboard/cc-keyboard-panel.c:181 - msgid "Reset All Shortcuts?" -@@ -1872,9 +2054,7 @@ msgstr "Réinitialiser tous les raccourcis ?" - msgid "" - "Resetting the shortcuts may affect your custom shortcuts. This cannot be " - "undone." --msgstr "" --"Réinitialiser tous les raccourcis peut aussi affecter vos raccourcis " --"personnalisés. Cette action est irréversible." -+msgstr "Réinitialiser tous les raccourcis peut aussi affecter vos raccourcis personnalisés. Cette action est irréversible." - - #: panels/keyboard/cc-keyboard-panel.c:188 - #: panels/keyboard/shortcut-editor.ui:346 -@@ -1896,8 +2076,7 @@ msgstr "Réinitialiser le raccourci à sa valeur par défaut" - msgid "" - "%s is already being used for %s. If you replace it, %s will be " - "disabled" --msgstr "" --"%s est déjà utilisé pour %s. Si vous le remplacez, %s sera désactivé" -+msgstr "%s est déjà utilisé pour %s. Si vous le remplacez, %s sera désactivé" - - #: panels/keyboard/cc-keyboard-shortcut-editor.c:583 - msgid "Set Custom Shortcut" -@@ -1923,9 +2102,7 @@ msgstr "Clavier" - - #: panels/keyboard/gnome-keyboard-panel.desktop.in.in:4 - msgid "View and change keyboard shortcuts and set your typing preferences" --msgstr "" --"Afficher, modifier les raccourcis clavier et définir vos préférences de " --"saisie" -+msgstr "Afficher, modifier les raccourcis clavier et définir vos préférences de saisie" - - #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! - #: panels/keyboard/gnome-keyboard-panel.desktop.in.in:7 -@@ -1936,9 +2113,7 @@ msgstr "input-keyboard" - #: panels/keyboard/gnome-keyboard-panel.desktop.in.in:19 - msgid "" - "Shortcut;Workspace;Window;Resize;Zoom;Contrast;Input;Source;Lock;Volume;" --msgstr "" --"Raccourci;Espace de travail;Fenêtre;Redimensionner;Zoom;Contraste;Saisie;" --"Source;Verrouiller;Volume;" -+msgstr "Raccourci;Espace de travail;Fenêtre;Redimensionner;Zoom;Contraste;Saisie;Source;Verrouiller;Volume;" - - #: panels/keyboard/gnome-keyboard-panel.ui:67 panels/region/input-options.ui:68 - #: shell/cc-application.c:255 -@@ -1963,9 +2138,7 @@ msgstr "Essayez une autre recherche" - - #: panels/keyboard/shortcut-editor.ui:68 panels/keyboard/shortcut-editor.ui:318 - msgid "Press Esc to cancel or Backspace to reset the keyboard shortcut." --msgstr "" --"Appuyer sur Échap pour annuler ou sur Retour arrière pour réinitialiser le " --"raccourci clavier." -+msgstr "Appuyer sur Échap pour annuler ou sur Retour arrière pour réinitialiser le raccourci clavier." - - #: panels/keyboard/shortcut-editor.ui:156 panels/printers/details-dialog.ui:38 - #: panels/sound/gvc-mixer-dialog.c:1480 -@@ -2009,7 +2182,7 @@ msgstr "Remplacer" - msgid "Set" - msgstr "Définir" - --#: 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 "Tester vos p_aramètres" - -@@ -2020,8 +2193,7 @@ msgstr "Sou­ris et pavé tac­tile" - #: panels/mouse/gnome-mouse-panel.desktop.in.in:4 - msgid "" - "Change your mouse or touchpad sensitivity and select right or left-handed" --msgstr "" --"Modifier la sensibilité du pavé tactile et choisir entre droitier ou gaucher" -+msgstr "Modifier la sensibilité du pavé tactile et choisir entre droitier ou gaucher" - - #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! - #: panels/mouse/gnome-mouse-panel.desktop.in.in:7 -@@ -2043,8 +2215,7 @@ msgstr "Bouton principal" - - #: panels/mouse/gnome-mouse-properties.ui:102 - msgid "Sets the order of physical buttons on mice and touchpads." --msgstr "" --"Définit l’ordre des boutons physiques sur les souris et pavés tactiles." -+msgstr "Définit l’ordre des boutons physiques sur les souris et pavés tactiles." - - #: panels/mouse/gnome-mouse-properties.ui:131 - msgid "Left" -@@ -2133,7 +2304,7 @@ msgid "Single click, secondary button" - msgstr "Simple clic, bouton secondaire" - - #. add proxy to device list --#: panels/network/cc-network-panel.c:579 -+#: panels/network/cc-network-panel.c:583 - msgid "Network proxy" - msgstr "Serveur mandataire" - -@@ -2141,19 +2312,17 @@ msgstr "Serveur mandataire" - #. * 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 "" --"Oups, quelque chose s’est mal passé. Veuillez contacter le fournisseur de " --"votre logiciel." -+msgstr "Oups, quelque chose s’est mal passé. Veuillez contacter le fournisseur de votre logiciel." - --#: panels/network/cc-network-panel.c:785 -+#: panels/network/cc-network-panel.c:816 - msgid "NetworkManager needs to be running." - msgstr "NetworkManager doit être en fonctionnement." - -@@ -2303,7 +2472,7 @@ msgid "Remove VPN" - msgstr "Supprimer le 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 "Détails" -@@ -2325,12 +2494,12 @@ msgstr "Supprimer l’adresse" - msgid "Delete Route" - msgstr "Supprimer la route" - --#: 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" -@@ -2625,9 +2794,7 @@ msgid "" - "connection information\n" - "\n" - "Error: %s." --msgstr "" --"Le fichier « %s » est illisible ou ne contient pas d’informations de " --"connexion VPN reconnues\n" -+msgstr "Le fichier « %s » est illisible ou ne contient pas d’informations de connexion VPN reconnues\n" - "\n" - "Erreur : %s." - -@@ -2637,8 +2804,8 @@ msgstr "Sélectionner le fichier à importer" - - #: 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 "_Ouvrir" - -@@ -2654,8 +2821,7 @@ msgstr "_Remplacer" - #: panels/network/connection-editor/vpn-helpers.c:234 - #, c-format - msgid "Do you want to replace %s with the VPN connection you are saving?" --msgstr "" --"Voulez-vous remplacer %s avec la connexion VPN en cours d’enregistrement ?" -+msgstr "Voulez-vous remplacer %s avec la connexion VPN en cours d’enregistrement ?" - - #: panels/network/connection-editor/vpn-helpers.c:270 - msgid "Cannot export VPN connection" -@@ -2667,8 +2833,7 @@ msgid "" - "The VPN connection “%s” could not be exported to %s.\n" - "\n" - "Error: %s." --msgstr "" --"La connexion VPN « %s » n’a pas pu être exportée vers %s.\n" -+msgstr "La connexion VPN « %s » n’a pas pu être exportée vers %s.\n" - "\n" - "Erreur : %s." - -@@ -2714,9 +2879,7 @@ msgstr "network-workgroup" - msgid "" - "Network;Wireless;Wi-Fi;Wifi;IP;LAN;Proxy;WAN;Broadband;Modem;Bluetooth;vpn;" - "DNS;" --msgstr "" --"Réseau;Sans fil;Wi-Fi;Wifi;IP;LAN;Mandataire;WAN;Large bande;Modem;Bluetooth;" --"vpn;DNS;" -+msgstr "Réseau;Sans fil;Wi-Fi;Wifi;IP;LAN;Mandataire;WAN;Large bande;Modem;Bluetooth;vpn;DNS;" - - #: panels/network/gnome-wifi-panel.desktop.in.in:4 - msgid "Control how you connect to Wi-Fi networks" -@@ -2762,12 +2925,12 @@ msgstr "Dernière utilisation" - #. * 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 "Filaire" - --#: panels/network/net-device-ethernet.c:344 -+#: 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 -@@ -2781,16 +2944,13 @@ msgstr "Ajouter une nouvelle connexion" - #: panels/network/net-device-wifi.c:1368 - #, c-format - msgid "Switching on the wireless hotspot will disconnect you from %s." --msgstr "" --"Basculer sur le point d’accès sans fil va vous déconnecter de %s." -+msgstr "Basculer sur le point d’accès sans fil va vous déconnecter de %s." - - #: panels/network/net-device-wifi.c:1372 - msgid "" - "It is not possible to access the Internet through your wireless while the " - "hotspot is active." --msgstr "" --"Vous ne pouvez pas accéder à Internet par votre connexion sans fil pendant " --"que le point d’accès est actif." -+msgstr "Vous ne pouvez pas accéder à Internet par votre connexion sans fil pendant que le point d’accès est actif." - - #: panels/network/net-device-wifi.c:1379 - msgid "Turn On Wi-Fi Hotspot?" -@@ -2800,9 +2960,7 @@ msgstr "Allumer le point d’accès Wi-Fi ?" - msgid "" - "Wi-Fi hotspots are usually used to share an additional Internet connection " - "over Wi-Fi." --msgstr "" --"Les points d’accès Wi-Fi sont habituellement utilisés pour partager une " --"connexion Internet supplémentaire sans fil." -+msgstr "Les points d’accès Wi-Fi sont habituellement utilisés pour partager une connexion Internet supplémentaire sans fil." - - #: panels/network/net-device-wifi.c:1412 - msgid "_Turn On" -@@ -2822,16 +2980,13 @@ msgstr "Les règles du système interdisent son utilisation comme point d’acc - - #: panels/network/net-device-wifi.c:1595 - msgid "Wireless device does not support Hotspot mode" --msgstr "" --"Le périphérique sans fil ne prend pas en charge le mode « point d’accès »" -+msgstr "Le périphérique sans fil ne prend pas en charge le mode « point d’accès »" - - #: panels/network/net-device-wifi.c:1733 - msgid "" - "Network details for the selected networks, including passwords and any " - "custom configuration will be lost." --msgstr "" --"Les informations des réseaux sélectionnés, y compris les mots de passe et " --"toute configuration personnalisée seront perdus." -+msgstr "Les informations des réseaux sélectionnés, y compris les mots de passe et toute configuration personnalisée seront perdus." - - #: panels/network/net-device-wifi.c:1737 panels/network/network-wifi.ui:1362 - msgid "_Forget" -@@ -2851,9 +3006,7 @@ msgstr "_Oublier" - #: panels/network/net-proxy.c:102 - msgid "" - "Web Proxy Autodiscovery is used when a Configuration URL is not provided." --msgstr "" --"« Web Proxy Autodiscovery » est utilisé lorsqu’aucun URL de configuration " --"n’est fourni." -+msgstr "« Web Proxy Autodiscovery » est utilisé lorsqu’aucun URL de configuration n’est fourni." - - #. TRANSLATORS: WPAD is bad: if you enable it on an untrusted - #. * network, then anyone else on that network can tell your -@@ -2919,6 +3072,10 @@ msgstr "URL de _configuration" - msgid "Turn device off" - msgstr "Éteindre le périphérique" - -+#: panels/network/network.ui:101 -+msgid "Other Devices" -+msgstr "Autres périphériques" -+ - #: panels/network/network.ui:194 - msgid "Not set up" - msgstr "Non configuré" -@@ -2935,18 +3092,6 @@ msgstr "Connexion a_utomatique" - msgid "details" - msgstr "détails" - --#: 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 "Mot de _passe" -- - #: panels/network/network-wifi.ui:622 - msgid "Show P_assword" - msgstr "Afficher le mot de p_asse" -@@ -3011,17 +3156,13 @@ msgstr "_Réinitialiser" - msgid "" - "Reset the settings for this connection to their defaults, but remember as a " - "preferred connection." --msgstr "" --"Réinitialiser les paramètres de cette connexion à leurs valeurs par défaut, " --"mais se souvenir qu’elle est une connexion préférée." -+msgstr "Réinitialiser les paramètres de cette connexion à leurs valeurs par défaut, mais se souvenir qu’elle est une connexion préférée." - - #: panels/network/network-wifi.ui:1399 - msgid "" - "Remove all details relating to this network and do not try to automatically " - "connect to it." --msgstr "" --"Supprimer toutes les informations relatives à ce réseau et ne pas essayer de " --"s’y connecter automatiquement." -+msgstr "Supprimer toutes les informations relatives à ce réseau et ne pas essayer de s’y connecter automatiquement." - - #: panels/network/network-wifi.ui:1419 - msgid "reset" -@@ -3091,8 +3232,7 @@ msgstr "Mode avion" - - #: panels/network/wifi.ui:142 - msgid "Disables Wi-Fi, Bluetooth and mobile broadband" --msgstr "" --"Désactive le Wi-Fi, le Bluetooth et les connexions mobiles à large bande" -+msgstr "Désactive le Wi-Fi, le Bluetooth et les connexions mobiles à large bande" - - #: panels/network/wifi.ui:192 - msgid "Visible Networks" -@@ -3383,23 +3523,23 @@ msgstr "Micrologiciel absent" - msgid "Cable unplugged" - msgstr "Câble débranché" - --#: 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 "erreur de sécurité inconnue dans 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 "aucun fichier sélectionné" - --#: panels/network/wireless-security/eap-method.c:264 -+#: panels/network/wireless-security/eap-method.c:276 - msgid "unspecified error validating eap-method file" - msgstr "erreur inconnue à la validation du fichier eap-method" - --#: 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 "Clés privées 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 "Certificats DER ou PEM (*.der, *.pem, *.crt, *.cer)" - -@@ -3564,10 +3704,7 @@ msgid "" - "password-protected private key.\n" - "\n" - "(You can password-protect your private key with openssl)" --msgstr "" --"La clé privée sélectionnée ne semble pas être protégée par un mot de passe. " --"Cela met en danger vos identifiants. Veuillez sélectionner une clé privée " --"protégée par mot de passe.\n" -+msgstr "La clé privée sélectionnée ne semble pas être protégée par un mot de passe. Cela met en danger vos identifiants. Veuillez sélectionner une clé privée protégée par mot de passe.\n" - "\n" - "(Vous pouvez protéger votre clé par mot de passe avec openssl)" - -@@ -3665,25 +3802,20 @@ msgstr "clé wep manquante" - #: panels/network/wireless-security/ws-wep-key.c:116 - #, c-format - msgid "invalid wep-key: key with a length of %zu must contain only hex-digits" --msgstr "" --"clé wep non valide : une clé de %zu ne doit contenir que des caractères " --"hexadécimaux" -+msgstr "clé wep non valide : une clé de %zu ne doit contenir que des caractères hexadécimaux" - - #: panels/network/wireless-security/ws-wep-key.c:124 - #, c-format - msgid "" - "invalid wep-key: key with a length of %zu must contain only ascii characters" --msgstr "" --"clé wep non valide : une clé de %zu ne doit contenir que des caractères ascii" -+msgstr "clé wep non valide : une clé de %zu ne doit contenir que des caractères ascii" - - #: panels/network/wireless-security/ws-wep-key.c:130 - #, c-format - msgid "" - "invalid wep-key: wrong key length %zu. A key must be either of length 5/13 " - "(ascii) or 10/26 (hex)" --msgstr "" --"clé wep non valide : longueur de clé %zu incorrecte. Elle doit être de 5 à " --"13 caractères en ascii ou de 10 à 26 en hexa" -+msgstr "clé wep non valide : longueur de clé %zu incorrecte. Elle doit être de 5 à 13 caractères en ascii ou de 10 à 26 en hexa" - - #: panels/network/wireless-security/ws-wep-key.c:137 - msgid "invalid wep-key: passphrase must be non-empty" -@@ -3691,8 +3823,7 @@ msgstr "clé wep non valide : phrase de passe non renseignée" - - #: panels/network/wireless-security/ws-wep-key.c:139 - msgid "invalid wep-key: passphrase must be shorter than 64 characters" --msgstr "" --"clé wep non valide : la phrase de passe doit contenir moins de 64 caractères" -+msgstr "clé wep non valide : la phrase de passe doit contenir moins de 64 caractères" - - #: panels/network/wireless-security/ws-wep-key.ui:11 - msgid "1 (Default)" -@@ -3723,15 +3854,11 @@ msgstr "Inde_x WEP" - msgid "" - "invalid wpa-psk: invalid key-length %zu. Must be [8,63] bytes or 64 hex " - "digits" --msgstr "" --"wpa-psk non valide : longueur de clé %zu incorrecte. Doit être de [8,63] " --"octets ou 64 caratères hexadécimaux" -+msgstr "wpa-psk non valide : longueur de clé %zu incorrecte. Doit être de [8,63] octets ou 64 caratères hexadécimaux" - - #: panels/network/wireless-security/ws-wpa-psk.c:79 - msgid "invalid wpa-psk: cannot interpret key with 64 bytes as hex" --msgstr "" --"wpa-psk non valide : impossible de considérer une clé de 64 octets comme " --"hexadécimale" -+msgstr "wpa-psk non valide : impossible de considérer une clé de 64 octets comme hexadécimale" - - #: panels/network/wireless-security/ws-wpa-psk.ui:50 - msgid "_Type" -@@ -3758,9 +3885,7 @@ msgstr "_Bannières de notifications" - msgid "" - "Notifications will continue to appear in the notification list when popups " - "are disabled." --msgstr "" --"Les notifications continuent à s’afficher dans la liste du tiroir lorsque " --"l’affichage des bannières est désactivé." -+msgstr "Les notifications continuent à s’afficher dans la liste du tiroir lorsque l’affichage des bannières est désactivé." - - #. Popups here refers to message tray notifications in the middle of the screen. - #: panels/notifications/edit-dialog.ui:253 -@@ -3817,19 +3942,19 @@ msgstr "Autre" - - #. 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 "Compte %s" - --#: panels/online-accounts/cc-online-accounts-panel.c:843 -+#: panels/online-accounts/cc-online-accounts-panel.c:904 - msgid "Error removing account" - msgstr "Erreur lors de la suppression du compte" - - #. 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 supprimé" -@@ -3855,9 +3980,7 @@ msgstr "goa-panel" - msgid "" - "Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;" - "Kerberos;IMAP;SMTP;Pocket;ReadItLater;" --msgstr "" --"Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;" --"Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;" -+msgstr "Google;Facebook;Twitter;Yahoo;Web;En ligne;Discussion;Agenda;Courriel;Email;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;" - - #. Translators: This is the button which allows undoing the removal of the printer. - #: panels/online-accounts/online-accounts.ui:38 panels/printers/printers.ui:71 -@@ -3870,9 +3993,7 @@ msgstr "Connexion à vos données du nuage" - - #: panels/online-accounts/online-accounts.ui:137 - msgid "No internet connection — connect to set up new online accounts" --msgstr "" --"Aucune connexion Internet — connectez-vous pour configurer de nouveaux " --"comptes en ligne" -+msgstr "Aucune connexion Internet — connectez-vous pour configurer de nouveaux comptes en ligne" - - #: panels/online-accounts/online-accounts.ui:159 - msgid "Add an account" -@@ -3998,7 +4119,7 @@ msgid "Media player" - msgstr "Lecteur 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 "Tablette" - -@@ -4014,7 +4135,7 @@ msgstr "Périphérique d’entrée pour jeux" - - #. TRANSLATORS: secondary battery, misc - #: panels/power/cc-power-panel.c:564 panels/power/cc-power-panel.c:804 --#: panels/power/cc-power-panel.c:2377 -+#: panels/power/cc-power-panel.c:2380 - msgid "Battery" - msgstr "Batterie" - -@@ -4058,102 +4179,100 @@ msgstr "Déchargée" - msgid "Batteries" - msgstr "Batteries" - --#: panels/power/cc-power-panel.c:1239 -+#: panels/power/cc-power-panel.c:1242 - msgid "When _idle" - msgstr "Quand _inactif" - --#: panels/power/cc-power-panel.c:1693 -+#: panels/power/cc-power-panel.c:1696 - msgid "Power Saving" - msgstr "Économie d’énergie" - --#: panels/power/cc-power-panel.c:1724 -+#: panels/power/cc-power-panel.c:1727 - msgid "_Screen brightness" - msgstr "Luminosité de l’é_cran" - --#: panels/power/cc-power-panel.c:1743 -+#: panels/power/cc-power-panel.c:1746 - msgid "Automatic brightness" - msgstr "Luminosité automatique" - --#: panels/power/cc-power-panel.c:1763 -+#: panels/power/cc-power-panel.c:1766 - msgid "_Keyboard brightness" - msgstr "Luminosité du _clavier" - --#: panels/power/cc-power-panel.c:1773 -+#: panels/power/cc-power-panel.c:1776 - msgid "_Dim screen when inactive" - msgstr "A_ssombrir l’écran si inactif" - --#: panels/power/cc-power-panel.c:1798 -+#: panels/power/cc-power-panel.c:1801 - msgid "_Blank screen" - msgstr "Écran _noir" - --#: panels/power/cc-power-panel.c:1835 -+#: panels/power/cc-power-panel.c:1838 - msgid "_Wi-Fi" - msgstr "_Wi-Fi" - --#: panels/power/cc-power-panel.c:1840 -+#: panels/power/cc-power-panel.c:1843 - msgid "Turn off Wi-Fi to save power." - msgstr "Désactivez le Wi-Fi pour économiser de l’énergie." - --#: panels/power/cc-power-panel.c:1865 -+#: panels/power/cc-power-panel.c:1868 - msgid "_Mobile broadband" - msgstr "_Mobile à large bande" - --#: panels/power/cc-power-panel.c:1870 -+#: panels/power/cc-power-panel.c:1873 - msgid "Turn off mobile broadband (3G, 4G, LTE, etc.) to save power." --msgstr "" --"Désactivez les périphériques mobiles à large bande (3G, 4G, LTE, etc.) pour " --"économiser de l’énergie." -+msgstr "Désactivez les périphériques mobiles à large bande (3G, 4G, LTE, etc.) pour économiser de l’énergie." - --#: panels/power/cc-power-panel.c:1923 -+#: panels/power/cc-power-panel.c:1926 - msgid "_Bluetooth" - msgstr "_Bluetooth" - --#: panels/power/cc-power-panel.c:1928 -+#: panels/power/cc-power-panel.c:1931 - msgid "Turn off Bluetooth to save power." - msgstr "Désactivez le Bluetooth pour économiser de l’énergie." - --#: panels/power/cc-power-panel.c:1987 -+#: panels/power/cc-power-panel.c:1990 - msgid "When on battery power" - msgstr "Quand sur batterie" - --#: panels/power/cc-power-panel.c:1989 -+#: panels/power/cc-power-panel.c:1992 - msgid "When plugged in" - msgstr "Quand le câble est branché" - --#: panels/power/cc-power-panel.c:2084 -+#: panels/power/cc-power-panel.c:2087 - msgid "Suspend" - msgstr "Mettre en veille" - --#: panels/power/cc-power-panel.c:2085 -+#: panels/power/cc-power-panel.c:2088 - msgid "Power Off" - msgstr "Éteindre" - --#: panels/power/cc-power-panel.c:2086 -+#: panels/power/cc-power-panel.c:2089 - msgid "Hibernate" - msgstr "Hiberner" - --#: panels/power/cc-power-panel.c:2087 -+#: panels/power/cc-power-panel.c:2090 - msgid "Nothing" - msgstr "Rien" - - #. Frame header --#: panels/power/cc-power-panel.c:2201 -+#: panels/power/cc-power-panel.c:2204 - msgid "Suspend & Power Button" - msgstr "Bouton de mise en veille et extinction" - --#: panels/power/cc-power-panel.c:2240 -+#: panels/power/cc-power-panel.c:2243 - msgid "_Automatic suspend" - msgstr "Mise en veille _automatique" - --#: panels/power/cc-power-panel.c:2241 -+#: panels/power/cc-power-panel.c:2244 - msgid "Automatic suspend" - msgstr "Mise en veille automatique" - --#: panels/power/cc-power-panel.c:2308 -+#: panels/power/cc-power-panel.c:2311 - msgid "_When the Power Button is pressed" - msgstr "_Lorsque le bouton d’extinction est enfoncé" - --#: panels/power/cc-power-panel.c:2427 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 "Périphériques" -@@ -4164,9 +4283,7 @@ msgstr "Énergie" - - #: panels/power/gnome-power-panel.desktop.in.in:4 - msgid "View your battery status and change power saving settings" --msgstr "" --"S’informer sur l’état de la batterie et modifier les paramètres d’économie " --"d’énergie" -+msgstr "S’informer sur l’état de la batterie et modifier les paramètres d’économie d’énergie" - - #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! - #: panels/power/gnome-power-panel.desktop.in.in:7 -@@ -4177,9 +4294,7 @@ msgstr "gnome-power-manager" - #: panels/power/gnome-power-panel.desktop.in.in:19 - msgid "" - "Power;Sleep;Suspend;Hibernate;Battery;Brightness;Dim;Blank;Monitor;DPMS;Idle;" --msgstr "" --"Énergie;Alimentation;Veille;Suspension;Hibernation;Batterie;Luminosité;" --"Assombrir;Noir;Écran;DPMS;Inactif;" -+msgstr "Énergie;Alimentation;Veille;Suspension;Hibernation;Batterie;Luminosité;Assombrir;Noir;Écran;DPMS;Inactif;" - - #: panels/power/power.ui:17 - msgid "20 minutes" -@@ -4290,18 +4405,18 @@ msgid "Authentication Required" - msgstr "Authentification requise" - - #. Translators: %s is the printer name --#: panels/printers/cc-printers-panel.c:808 -+#: panels/printers/cc-printers-panel.c:842 - #, c-format - msgid "Printer “%s” has been deleted" - msgstr "L’imprimante « %s » a été supprimée" - - #. Translators: Addition of the new printer failed. --#: panels/printers/cc-printers-panel.c:1053 -+#: panels/printers/cc-printers-panel.c:1142 - msgid "Failed to add new printer." - msgstr "L’ajout de la nouvelle imprimante a échoué." - - #. Translators: The XML file containing user interface can not be loaded --#: panels/printers/cc-printers-panel.c:1388 -+#: panels/printers/cc-printers-panel.c:1514 - #, c-format - msgid "Could not load ui: %s" - msgstr "Impossible de charger l’interface utilisateur : %s" -@@ -4338,9 +4453,7 @@ msgstr "Imprimantes" - - #: panels/printers/gnome-printers-panel.desktop.in.in:4 - msgid "Add printers, view printer jobs and decide how you want to print" --msgstr "" --"Ajouter des imprimantes, afficher les tâches et décider quand vous voulez " --"imprimer" -+msgstr "Ajouter des imprimantes, afficher les tâches et décider quand vous voulez imprimer" - - #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! - #: panels/printers/gnome-printers-panel.desktop.in.in:7 -@@ -4403,9 +4516,7 @@ msgstr "Saisissez l’adresse d’un réseau ou recherchez une imprimante" - - #: panels/printers/new-printer-dialog.ui:352 - msgid "Enter username and password to view printers on Print Server." --msgstr "" --"Saisissez votre nom d’utilisateur et votre mot de passe pour afficher les " --"imprimantes sur le serveur." -+msgstr "Saisissez votre nom d’utilisateur et votre mot de passe pour afficher les imprimantes sur le serveur." - - #. Translators: This button triggers the printing of a test page. - #. Translators: Name of job which makes printer to print test page -@@ -4432,16 +4543,14 @@ msgstr "Sélectionnez un fichier PPD" - msgid "" - "PostScript Printer Description files (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *." - "PPD.GZ)" --msgstr "" --"Fichiers de description PostScript de l’imprimante (*.ppd, *.PPD, *.ppd.gz, " --"*.PPD.gz, *.PPD.GZ)" -+msgstr "Fichiers de description PostScript de l’imprimante (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *.PPD.GZ)" - - #: panels/printers/ppd-selection-dialog.ui:10 - msgid "Select Printer Driver" - msgstr "Sélectionner un pilote d’imprimante" - - #: 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 "Sélectionner" - -@@ -4498,55 +4607,55 @@ msgid "Reverse portrait" - msgstr "Portrait inversé" - - #. 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 "En attente" - - #. 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 "En pause" - - #. 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 "Authentification requise" - - #. 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 "Traitement en cours" - - #. 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 "Arrêtée" - - #. 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 "Interrompue" - - #. 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 "Annulée" - - #. 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 "Terminée" - - #. 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" -@@ -4554,18 +4663,17 @@ msgstr[0] "%u tâche nécessite une authentification" - msgstr[1] "%u tâches nécessitent une authentification" - - #. 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 - tâches d’impression actives" - - #. 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 "" --"Saisissez vos informations d’authentification pour imprimer à partir de %s." -+msgstr "Saisissez vos informations d’authentification pour imprimer à partir de %s." - - #: panels/printers/pp-new-printer-dialog.c:402 - msgid "Unlock Print Server" -@@ -4581,9 +4689,7 @@ msgstr "Déverrouiller %s." - #: panels/printers/pp-new-printer-dialog.c:411 - #, c-format - msgid "Enter username and password to view printers on %s." --msgstr "" --"Saisissez votre nom d’utilisateur et votre mot de passe pour afficher les " --"imprimantes sur %s." -+msgstr "Saisissez votre nom d’utilisateur et votre mot de passe pour afficher les imprimantes sur %s." - - #: panels/printers/pp-new-printer-dialog.c:876 - msgid "Searching for Printers" -@@ -4746,127 +4852,127 @@ msgid "Manufacturer" - msgstr "Fabricant" - - #. 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 "Aucune tâche d’impression active" - - #. 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 tâche" - msgstr[1] "%u tâches" - -+#. Translators: Name of job which makes printer to clean its heads -+#: panels/printers/pp-printer-entry.c:752 -+msgid "Clean print heads" -+msgstr "Nettoyage des têtes d’impression" -+ - #. 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 "Toner pratiquement épuisé" - - #. 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 "Plus de 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 "Révélateur pratiquement épuisé" - - #. 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 "Plus de révélateur" - - #. 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 "Cartouche de couleur pratiquement vide" - - #. 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 "Cartouche de couleur vide" - - #. 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 "Couvercle ouvert" - - #. 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 "Porte ouverte" - - #. 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 "Pratiquement plus de papier" - - #. 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 "Plus de papier" - - #. 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 "Hors ligne" - - #. 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 "Arrêtée" - - #. 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 "Récipient à déchets pratiquement plein" - - #. 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 "Récipient à déchets plein" - - #. 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 "Le photo-conducteur optique est pratiquement en fin de vie" - - #. 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 "Le photo-conducteur optique n’est plus en état" - - #. 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 "Prête" - - #. 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’accepte plus de tâche supplémentaire" - - #. 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 "Traitement en cours" - --#. Translators: Name of job which makes printer to clean its heads --#: panels/printers/pp-printer-entry.c:940 --msgid "Clean print heads" --msgstr "Nettoyage des têtes d’impression" -- - #: panels/printers/printer-entry.ui:14 - msgid "Printing Options" - msgstr "Options d’impression" -@@ -4926,8 +5032,7 @@ msgstr "Ajouter une imprimante…" - msgid "" - "Sorry! The system printing service\n" - "doesn’t seem to be available." --msgstr "" --"Désolé ! Le service d’impression du système\n" -+msgstr "Désolé ! Le service d’impression du système\n" - "ne semble pas être disponible." - - #: panels/privacy/cc-privacy-panel.c:387 panels/privacy/privacy.ui:280 -@@ -4998,10 +5103,7 @@ msgstr "Signalement de problèmes" - msgid "" - "Sending reports of technical problems helps us improve %s. Reports are sent " - "anonymously and are scrubbed of personal data." --msgstr "" --"Envoyer des rapports ou signaler des problèmes techniques nous aide à " --"améliorer %s. Les rapports sont envoyés anonymement et sont épurés de toute " --"donnée personnelle." -+msgstr "Envoyer des rapports ou signaler des problèmes techniques nous aide à améliorer %s. Les rapports sont envoyés anonymement et sont épurés de toute donnée personnelle." - - #: panels/privacy/cc-privacy-panel.c:1231 panels/privacy/privacy.ui:719 - msgid "Privacy Policy" -@@ -5013,9 +5115,7 @@ msgstr "Confidentialité" - - #: panels/privacy/gnome-privacy-panel.desktop.in.in:4 - msgid "Protect your personal information and control what others might see" --msgstr "" --"Protéger vos informations personnelles et contrôler ce que d’autres peuvent " --"voir" -+msgstr "Protéger vos informations personnelles et contrôler ce que d’autres peuvent voir" - - #. FIXME - #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! -@@ -5028,9 +5128,7 @@ msgstr "preferences-system-privacy" - msgid "" - "screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;" - "network;identity;" --msgstr "" --"écran;verrouiller;verrouillage;diagnostique;plantage;privé;confidentiel;" --"récent;temporaire;tmp;index;nom;réseaux;identité;" -+msgstr "écran;verrouiller;verrouillage;diagnostique;plantage;privé;confidentiel;récent;temporaire;tmp;index;nom;réseaux;identité;" - - #: panels/privacy/privacy.ui:14 - msgid "Screen Turns Off" -@@ -5084,9 +5182,7 @@ msgstr "Toujours" - msgid "" - "Remembering your history makes things easier to find again. These items are " - "never shared over the network." --msgstr "" --"L’enregistrement de votre historique permet de retrouver les choses plus " --"facilement. Ces éléments ne sont jamais partagés sur le réseau." -+msgstr "L’enregistrement de votre historique permet de retrouver les choses plus facilement. Ces éléments ne sont jamais partagés sur le réseau." - - #: panels/privacy/privacy.ui:176 - msgid "_Recently Used" -@@ -5102,9 +5198,7 @@ msgstr "Effac_er l’historique récent" - - #: panels/privacy/privacy.ui:301 - msgid "The Screen Lock protects your privacy when you are away." --msgstr "" --"Le verrouillage de l’écran protège votre vie privée lorsque vous vous " --"éloignez." -+msgstr "Le verrouillage de l’écran protège votre vie privée lorsque vous vous éloignez." - - #: panels/privacy/privacy.ui:328 - msgid "Automatic Screen _Lock" -@@ -5122,9 +5216,7 @@ msgstr "Afficher les _notifications" - msgid "" - "Automatically purge the Trash and temporary files to help keep your computer " - "free of unnecessary sensitive information." --msgstr "" --"Vider automatiquement la corbeille et les fichiers temporaires pour ne pas " --"conserver des informations sensibles sur votre ordinateur." -+msgstr "Vider automatiquement la corbeille et les fichiers temporaires pour ne pas conserver des informations sensibles sur votre ordinateur." - - #: panels/privacy/privacy.ui:483 - msgid "Automatically empty _Trash" -@@ -5154,12 +5246,9 @@ msgid "" - "\n" - "All the information we collect is made anonymous, and we will never share " - "your data with third parties." --msgstr "" --"L’envoi d’information sur l’usage des logiciels nous aide à vous fournir des " --"recommendations plus précises et à améliorer nos logiciels.\n" -+msgstr "L’envoi d’information sur l’usage des logiciels nous aide à vous fournir des recommendations plus précises et à améliorer nos logiciels.\n" - "\n" --"Toutes les informations que nous récoltons sont anonymisés, et nous ne " --"partagerons jamais vos données avec un tiers." -+"Toutes les informations que nous récoltons sont anonymisés, et nous ne partagerons jamais vos données avec un tiers." - - #: panels/privacy/privacy.ui:681 - msgid "_Send software usage statistics" -@@ -5169,18 +5258,13 @@ msgstr "Envoyer les _statistiques d’utilisation du logiciel" - msgid "" - "Location services allow applications to know your location. Using Wi-Fi and " - "mobile broadband increases accuracy." --msgstr "" --"Le services de localisation permet aux applications de connaître votre " --"emplacement. Utiliser le Wi-Fi et le réseau mobile permet d’augmenter la " --"précision." -+msgstr "Le services de localisation permet aux applications de connaître votre emplacement. Utiliser le Wi-Fi et le réseau mobile permet d’augmenter la précision." - - #: panels/privacy/privacy.ui:778 - msgid "" - "Uses Mozilla Location Service: Privacy Policy" --msgstr "" --"Utilise le service de localisation de Mozilla : Politique de Confidentialité" -+msgstr "Utilise le service de localisation de Mozilla : Politique de Confidentialité" - - #: panels/privacy/privacy.ui:828 - msgid "_Location Services" -@@ -5260,9 +5344,7 @@ msgstr "Pays et langue" - #: panels/region/gnome-region-panel.desktop.in.in:4 - msgid "" - "Select your display language, formats, keyboard layouts and input sources" --msgstr "" --"Sélectionnez la langue, les formats, l’agencement clavier et les sources de " --"saisie" -+msgstr "Sélectionnez la langue, les formats, l’agencement clavier et les sources de saisie" - - #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! - #: panels/region/gnome-region-panel.desktop.in.in:7 -@@ -5280,8 +5362,7 @@ msgstr "Ajouter une source de saisie" - - #: panels/region/input-chooser.ui:76 - msgid "Input methods can’t be used on the login screen" --msgstr "" --"Les méthodes de saisie ne peuvent pas être utilisées sur l’écran de connexion" -+msgstr "Les méthodes de saisie ne peuvent pas être utilisées sur l’écran de connexion" - - #: panels/region/input-options.ui:7 - msgid "Input Source Options" -@@ -5382,9 +5463,7 @@ msgstr "Afficher la disposition de clavier de la source de saisie" - - #: panels/region/region.ui:530 - msgid "Login settings are used by all users when logging into the system" --msgstr "" --"Les paramètres de connexion sont utilisés par tous les utilisateurs pour " --"accéder au système" -+msgstr "Les paramètres de connexion sont utilisés par tous les utilisateurs pour accéder au système" - - #: panels/search/cc-search-locations-dialog.c:639 - msgid "Select Location" -@@ -5401,9 +5480,7 @@ msgstr "Aucune application trouvée" - #: panels/search/gnome-search-panel.desktop.in.in:4 - msgid "" - "Control which applications show search results in the Activities Overview" --msgstr "" --"Contrôler quelles applications affichent les résultats d’une recherche dans " --"la vue d’ensemble des activités" -+msgstr "Contrôler quelles applications affichent les résultats d’une recherche dans la vue d’ensemble des activités" - - #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! - #: panels/search/gnome-search-panel.desktop.in.in:7 -@@ -5448,64 +5525,58 @@ msgstr "Préférences" - msgid "No networks selected for sharing" - msgstr "Aucun réseau de partage n’est sélectionné" - --#: panels/sharing/cc-sharing-panel.c:275 -+#: panels/sharing/cc-sharing-panel.c:283 - msgctxt "service is enabled" - msgid "On" - msgstr "Activé" - --#: 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 "Désactivé" - --#: panels/sharing/cc-sharing-panel.c:307 -+#: panels/sharing/cc-sharing-panel.c:315 - msgctxt "service is enabled" - msgid "Enabled" - msgstr "Activé" - --#: panels/sharing/cc-sharing-panel.c:310 -+#: panels/sharing/cc-sharing-panel.c:318 - msgctxt "service is active" - msgid "Active" - msgstr "Actif" - --#: panels/sharing/cc-sharing-panel.c:381 -+#: panels/sharing/cc-sharing-panel.c:389 - msgid "Choose a Folder" - msgstr "Choisir un dossier" - --#: 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 " - "current network using: dav://%s" --msgstr "" --"Le partage de fichiers vous permet de partager votre dossier Public avec les " --"autres sur le réseau actuel en utilisant : dav://%s" -+msgstr "Le partage de fichiers vous permet de partager votre dossier Public avec les autres sur le réseau actuel en utilisant : 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 " - "Shell command:\n" - "ssh %s" --msgstr "" --"Lorsque la connexion à distance est activée, tout utilisateur distant peut " --"se connecter à l’aide de cette commande shell sécurisée :\n" -+msgstr "Lorsque la connexion à distance est activée, tout utilisateur distant peut se connecter à l’aide de cette commande shell sécurisée :\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 " - "connecting to vnc://%s" --msgstr "" --"Le partage d’écran permet aux utilisateurs distants de voir ou contrôler " --"votre écran en se connectant à vnc://%s" -+msgstr "Le partage d’écran permet aux utilisateurs distants de voir ou contrôler votre écran en se connectant à vnc://%s" - --#: panels/sharing/cc-sharing-panel.c:809 -+#: panels/sharing/cc-sharing-panel.c:817 - msgid "Copy" - msgstr "Copier" - --#: 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 "Partage" -@@ -5524,9 +5595,7 @@ msgstr "preferences-system-sharing" - msgid "" - "share;sharing;ssh;host;name;remote;desktop;media;audio;video;pictures;photos;" - "movies;server;renderer;" --msgstr "" --"partage;partager;ssh;hôte;nom;distant;bureau;média;audio;vidéo;images;photos;" --"film,serveur;moteur de rendu;" -+msgstr "partage;partager;ssh;hôte;nom;distant;bureau;média;audio;vidéo;images;photos;film,serveur;moteur de rendu;" - - #: panels/sharing/networks.ui:19 - msgid "Networks" -@@ -5538,8 +5607,7 @@ msgstr "Activer ou désactiver une connexion distante" - - #: panels/sharing/org.gnome.controlcenter.remote-login-helper.policy.in.in:12 - msgid "Authentication is required to enable or disable remote login" --msgstr "" --"Authentification requise pour activer ou désactiver une connexion distante" -+msgstr "Authentification requise pour activer ou désactiver une connexion distante" - - #: panels/sharing/sharing.ui:46 - msgid "_Computer Name" -@@ -5623,8 +5691,7 @@ msgstr "Son" - - #: panels/sound/data/gnome-sound-panel.desktop.in.in:4 - msgid "Change sound levels, inputs, outputs, and alert sounds" --msgstr "" --"Modifier les volumes sonores, les saisies, les sorties et les alertes sonores" -+msgstr "Modifier les volumes sonores, les saisies, les sorties et les alertes sonores" - - #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! - #: panels/sound/data/gnome-sound-panel.desktop.in.in:7 -@@ -5871,10 +5938,7 @@ msgstr "preferences-desktop-accessibility" - msgid "" - "Keyboard;Mouse;a11y;Accessibility;Contrast;Zoom;Screen;Reader;text;font;size;" - "AccessX;Sticky;Keys;Slow;Bounce;Mouse;Double;click;Delay;Assist;Repeat;Blink;" --msgstr "" --"Clavier;Souris;lien;Accessibilité;Contraste;Zoom;Lecteur d’écran;texte;" --"police;taille;AccessX;Touches rémanentes;Touches lentes;Rebonds de touches;" --"Touches de la souris;Double clic;Délai;Assistance;Répétition;Clignotement;" -+msgstr "Clavier;Souris;lien;Accessibilité;Contraste;Zoom;Lecteur d’écran;texte;police;taille;AccessX;Touches rémanentes;Touches lentes;Rebonds de touches;Touches de la souris;Double clic;Délai;Assistance;Répétition;Clignotement;" - - #: panels/universal-access/uap.ui:89 - msgid "_Always Show Universal Access Menu" -@@ -5960,8 +6024,7 @@ msgstr "Taille du curseur" - #: panels/universal-access/uap.ui:1069 - msgid "" - "Cursor size can be combined with zoom to make it easier to see the cursor." --msgstr "" --"La taille du curseur peut-être associée au zoom pour faciliter sa visibilité." -+msgstr "La taille du curseur peut-être associée au zoom pour faciliter sa visibilité." - - #: panels/universal-access/uap.ui:1105 - msgid "Screen Reader" -@@ -5969,9 +6032,7 @@ msgstr "Lecteur d’écran" - - #: panels/universal-access/uap.ui:1122 - msgid "The screen reader reads displayed text as you move the focus." --msgstr "" --"Le lecteur d’écran lit le texte affiché au fur et à mesure que vous déplacez " --"le focus." -+msgstr "Le lecteur d’écran lit le texte affiché au fur et à mesure que vous déplacez le focus." - - #: panels/universal-access/uap.ui:1155 - msgid "_Screen Reader" -@@ -6047,9 +6108,7 @@ msgstr "Touches _rémanentes" - - #: panels/universal-access/uap.ui:1848 - msgid "Treats a sequence of modifier keys as a key combination" --msgstr "" --"Traiter la frappe d’une suite de touches modificatrices comme une " --"combinaison de celles-ci" -+msgstr "Traiter la frappe d’une suite de touches modificatrices comme une combinaison de celles-ci" - - #: panels/universal-access/uap.ui:1872 - msgid "_Disable if two keys are pressed together" -@@ -6126,8 +6185,7 @@ msgstr "_Activer au clavier" - - #: panels/universal-access/uap.ui:2387 - msgid "Turn accessibility features on and off using the keyboard" --msgstr "" --"Activer et désactiver les fonctionnalités d’accessibilité à partir du clavier" -+msgstr "Activer et désactiver les fonctionnalités d’accessibilité à partir du clavier" - - #: panels/universal-access/uap.ui:2451 - msgid "Click Assist" -@@ -6139,8 +6197,7 @@ msgstr "_Simulation du clic secondaire" - - #: panels/universal-access/uap.ui:2505 - msgid "Trigger a secondary click by holding down the primary button" --msgstr "" --"Déclencher un clic secondaire en maintenant enfoncé le bouton principal" -+msgstr "Déclencher un clic secondaire en maintenant enfoncé le bouton principal" - - #: panels/universal-access/uap.ui:2559 - msgctxt "secondary click" -@@ -6394,8 +6451,7 @@ msgstr "_Type de compte" - - #: panels/user-accounts/data/account-dialog.ui:260 - msgid "Allow user to set a password when they next _login" --msgstr "" --"Autoriser l’utilisateur à définir un mot de passe à la prochaine conne_xion" -+msgstr "Autoriser l’utilisateur à définir un mot de passe à la prochaine conne_xion" - - #: panels/user-accounts/data/account-dialog.ui:274 - msgid "Set a password _now" -@@ -6411,10 +6467,7 @@ msgid "" - "Enterprise login allows an existing centrally managed user account to be " - "used on this device. You can also use this account to access company " - "resources on the internet." --msgstr "" --"Un compte d’entreprise autorise l’usage d’un compte utilisateur centralisé à " --"partir de ce périphérique. Il permet aussi d’accéder aux différents sites de " --"la compagnie présents sur Internet." -+msgstr "Un compte d’entreprise autorise l’usage d’un compte utilisateur centralisé à partir de ce périphérique. Il permet aussi d’accéder aux différents sites de la compagnie présents sur Internet." - - #: panels/user-accounts/data/account-dialog.ui:485 - #: panels/user-accounts/data/join-dialog.ui:116 -@@ -6427,8 +6480,7 @@ msgstr "Vous êtes hors ligne" - - #: panels/user-accounts/data/account-dialog.ui:726 - msgid "You must be online in order to add enterprise users." --msgstr "" --"Vous devez être en ligne pour ajouter des utilisateurs de l’entreprise." -+msgstr "Vous devez être en ligne pour ajouter des utilisateurs de l’entreprise." - - #: panels/user-accounts/data/account-dialog.ui:760 - msgid "_Enterprise Login" -@@ -6483,14 +6535,11 @@ msgstr "Index _gauche" - msgid "_Other finger:" - msgstr "_Autre doigt :" - --#: 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." --msgstr "" --"L’enregistrement de votre empreinte digitale a réussi. Vous devriez " --"maintenant pouvoir vous identifier à l’aide du lecteur d’empreintes " --"digitales." -+msgstr "L’enregistrement de votre empreinte digitale a réussi. Vous devriez maintenant pouvoir vous identifier à l’aide du lecteur d’empreintes digitales." - - #: panels/user-accounts/data/avatar-chooser.ui:27 - msgid "Take a Picture…" -@@ -6532,8 +6581,7 @@ msgid "" - "In order to use enterprise logins, this computer needs to be\n" - "enrolled in the domain. Please have your network administrator\n" - "type their domain password here." --msgstr "" --"Pour utiliser des identifiants d’entreprise, cet ordinateur doit\n" -+msgstr "Pour utiliser des identifiants d’entreprise, cet ordinateur doit\n" - "être inscrit au domaine. Veuillez demander à votre administrateur\n" - "réseau de saisir son mot de passe du domaine ici." - -@@ -6567,8 +6615,7 @@ msgstr "Mot de _passe actuel" - - #: panels/user-accounts/data/password-dialog.ui:243 - msgid "Allow user to change their password on next login" --msgstr "" --"Autoriser l’utilisateur à changer son mot de passe à la prochaine connexion" -+msgstr "Autoriser l’utilisateur à changer son mot de passe à la prochaine connexion" - - #: panels/user-accounts/data/password-dialog.ui:256 - msgid "Set a password now" -@@ -6580,9 +6627,7 @@ msgstr "_Ajouter un utilisateur…" - - #: panels/user-accounts/data/user-accounts-dialog.ui:69 - msgid "Your session needs to be restarted for changes to take effect" --msgstr "" --"Vous devez redémarrer la session pour que les changements soient pris en " --"compte" -+msgstr "Vous devez redémarrer la session pour que les changements soient pris en compte" - - #: panels/user-accounts/data/user-accounts-dialog.ui:77 - msgid "Restart Now" -@@ -6644,8 +6689,7 @@ msgstr "Essayez de modifier un peu plus le mot de passe." - #: panels/user-accounts/pw-utils.c:87 - msgctxt "Password hint" - msgid "A password without your user name would be stronger." --msgstr "" --"Un mot de passe ne contenant pas votre nom d’utilisateur serait plus fort." -+msgstr "Un mot de passe ne contenant pas votre nom d’utilisateur serait plus fort." - - #: panels/user-accounts/pw-utils.c:89 - msgctxt "Password hint" -@@ -6690,8 +6734,7 @@ msgstr "Essayez d’utiliser plus de caractères spéciaux, comme les pontuation - #: panels/user-accounts/pw-utils.c:107 - msgctxt "Password hint" - msgid "Try to use a mixture of letters, numbers and punctuation." --msgstr "" --"Essayez d’utiliser un mélange de lettres, de chiffres et de ponctuations." -+msgstr "Essayez d’utiliser un mélange de lettres, de chiffres et de ponctuations." - - #: panels/user-accounts/pw-utils.c:109 - msgctxt "Password hint" -@@ -6703,9 +6746,7 @@ msgctxt "Password hint" - msgid "" - "Try to avoid repeating the same type of character: you need to mix up " - "letters, numbers and punctuation." --msgstr "" --"Essayez d’éviter la répétition du même caractère : vous devez mélanger des " --"lettres, des chiffres et des ponctuations." -+msgstr "Essayez d’éviter la répétition du même caractère : vous devez mélanger des lettres, des chiffres et des ponctuations." - - #: panels/user-accounts/pw-utils.c:113 - msgctxt "Password hint" -@@ -6717,9 +6758,7 @@ msgctxt "Password hint" - msgid "" - "Password needs to be longer. Try to add more letters, numbers and " - "punctuation." --msgstr "" --"Le mot de passe doit être plus long. Essayez d’ajouter des lettres, des " --"chiffres et des ponctuations." -+msgstr "Le mot de passe doit être plus long. Essayez d’ajouter des lettres, des chiffres et des ponctuations." - - #: panels/user-accounts/pw-utils.c:117 - msgctxt "Password hint" -@@ -6730,9 +6769,7 @@ msgstr "Mélangez des majuscules, des minuscules et aussi un ou deux nombres." - msgctxt "Password hint" - msgid "" - "Adding more letters, numbers and punctuation will make the password stronger." --msgstr "" --"L’ajout de lettres, de chiffres et de ponctuations renforcera le mot de " --"passe." -+msgstr "L’ajout de lettres, de chiffres et de ponctuations renforcera le mot de passe." - - #: panels/user-accounts/run-passwd.c:422 - msgid "Authentication failed" -@@ -6761,8 +6798,7 @@ msgstr "Le nouveau mot de passe a déjà été utilisé récemment." - #: panels/user-accounts/run-passwd.c:520 - #, c-format - msgid "The new password must contain numeric or special characters" --msgstr "" --"Le nouveau mot de passe doit contenir des caractères spéciaux ou numériques" -+msgstr "Le nouveau mot de passe doit contenir des caractères spéciaux ou numériques" - - #: panels/user-accounts/run-passwd.c:524 - #, c-format -@@ -6772,14 +6808,12 @@ msgstr "L’ancien et le nouveau mot de passe sont identiques" - #: panels/user-accounts/run-passwd.c:528 - #, c-format - msgid "Your password has been changed since you initially authenticated!" --msgstr "" --"Votre mot de passe a été modifié depuis que vous vous êtes authentifié !" -+msgstr "Votre mot de passe a été modifié depuis que vous vous êtes authentifié !" - - #: panels/user-accounts/run-passwd.c:532 - #, c-format - msgid "The new password does not contain enough different characters" --msgstr "" --"Le nouveau mot de passe ne comporte pas suffisamment de caractères différents" -+msgstr "Le nouveau mot de passe ne comporte pas suffisamment de caractères différents" - - #: panels/user-accounts/run-passwd.c:536 - #, c-format -@@ -6816,16 +6850,14 @@ msgstr "Impossible de joindre ce domaine" - msgid "" - "That login name didn’t work.\n" - "Please try again." --msgstr "" --"Cet identifiant de connexion ne fonctionne pas.\n" -+msgstr "Cet identifiant de connexion ne fonctionne pas.\n" - "Veuillez réessayer." - - #: panels/user-accounts/um-account-dialog.c:1048 - msgid "" - "That login password didn’t work.\n" - "Please try again." --msgstr "" --"Ce mot de passe de connexion ne fonctionne pas.\n" -+msgstr "Ce mot de passe de connexion ne fonctionne pas.\n" - "Veuillez réessayer." - - #: panels/user-accounts/um-account-dialog.c:1056 -@@ -6849,9 +6881,7 @@ msgstr "Administrateur" - #: panels/user-accounts/um-fingerprint-dialog.c:139 - msgid "" - "You are not allowed to access the device. Contact your system administrator." --msgstr "" --"Vous n’avez pas accès au périphérique. Contactez votre administrateur " --"système." -+msgstr "Vous n’avez pas accès au périphérique. Contactez votre administrateur système." - - #: panels/user-accounts/um-fingerprint-dialog.c:141 - msgid "The device is already in use." -@@ -6877,9 +6907,7 @@ msgstr "_Supprimer les empreintes" - msgid "" - "Do you want to delete your registered fingerprints so fingerprint login is " - "disabled?" --msgstr "" --"Souhaitez-vous supprimer les empreintes digitales enregistrées et désactiver " --"ainsi ce type de connexion ?" -+msgstr "Souhaitez-vous supprimer les empreintes digitales enregistrées et désactiver ainsi ce type de connexion ?" - - #: panels/user-accounts/um-fingerprint-dialog.c:440 - msgid "Done!" -@@ -6900,8 +6928,7 @@ msgstr "Impossible d’accéder au périphérique « %s »" - #: panels/user-accounts/um-fingerprint-dialog.c:584 - #, c-format - msgid "Could not start finger capture on “%s” device" --msgstr "" --"Impossible de démarrer la capture d’empreintes avec le périphérique « %s »" -+msgstr "Impossible de démarrer la capture d’empreintes avec le périphérique « %s »" - - #: panels/user-accounts/um-fingerprint-dialog.c:628 - msgid "Could not access any fingerprint readers" -@@ -6921,9 +6948,7 @@ msgstr "Contactez votre administrateur système pour assistance." - msgid "" - "To enable fingerprint login, you need to save one of your fingerprints, " - "using the “%s” device." --msgstr "" --"Pour activer l’authentification par empreintes digitales, vous devez " --"enregistrer une de vos empreintes à l’aide du périphérique « %s »." -+msgstr "Pour activer l’authentification par empreintes digitales, vous devez enregistrer une de vos empreintes à l’aide du périphérique « %s »." - - #: panels/user-accounts/um-fingerprint-dialog.c:718 - msgid "Selecting finger" -@@ -6969,7 +6994,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" -@@ -6977,7 +7002,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" -@@ -7014,7 +7039,7 @@ msgstr "Le mot de passe ne peut pas être modifié" - msgid "The passwords do not match." - msgstr "Les mots de passe ne concordent pas." - --#: panels/user-accounts/um-photo-dialog.c:226 -+#: panels/user-accounts/um-photo-dialog.c:227 - msgid "Browse for more pictures" - msgstr "Rechercher d’autres images" - -@@ -7042,92 +7067,87 @@ msgstr "Mot de passe non valide, essayez à nouveau" - msgid "Couldn’t connect to the %s domain: %s" - msgstr "Connexion au domaine %s impossible : %s" - --#: panels/user-accounts/um-user-panel.c:201 -+#: panels/user-accounts/um-user-panel.c:200 - msgid "Your account" - msgstr "Votre compte" - --#: panels/user-accounts/um-user-panel.c:381 -+#: panels/user-accounts/um-user-panel.c:380 - msgid "Failed to delete user" - msgstr "La suppression de l’utilisateur a échoué" - --#: 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 "La révocation de l’utilisateur géré à distance a échoué" - --#: panels/user-accounts/um-user-panel.c:604 -+#: panels/user-accounts/um-user-panel.c:603 - msgid "You cannot delete your own account." - msgstr "Vous ne pouvez pas supprimer votre propre compte." - --#: 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 est encore connecté" - --#: 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." --msgstr "" --"Supprimer un utilisateur alors qu’il est connecté peut laisser le système " --"dans un état instable." -+msgstr "Supprimer un utilisateur alors qu’il est connecté peut laisser le système dans un état instable." - --#: 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 "Voulez-vous conserver les fichiers 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." --msgstr "" --"Il est possible de conserver le répertoire personnel, les courriers " --"électroniques en attente (le « spool ») et les fichiers temporaires d’un " --"compte utilisateur lors de sa suppression." -+msgstr "Il est possible de conserver le répertoire personnel, les courriers électroniques en attente (le « spool ») et les fichiers temporaires d’un compte utilisateur lors de sa suppression." - --#: panels/user-accounts/um-user-panel.c:633 -+#: panels/user-accounts/um-user-panel.c:632 - msgid "_Delete Files" - msgstr "_Supprimer les fichiers" - --#: panels/user-accounts/um-user-panel.c:634 -+#: panels/user-accounts/um-user-panel.c:633 - msgid "_Keep Files" - msgstr "_Conserver les fichiers" - --#: 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 "Êtes-vous sûr de vouloir révoquer le compte distant de %s ?" - --#: panels/user-accounts/um-user-panel.c:652 -+#: panels/user-accounts/um-user-panel.c:651 - msgid "_Delete" - msgstr "_Supprimer" - --#: panels/user-accounts/um-user-panel.c:702 -+#: panels/user-accounts/um-user-panel.c:701 - msgctxt "Password mode" - msgid "Account disabled" - msgstr "Compte désactivé" - --#: 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 "À définir lors de la prochaine connexion" - --#: panels/user-accounts/um-user-panel.c:713 -+#: panels/user-accounts/um-user-panel.c:712 - msgctxt "Password mode" - msgid "None" - msgstr "Aucun" - --#: panels/user-accounts/um-user-panel.c:760 -+#: panels/user-accounts/um-user-panel.c:759 - msgid "Logged in" - msgstr "Connecté" - --#: panels/user-accounts/um-user-panel.c:1107 -+#: panels/user-accounts/um-user-panel.c:1106 - msgid "Failed to contact the accounts service" - msgstr "La connexion au service des comptes a échoué" - --#: 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 "Veuillez vérifier que AccountService est installé et activé." - -@@ -7135,45 +7155,40 @@ msgstr "Veuillez vérifier que AccountService est installé et activé." - #. * 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" --msgstr "" --"Pour effectuer les modifications,\n" -+msgstr "Pour effectuer les modifications,\n" - "cliquez d’abord sur l’icône *" - --#: panels/user-accounts/um-user-panel.c:1181 -+#: panels/user-accounts/um-user-panel.c:1180 - msgid "Create a user account" - msgstr "Créer un compte utilisateur" - --#: 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" --msgstr "" --"Pour créer un compte utilisateur,\n" -+msgstr "Pour créer un compte utilisateur,\n" - "cliquez d’abord sur l’icône *" - --#: panels/user-accounts/um-user-panel.c:1202 -+#: panels/user-accounts/um-user-panel.c:1201 - msgid "Delete the selected user account" - msgstr "Supprimer le compte utilisateur sélectionné" - --#: 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" --msgstr "" --"Pour supprimer le compte utilisateur sélectionné,\n" -+msgstr "Pour supprimer le compte utilisateur sélectionné,\n" - "cliquez d’abord sur l’icône *" - - #: panels/user-accounts/um-utils.c:496 - msgid "Sorry, that user name isn’t available. Please try another." --msgstr "" --"Désolé, ce nom d’utilisateur n’est pas disponible. Veuillez en choisir un " --"autre." -+msgstr "Désolé, ce nom d’utilisateur n’est pas disponible. Veuillez en choisir un autre." - - #: panels/user-accounts/um-utils.c:499 - #, c-format -@@ -7188,14 +7203,11 @@ msgstr "Le nom d’utilisateur ne peut pas débuter par « - »." - msgid "" - "The username should only consist of upper and lower case letters from a-z, " - "digits and the following characters: . - _" --msgstr "" --"Un nom d’utilisateur ne peut contenir que des lettres minuscules ou " --"majuscules de a à z et l’un de ces caractères : . - _" -+msgstr "Un nom d’utilisateur ne peut contenir que des lettres minuscules ou majuscules de a à z et l’un de ces caractères : . - _" - - #: panels/user-accounts/um-utils.c:509 - msgid "This will be used to name your home folder and can’t be changed." --msgstr "" --"Ceci est utilisé pour nommer votre dossier personnel et ne peut être modifié." -+msgstr "Ceci est utilisé pour nommer votre dossier personnel et ne peut être modifié." - - #: panels/wacom/button-mapping.ui:9 - msgid "Map Buttons" -@@ -7214,18 +7226,13 @@ msgstr "Associer les boutons aux fonctions" - msgid "" - "To edit a shortcut, choose the “Send Keystroke” action, press the keyboard " - "shortcut button and hold down the new keys or press Backspace to clear." --msgstr "" --"Pour modifier un raccourci, choisissez l’action « Send Keystroke », appuyez " --"sur le bouton du raccourci clavier et tenez enfoncées les nouvelles touches. " --"Sinon, appuyez sur la touche Retour arrière pour annuler." -+msgstr "Pour modifier un raccourci, choisissez l’action « Send Keystroke », appuyez sur le bouton du raccourci clavier et tenez enfoncées les nouvelles touches. Sinon, appuyez sur la touche Retour arrière pour annuler." - - #: panels/wacom/calibrator/calibrator-gui.c:83 - msgid "" - "Please tap the target markers as they appear on screen to calibrate the " - "tablet." --msgstr "" --"Veuillez taper sur les cibles lorsqu’elles apparaissent à l’écran pour " --"étalonner la tablette." -+msgstr "Veuillez taper sur les cibles lorsqu’elles apparaissent à l’écran pour étalonner la tablette." - - #: panels/wacom/calibrator/calibrator-gui.c:87 - msgid "Mis-click detected, restarting…" -@@ -7279,7 +7286,7 @@ msgstr "%d sur %d" - msgid "Display Mapping" - msgstr "Afficher la correspondance" - --#: 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 "Stylet" - -@@ -7294,9 +7301,7 @@ msgstr "Tablette Wacom" - - #: panels/wacom/gnome-wacom-panel.desktop.in.in:4 - msgid "Set button mappings and adjust stylus sensitivity for graphics tablets" --msgstr "" --"Associer les boutons et ajuster la sensibilité du stylet des tablettes " --"graphiques" -+msgstr "Associer les boutons et ajuster la sensibilité du stylet des tablettes graphiques" - - #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! - #: panels/wacom/gnome-wacom-panel.desktop.in.in:7 -@@ -7390,9 +7395,7 @@ msgstr "Aucun stylet trouvé" - - #: panels/wacom/wacom-stylus-page.ui:91 - msgid "Please move your stylus to the proximity of the tablet to configure it" --msgstr "" --"Veuillez placer votre stylet sur les cibles du bord de la tablette pour la " --"configurer" -+msgstr "Veuillez placer votre stylet sur les cibles du bord de la tablette pour la configurer" - - #: panels/wacom/wacom-stylus-page.ui:167 - msgid "Eraser Pressure Feel" -@@ -7438,9 +7441,7 @@ msgstr "Utilitaire pour configurer l’environnement GNOME" - msgid "" - "The control center is GNOME’s main interface for configuration of various " - "aspects of your desktop." --msgstr "" --"Le centre de contrôle est l’interface principale de GNOME pour la " --"configuration de divers aspects de votre environnement." -+msgstr "Le centre de contrôle est l’interface principale de GNOME pour la configuration de divers aspects de votre environnement." - - #: shell/cc-application.c:47 - msgid "Display version number" -@@ -7505,7 +7506,7 @@ msgstr "Quitter" - #: shell/help-overlay.ui:27 shell/help-overlay.ui:48 - msgctxt "shortcut window" - msgid "Search" --msgstr "Rechercher" -+msgstr "Recherche" - - #: shell/help-overlay.ui:35 - msgctxt "shortcut window" -@@ -7536,9 +7537,7 @@ msgstr "L’identifiant du dernier panneau de paramètres à ouvrir" - msgid "" - "The identifier for the last Settings panel to be opened. Unrecognised values " - "will be ignored and the first panel in the list selected." --msgstr "" --"L’identifiant du dernier panneau de paramètres à ouvrir. Les valeurs non " --"reconnues seront ignorées et le premier panneau de la liste sera sélectionné." -+msgstr "L’identifiant du dernier panneau de paramètres à ouvrir. Les valeurs non reconnues seront ignorées et le premier panneau de la liste sera sélectionné." - - #: shell/panel-list.ui:195 - msgid "No results found" -@@ -7569,3 +7568,7 @@ msgstr[1] "%u entrées" - #: subprojects/gvc/gvc-mixer-control.c:2738 - msgid "System Sounds" - msgstr "Sons système" -+ -+#~ msgid "OS name" -+#~ msgstr "Nom du système d’exploitation" -+ -diff --git a/po/ja.po b/po/ja.po -index bc144dd5d..f9ad4605c 100644 ---- a/po/ja.po -+++ b/po/ja.po -@@ -19,9 +19,8 @@ - msgid "" - msgstr "" - "Project-Id-Version: gnome-control-center master\n" --"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" --"control-center&keywords=I18N+L10N&component=general\n" --"POT-Creation-Date: 2017-09-12 10:59+0000\n" -+"Report-Msgid-Bugs-To: \n" -+"POT-Creation-Date: 2021-02-12 14:19+0100\n" - "PO-Revision-Date: 2017-09-19 22:58+0900\n" - "Last-Translator: Jiro Matsuzawa \n" - "Language-Team: Japanese \n" -@@ -31,213 +30,220 @@ msgstr "" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=1; plural=0;\n" - --#: ../panels/background/background.ui.h:1 -+#: panels/background/background.ui:49 - msgid "_Background" - msgstr "背景(_B)" - - #. This refers to a slideshow background --#: ../panels/background/background.ui.h:3 -+#: panels/background/background.ui:99 panels/background/background.ui:212 - msgid "Changes throughout the day" - msgstr "時間の経過とともに画像が変化します" - - #. To translators: This is a noun, not a verb --#: ../panels/background/background.ui.h:5 -+#: panels/background/background.ui:162 - msgid "_Lock Screen" - msgstr "ロック画面(_L)" - --#: ../panels/background/background.ui.h:6 -+#: panels/background/background.ui:268 - msgctxt "background, style" - msgid "Tile" - msgstr "並べる" - --#: ../panels/background/background.ui.h:7 -+#: panels/background/background.ui:272 - msgctxt "background, style" - msgid "Zoom" - msgstr "ズーム" - --#: ../panels/background/background.ui.h:8 -+#: panels/background/background.ui:276 - msgctxt "background, style" - msgid "Center" - msgstr "中央" - --#: ../panels/background/background.ui.h:9 -+#: panels/background/background.ui:280 - msgctxt "background, style" - msgid "Scale" - msgstr "サイズ調整" - --#: ../panels/background/background.ui.h:10 -+#: panels/background/background.ui:284 - msgctxt "background, style" - msgid "Fill" - msgstr "引き伸ばす" - --#: ../panels/background/background.ui.h:11 -+#: panels/background/background.ui:288 - msgctxt "background, style" - msgid "Span" - msgstr "スパン(複数に跨げる)" - --#: ../panels/background/cc-background-chooser-dialog.c:430 -+#: panels/background/cc-background-chooser-dialog.c:424 - msgid "Wallpapers" - msgstr "壁紙" - --#: ../panels/background/cc-background-chooser-dialog.c:439 -+#: panels/background/cc-background-chooser-dialog.c:433 - msgid "Colors" - msgstr "色" - - #. translators: This is the title of the wallpaper chooser dialog. --#: ../panels/background/cc-background-chooser-dialog.c:476 -+#: panels/background/cc-background-chooser-dialog.c:468 - msgid "Select Background" - msgstr "背景の選択" - --#: ../panels/background/cc-background-chooser-dialog.c:504 -+#: panels/background/cc-background-chooser-dialog.c:496 - msgid "Pictures" - msgstr "画像" - - #. translators: No pictures were found --#: ../panels/background/cc-background-chooser-dialog.c:536 -+#: panels/background/cc-background-chooser-dialog.c:528 - msgid "No Pictures Found" - msgstr "画像が見つかりません" - - #. translators: "Home" is used in place of the Pictures - #. * directory in the string below when XDG_PICTURES_DIR is - #. * undefined --#: ../panels/background/cc-background-chooser-dialog.c:554 --#: ../panels/search/cc-search-locations-dialog.c:302 -+#: panels/background/cc-background-chooser-dialog.c:545 -+#: panels/search/cc-search-locations-dialog.c:302 - msgid "Home" - msgstr "ホーム" - - #. translators: %s here is the name of the Pictures directory, the string should be translated in - #. * the context "You can add images to your Pictures folder and they will show up here" --#: ../panels/background/cc-background-chooser-dialog.c:566 -+#: panels/background/cc-background-chooser-dialog.c:555 - #, c-format - msgid "You can add images to your %s folder and they will show up here" - msgstr "画像を %s フォルダーに追加すると、その画像がここに表示されます。" - --#: ../panels/background/cc-background-chooser-dialog.c:573 --#: ../panels/color/cc-color-panel.c:225 ../panels/color/cc-color-panel.c:963 --#: ../panels/color/color-calibrate.ui.h:2 ../panels/color/color.ui.h:30 --#: ../panels/common/language-chooser.ui.h:3 --#: ../panels/display/cc-display-panel.c:2697 --#: ../panels/network/connection-editor/connection-editor.ui.h:1 --#: ../panels/network/connection-editor/vpn-helpers.c:181 --#: ../panels/network/connection-editor/vpn-helpers.c:310 --#: ../panels/network/net-device-wifi.c:1318 --#: ../panels/network/net-device-wifi.c:1398 --#: ../panels/network/net-device-wifi.c:1633 --#: ../panels/network/network-wifi.ui.h:1 --#: ../panels/printers/new-printer-dialog.ui.h:3 --#: ../panels/printers/pp-details-dialog.c:319 --#: ../panels/privacy/cc-privacy-panel.c:1049 --#: ../panels/region/format-chooser.ui.h:3 ../panels/region/input-chooser.ui.h:2 --#: ../panels/search/cc-search-locations-dialog.c:642 --#: ../panels/sharing/cc-sharing-panel.c:382 --#: ../panels/user-accounts/data/account-dialog.ui.h:2 --#: ../panels/user-accounts/data/join-dialog.ui.h:2 --#: ../panels/user-accounts/data/password-dialog.ui.h:2 --#: ../panels/user-accounts/um-fingerprint-dialog.c:264 --#: ../panels/user-accounts/um-photo-dialog.c:94 --#: ../panels/user-accounts/um-photo-dialog.c:221 --#: ../panels/user-accounts/um-user-panel.c:644 --#: ../panels/user-accounts/um-user-panel.c:662 -+#: 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: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: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: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: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 "キャンセル(_C)" - --#: ../panels/background/cc-background-chooser-dialog.c:574 -+#: panels/background/cc-background-chooser-dialog.c:561 - msgid "_Select" - msgstr "選択(_S)" - --#: ../panels/background/cc-background-item.c:203 -+#: panels/background/cc-background-item.c:192 - msgid "multiple sizes" - msgstr "複数のサイズ" - - #. translators: 100 × 100px - #. * Note that this is not an "x", but U+00D7 MULTIPLICATION SIGN --#: ../panels/background/cc-background-item.c:207 -+#: panels/background/cc-background-item.c:196 - #, c-format - msgid "%d × %d" - msgstr "%d × %d" - --#: ../panels/background/cc-background-item.c:333 -+#: panels/background/cc-background-item.c:321 - msgid "No Desktop Background" - msgstr "デスクトップの背景が見つかりません" - --#: ../panels/background/cc-background-panel.c:493 -+#: panels/background/cc-background-panel.c:291 - msgid "Current background" - msgstr "現在の背景" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/background/gnome-background-panel.desktop.in.in.h:2 --msgid "Back­ground" -+#: panels/background/gnome-background-panel.desktop.in.in:3 -+msgid "Background" - msgstr "背景" - --#: ../panels/background/gnome-background-panel.desktop.in.in.h:3 -+#: panels/background/gnome-background-panel.desktop.in.in:4 - msgid "Change your background image to a wallpaper or photo" - msgstr "背景画像を変更します。" - --#. Translators: those are keywords for the background control-center panel --#: ../panels/background/gnome-background-panel.desktop.in.in.h:5 -+#. 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: 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 "Wallpaper;Screen;Desktop;壁紙;スクリーン;デスクトップ;Background;背景;" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:268 -+#: panels/bluetooth/cc-bluetooth-panel.c:265 - msgid "Turn Off Airplane Mode" - msgstr "機内モードをオフにする" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:334 -+#: panels/bluetooth/cc-bluetooth-panel.c:330 - msgid "No Bluetooth Found" - msgstr "Bluetooth が見つかりません" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:334 -+#: panels/bluetooth/cc-bluetooth-panel.c:330 - msgid "Plug in a dongle to use Bluetooth." - msgstr "Bluetooth を使用するにはドングルを接続してください。" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:335 -+#: panels/bluetooth/cc-bluetooth-panel.c:331 - msgid "Bluetooth Turned Off" - msgstr "Bluetooth がオフになっています" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:335 -+#: panels/bluetooth/cc-bluetooth-panel.c:331 - msgid "Turn on to connect devices and receive file transfers." --msgstr "" --"デバイスの接続やファイルの受信を行うには Bluetooth をオンにしてください。" -+msgstr "デバイスの接続やファイルの受信を行うには Bluetooth をオンにしてください。" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:336 -+#: panels/bluetooth/cc-bluetooth-panel.c:332 - msgid "Airplane Mode is on" - msgstr "機内モードがオンになっています" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:336 -+#: panels/bluetooth/cc-bluetooth-panel.c:332 - msgid "Bluetooth is disabled when airplane mode is on." - msgstr "機内モードがオンの場合、Bluetooth は使用できません。" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:337 -+#: panels/bluetooth/cc-bluetooth-panel.c:333 - msgid "Hardware Airplane Mode is on" - msgstr "ハードウェア機内モードがオンになっています" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:337 -+#: panels/bluetooth/cc-bluetooth-panel.c:333 - msgid "Turn off the Airplane mode switch to enable Bluetooth." - msgstr "Bluetooth を使用するには機内モードスイッチをオフにしてください。" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/bluetooth/gnome-bluetooth-panel.desktop.in.in.h:2 --msgid "Blue­tooth" --msgstr "Blue­tooth" -+#. Translators: The found device is a printer connected via Bluetooth -+#: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:3 -+#: panels/printers/pp-new-printer-dialog.c:1816 -+msgid "Bluetooth" -+msgstr "Bluetooth" - --#: ../panels/bluetooth/gnome-bluetooth-panel.desktop.in.in.h:3 -+#: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Bluetooth のオン/オフやデバイスへの接続を行います。" - --#. Translators: those are keywords for the bluetooth control-center panel --#: ../panels/bluetooth/gnome-bluetooth-panel.desktop.in.in.h: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: 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 "share;sharing;bluetooth;obex;共有;シェアリング;ブルートゥース;" - - #. TRANSLATORS: The user has to attach the sensor to the screen --#: ../panels/color/cc-color-calibrate.c:361 -+#: panels/color/cc-color-calibrate.c:361 - msgid "Place your calibration device over the square and press “Start”" - msgstr "キャリブレーション装置を四角形に合わせて \"開始\" を押してください" - - #. TRANSLATORS: Some calibration devices need the user to move a - #. * dial or switch manually. We also show a picture showing them - #. * what to do... --#: ../panels/color/cc-color-calibrate.c:367 -+#: panels/color/cc-color-calibrate.c:367 - msgid "" - "Move your calibration device to the calibrate position and press “Continue”" - msgstr "キャリブレーション装置を測定位置に移動して \"次へ\" を押してください" -@@ -245,7 +251,7 @@ msgstr "キャリブレーション装置を測定位置に移動して \"次へ - #. TRANSLATORS: Some calibration devices need the user to move a - #. * dial or switch manually. We also show a picture showing them - #. * what to do... --#: ../panels/color/cc-color-calibrate.c:373 -+#: panels/color/cc-color-calibrate.c:373 - msgid "" - "Move your calibration device to the surface position and press “Continue”" - msgstr "キャリブレーション装置を表面の位置に移動して \"次へ\" を押してください" -@@ -253,158 +259,158 @@ msgstr "キャリブレーション装置を表面の位置に移動して \"次 - #. TRANSLATORS: on some hardware e.g. Lenovo W700 the sensor - #. * is built into the palmrest and we need to fullscreen the - #. * sample widget and shut the lid. --#: ../panels/color/cc-color-calibrate.c:379 -+#: panels/color/cc-color-calibrate.c:379 - msgid "Shut the laptop lid" - msgstr "ノート PC を閉じてください" - - #. TRANSLATORS: We suck, the calibation failed and we have no - #. * good idea why or any suggestions --#: ../panels/color/cc-color-calibrate.c:410 -+#: panels/color/cc-color-calibrate.c:410 - msgid "An internal error occurred that could not be recovered." - msgstr "回復できないエラーが発生しました。" - - #. TRANSLATORS: Some required-at-runtime tools were not - #. * installed, which should only affect insane distros --#: ../panels/color/cc-color-calibrate.c:415 -+#: panels/color/cc-color-calibrate.c:415 - msgid "Tools required for calibration are not installed." - msgstr "キャリブレーションに必要なツールがインストールされていません。" - - #. TRANSLATORS: The profile failed for some reason --#: ../panels/color/cc-color-calibrate.c:421 -+#: panels/color/cc-color-calibrate.c:421 - msgid "The profile could not be generated." - msgstr "プロファイルを生成できません。" - - #. TRANSLATORS: The user specified a whitepoint that was - #. * unobtainable with the hardware they've got -- see - #. * https://en.wikipedia.org/wiki/White_point for details --#: ../panels/color/cc-color-calibrate.c:427 -+#: panels/color/cc-color-calibrate.c:427 - msgid "The target whitepoint was not obtainable." - msgstr "対象の白色点は取得できません。" - - #. TRANSLATORS: the display calibration process is finished --#: ../panels/color/cc-color-calibrate.c:467 -+#: panels/color/cc-color-calibrate.c:467 - msgid "Complete!" - msgstr "完了!" - - #. TRANSLATORS: the display calibration failed, and we also show - #. * the translated (or untranslated) error string after this --#: ../panels/color/cc-color-calibrate.c:475 -+#: panels/color/cc-color-calibrate.c:475 - msgid "Calibration failed!" - msgstr "キャリブレーションに失敗!" - - #. TRANSLATORS: The user can now remove the sensor from the screen --#: ../panels/color/cc-color-calibrate.c:482 -+#: panels/color/cc-color-calibrate.c:482 - msgid "You can remove the calibration device." - msgstr "キャリブレーション装置を取り外せます。" - - #. TRANSLATORS: The user has to be careful not to knock the - #. * display off the screen (although we do cope if this is - #. * detected early enough) --#: ../panels/color/cc-color-calibrate.c:553 -+#: panels/color/cc-color-calibrate.c:553 - msgid "Do not disturb the calibration device while in progress" - msgstr "測定中はキャリブレーション装置に触らないでください" - - #. TRANSLATORS: This refers to the TFT display on a laptop --#: ../panels/color/cc-color-common.c:41 -+#: panels/color/cc-color-common.c:41 - msgid "Laptop Screen" - msgstr "ラップトップ画面" - - #. TRANSLATORS: This refers to the embedded webcam on a laptop --#: ../panels/color/cc-color-common.c:50 -+#: panels/color/cc-color-common.c:50 - msgid "Built-in Webcam" - msgstr "組み込みのウェブカム" - - #. TRANSLATORS: an externally connected display, where %s is either the - #. * model, vendor or ID, e.g. 'LP2480zx Monitor' --#: ../panels/color/cc-color-common.c:65 -+#: panels/color/cc-color-common.c:65 - #, c-format - msgid "%s Monitor" - msgstr "%s モニター" - - #. TRANSLATORS: a flatbed scanner device, e.g. 'Epson Scanner' --#: ../panels/color/cc-color-common.c:69 -+#: panels/color/cc-color-common.c:69 - #, c-format - msgid "%s Scanner" - msgstr "%s スキャナー" - - #. TRANSLATORS: a camera device, e.g. 'Nikon D60 Camera' --#: ../panels/color/cc-color-common.c:73 -+#: panels/color/cc-color-common.c:73 - #, c-format - msgid "%s Camera" - msgstr "%s カメラ" - - #. TRANSLATORS: a printer device, e.g. 'Epson Photosmart Printer' --#: ../panels/color/cc-color-common.c:77 -+#: panels/color/cc-color-common.c:77 - #, c-format - msgid "%s Printer" - msgstr "%s プリンター" - - #. TRANSLATORS: a webcam device, e.g. 'Philips HiDef Camera' --#: ../panels/color/cc-color-common.c:81 -+#: panels/color/cc-color-common.c:81 - #, c-format - msgid "%s Webcam" - msgstr "%s ウェブカム" - --#: ../panels/color/cc-color-device.c:89 -+#: panels/color/cc-color-device.c:89 - #, c-format - msgid "Enable color management for %s" - msgstr "%s のカラーマネージメントを有効にする" - --#: ../panels/color/cc-color-device.c:93 -+#: panels/color/cc-color-device.c:93 - #, c-format - msgid "Show color profiles for %s" - msgstr "%s のカラープロファイルを表示する" - - #. not calibrated --#: ../panels/color/cc-color-device.c:323 -+#: panels/color/cc-color-device.c:323 - msgid "Not calibrated" - msgstr "未較正" - - #. TRANSLATORS: this is a profile prefix to signify the - #. * profile has been auto-generated for this hardware --#: ../panels/color/cc-color-panel.c:141 -+#: panels/color/cc-color-panel.c:141 - msgid "Default: " - msgstr "デフォルト: " - - # ref. gnome-color-manager - #. TRANSLATORS: this is a profile prefix to signify the - #. * profile his a standard space like AdobeRGB --#: ../panels/color/cc-color-panel.c:149 -+#: panels/color/cc-color-panel.c:149 - msgid "Colorspace: " --msgstr "色空間:" -+msgstr "色空間: " - - #. TRANSLATORS: this is a profile prefix to signify the - #. * profile is a test profile --#: ../panels/color/cc-color-panel.c:156 -+#: panels/color/cc-color-panel.c:156 - msgid "Test profile: " - msgstr "テスト用プロファイル: " - - #. TRANSLATORS: an ICC profile is a file containing colorspace data --#: ../panels/color/cc-color-panel.c:223 -+#: panels/color/cc-color-panel.c:223 - msgid "Select ICC Profile File" - msgstr "ICC プロファイルの選択" - --#: ../panels/color/cc-color-panel.c:226 -+#: panels/color/cc-color-panel.c:226 - msgid "_Import" - msgstr "インポート(_I)" - - #. TRANSLATORS: filter name on the file->open dialog --#: ../panels/color/cc-color-panel.c:237 -+#: panels/color/cc-color-panel.c:237 - msgid "Supported ICC profiles" - msgstr "サポートする ICC プロファイル" - - #. TRANSLATORS: filter name on the file->open dialog --#: ../panels/color/cc-color-panel.c:244 --#: ../panels/network/wireless-security/eap-method-fast.c:417 -+#: panels/color/cc-color-panel.c:244 -+#: panels/network/wireless-security/eap-method-fast.c:417 - msgid "All files" - msgstr "すべてのファイル" - --#: ../panels/color/cc-color-panel.c:583 -+#: panels/color/cc-color-panel.c:583 - msgid "Screen" - msgstr "画面" - - #. TRANSLATORS: this is when the upload of the profile failed --#: ../panels/color/cc-color-panel.c:908 -+#: panels/color/cc-color-panel.c:908 - #, c-format - msgid "Failed to upload file: %s" - msgstr "ファイルのアップロードに失敗しました: %s" -@@ -412,69 +418,63 @@ msgstr "ファイルのアップロードに失敗しました: %s" - #. TRANSLATORS: these are instructions on how to recover - #. * the ICC profile on the native operating system and are - #. * only shown when the user uses a LiveCD to calibrate --#: ../panels/color/cc-color-panel.c:922 -+#: panels/color/cc-color-panel.c:922 - msgid "The profile has been uploaded to:" - msgstr "プロファイルがアップロードされました:" - --#: ../panels/color/cc-color-panel.c:924 -+#: panels/color/cc-color-panel.c:924 - msgid "Write down this URL." - msgstr "この URL をメモしてください。" - --#: ../panels/color/cc-color-panel.c:925 -+#: panels/color/cc-color-panel.c:925 - msgid "Restart this computer and boot your normal operating system." --msgstr "" --"このコンピューターを再起動して通常のオペレーティングシステムを起動してくださ" --"い。" -+msgstr "このコンピューターを再起動して通常のオペレーティングシステムを起動してください。" - --#: ../panels/color/cc-color-panel.c:926 -+#: panels/color/cc-color-panel.c:926 - msgid "Type the URL into your browser to download and install the profile." --msgstr "" --"ブラウザーで URL を入力し、プロファイルをダウンロードしてインストールしてくだ" --"さい。" -+msgstr "ブラウザーで URL を入力し、プロファイルをダウンロードしてインストールしてください。" - - #. TRANSLATORS: this is the dialog to save the ICC profile --#: ../panels/color/cc-color-panel.c:960 -+#: panels/color/cc-color-panel.c:960 - msgid "Save Profile" - msgstr "プロファイルの保存" - --#: ../panels/color/cc-color-panel.c:964 --#: ../panels/network/connection-editor/vpn-helpers.c:311 -+#: panels/color/cc-color-panel.c:964 -+#: panels/network/connection-editor/vpn-helpers.c:311 - msgid "_Save" - msgstr "保存(_S)" - - #. TRANSLATORS: this is when the button is sensitive --#: ../panels/color/cc-color-panel.c:1324 -+#: panels/color/cc-color-panel.c:1325 - msgid "Create a color profile for the selected device" - msgstr "選択したデバイスのカラープロファイルを作成" - - #. TRANSLATORS: this is when the button is insensitive --#: ../panels/color/cc-color-panel.c:1339 ../panels/color/cc-color-panel.c:1363 -+#: panels/color/cc-color-panel.c:1340 panels/color/cc-color-panel.c:1364 - msgid "" - "The measuring instrument is not detected. Please check it is turned on and " - "correctly connected." --msgstr "" --"計測器が検出できません。電源が入っていること、正しく接続されていることを確認" --"してください。" -+msgstr "計測器が検出できません。電源が入っていること、正しく接続されていることを確認してください。" - - #. TRANSLATORS: this is when the button is insensitive --#: ../panels/color/cc-color-panel.c:1373 -+#: panels/color/cc-color-panel.c:1374 - msgid "The measuring instrument does not support printer profiling." - msgstr "計測器がプリンターのプロファイルをサポートしていません。" - - #. TRANSLATORS: this is when the button is insensitive --#: ../panels/color/cc-color-panel.c:1384 -+#: panels/color/cc-color-panel.c:1385 - msgid "The device type is not currently supported." - msgstr "このデバイスの種類は現在サポートされていません。" - - #. TRANSLATORS: standard spaces are well known colorspaces like - #. * sRGB, AdobeRGB and ProPhotoRGB --#: ../panels/color/cc-color-profile.c:103 -+#: panels/color/cc-color-profile.c:103 - msgid "Standard Space" - msgstr "標準の色空間" - - #. TRANSLATORS: test profiles do things like changing the screen - #. * a different color, or swap the red and green channels --#: ../panels/color/cc-color-profile.c:109 -+#: panels/color/cc-color-profile.c:109 - msgid "Test Profile" - msgstr "テスト用プロファイル" - -@@ -482,7 +482,7 @@ msgstr "テスト用プロファイル" - #. * by the color management system based on manufacturing data, - #. * for instance the default monitor profile is created from the - #. * primaries specified in the monitor EDID --#: ../panels/color/cc-color-profile.c:117 -+#: panels/color/cc-color-profile.c:117 - msgctxt "Automatically generated profile" - msgid "Automatic" - msgstr "自動" -@@ -490,13 +490,13 @@ msgstr "自動" - #. TRANSLATORS: the profile quality - low quality profiles take - #. * much less time to generate but may be a poor reflection of the - #. * device capability --#: ../panels/color/cc-color-profile.c:127 -+#: panels/color/cc-color-profile.c:127 - msgctxt "Profile quality" - msgid "Low Quality" - msgstr "低品質" - - #. TRANSLATORS: the profile quality --#: ../panels/color/cc-color-profile.c:132 -+#: panels/color/cc-color-profile.c:132 - msgctxt "Profile quality" - msgid "Medium Quality" - msgstr "中品質" -@@ -504,62 +504,61 @@ msgstr "中品質" - #. TRANSLATORS: the profile quality - high quality profiles take - #. * a *long* time, and have the best calibration and - #. * characterisation data. --#: ../panels/color/cc-color-profile.c:139 -+#: panels/color/cc-color-profile.c:139 - msgctxt "Profile quality" - msgid "High Quality" - msgstr "高品質" - - #. TRANSLATORS: this default RGB space is used for printers that - #. * do not have additional printer profiles specified in the PPD --#: ../panels/color/cc-color-profile.c:156 -+#: panels/color/cc-color-profile.c:156 - msgctxt "Colorspace fallback" - msgid "Default RGB" - msgstr "デフォルト RGB" - - #. TRANSLATORS: this default CMYK space is used for printers that - #. * do not have additional printer profiles specified in the PPD --#: ../panels/color/cc-color-profile.c:163 -+#: panels/color/cc-color-profile.c:163 - msgctxt "Colorspace fallback" - msgid "Default CMYK" - msgstr "デフォルト CMYK" - - #. TRANSLATORS: this default gray space is used for printers that - #. * do not have additional printer profiles specified in the PPD --#: ../panels/color/cc-color-profile.c:170 -+#: panels/color/cc-color-profile.c:170 - msgctxt "Colorspace fallback" - msgid "Default Gray" - msgstr "デフォルトグレー" - --#: ../panels/color/cc-color-profile.c:194 -+#: panels/color/cc-color-profile.c:194 - msgid "Vendor supplied factory calibration data" - msgstr "ベンダーが提供している工場でのキャリブレーションデータ" - --#: ../panels/color/cc-color-profile.c:203 -+#: panels/color/cc-color-profile.c:203 - msgid "Full-screen display correction not possible with this profile" - msgstr "このプロファイルでは全画面表示での補正はできません" - --#: ../panels/color/cc-color-profile.c:225 -+#: panels/color/cc-color-profile.c:225 - msgid "This profile may no longer be accurate" - msgstr "このプロファイルはもう正確ではなくなっているかもしれません。" - --#: ../panels/color/color-calibrate.ui.h:1 -+#: panels/color/color-calibrate.ui:7 - msgid "Display Calibration" - msgstr "キャリブレーションの表示" - - #. This starts the calibration process --#: ../panels/color/color-calibrate.ui.h:4 -+#: panels/color/color-calibrate.ui:40 - msgid "_Start" - msgstr "開始(_S)" - - #. This resumes the calibration process --#: ../panels/color/color-calibrate.ui.h:6 -+#: panels/color/color-calibrate.ui:54 - msgid "_Resume" - msgstr "再開(_R)" - - #. This button returns the user back to the color control panel --#: ../panels/color/color-calibrate.ui.h:8 --#: ../panels/common/language-chooser.ui.h:2 --#: ../panels/region/format-chooser.ui.h:2 -+#: panels/color/color-calibrate.ui:67 panels/common/language-chooser.ui:12 -+#: panels/region/format-chooser.ui:14 - msgid "_Done" - msgstr "完了(_D)" - -@@ -567,380 +566,364 @@ msgstr "完了(_D)" - #. 15000 = 15 sec - #. 750 = 0.75 sec - #. Text printed on screen --#: ../panels/color/color.ui.h:1 ../panels/wacom/calibrator/calibrator-gui.c:82 -+#: panels/color/color.ui:6 panels/wacom/calibrator/calibrator-gui.c:82 - msgid "Screen Calibration" - msgstr "画面位置調整" - --#: ../panels/color/color.ui.h:2 -+#: panels/color/color.ui:23 - msgid "" - "Calibration will produce a profile that you can use to color manage your " - "screen. The longer you spend on calibration, the better the quality of the " - "color profile." --msgstr "" --"キャリブレーションは画面の色管理に利用できるプロファイルを作成します。キャリ" --"ブレーションに時間をかけるほど色プロファイルの品質は向上します。" -+msgstr "キャリブレーションは画面の色管理に利用できるプロファイルを作成します。キャリブレーションに時間をかけるほど色プロファイルの品質は向上します。" - --#: ../panels/color/color.ui.h:3 -+#: panels/color/color.ui:38 - msgid "" - "You will not be able to use your computer while calibration takes place." - msgstr "キャリブレーション処理中はコンピューターを使えなくなります。" - - #. This is the approximate time it takes to calibrate the display. --#: ../panels/color/color.ui.h:5 -+#: panels/color/color.ui:58 - msgid "Quality" - msgstr "品質" - - #. This is the approximate time it takes to calibrate the display. --#: ../panels/color/color.ui.h:7 -+#: panels/color/color.ui:75 - msgid "Approximate Time" - msgstr "予測時間" - --#: ../panels/color/color.ui.h:8 -+#: panels/color/color.ui:121 - msgid "Calibration Quality" - msgstr "キャリブレーション品質" - --#: ../panels/color/color.ui.h:9 -+#: panels/color/color.ui:137 - msgid "Select the sensor device you want to use for calibration." - msgstr "キャリブレーションに使用するセンサーデバイスを選択してください。" - --#: ../panels/color/color.ui.h:10 -+#: panels/color/color.ui:174 - msgid "Calibration Device" - msgstr "キャリブレーション装置" - --#: ../panels/color/color.ui.h:11 -+#: panels/color/color.ui:189 - msgid "Select the type of display that is connected." - msgstr "接続しているディスプレイの種類を選択してください。" - --#: ../panels/color/color.ui.h:12 -+#: panels/color/color.ui:226 - msgid "Display Type" - msgstr "ディスプレイの種類" - --#: ../panels/color/color.ui.h:13 -+#: panels/color/color.ui:241 - msgid "" - "Select a display target white point. Most displays should be calibrated to a " - "D65 illuminant." --msgstr "" --"表示対象の白色点を選択してください。ほとんどのディスプレイが D65 光源に対して" --"キャリブレーションを行えばいいはずです。" -+msgstr "表示対象の白色点を選択してください。ほとんどのディスプレイが D65 光源に対してキャリブレーションを行えばいいはずです。" - --#: ../panels/color/color.ui.h:14 -+#: panels/color/color.ui:278 - msgid "Profile Whitepoint" - msgstr "白色点のプロファイル作成" - --#: ../panels/color/color.ui.h:15 -+#: panels/color/color.ui:293 - msgid "" - "Please set the display to a brightness that is typical for you. Color " - "management will be most accurate at this brightness level." --msgstr "" --"ディスプレイを標準的に使っている輝度に設定してください。色管理はこの輝度で最" --"も正確になります。 " -+msgstr "ディスプレイを標準的に使っている輝度に設定してください。色管理はこの輝度で最も正確になります。" - --#: ../panels/color/color.ui.h:16 -+#: panels/color/color.ui:307 - msgid "" - "Alternatively, you can use the brightness level used with one of the other " - "profiles for this device." --msgstr "" --"他のプロファイルで使っている輝度をこのデバイス用に利用することもできます。" -+msgstr "他のプロファイルで使っている輝度をこのデバイス用に利用することもできます。" - --#: ../panels/color/color.ui.h:17 -+#: panels/color/color.ui:318 - msgid "Display Brightness" - msgstr "ディスプレイの明るさ" - --#: ../panels/color/color.ui.h:18 -+#: panels/color/color.ui:333 - msgid "" - "You can use a color profile on different computers, or even create profiles " - "for different lighting conditions." --msgstr "" --"異なるコンピューターの色プロファイルを利用したり、異なる照明条件のプロファイ" --"ルを作成することもできます。" -+msgstr "異なるコンピューターの色プロファイルを利用したり、異なる照明条件のプロファイルを作成することもできます。" - --#: ../panels/color/color.ui.h:19 -+#: panels/color/color.ui:348 - msgid "Profile Name:" - msgstr "プロファイル名:" - --#: ../panels/color/color.ui.h:20 -+#: panels/color/color.ui:377 - msgid "Profile Name" - msgstr "プロファイル名" - --#: ../panels/color/color.ui.h:21 -+#: panels/color/color.ui:392 - msgid "Profile successfully created!" - msgstr "プロファイルが正常に作成されました!" - --#: ../panels/color/color.ui.h:22 -+#: panels/color/color.ui:443 - msgid "Copy profile" - msgstr "プロファイルの複製" - --#: ../panels/color/color.ui.h:23 -+#: panels/color/color.ui:456 - msgid "Requires writable media" - msgstr "書き込み可能メディアが必要です" - --#: ../panels/color/color.ui.h:24 -+#: panels/color/color.ui:519 - msgid "Upload profile" - msgstr "プロファイルのアップロード" - --#: ../panels/color/color.ui.h:25 -+#: panels/color/color.ui:532 - msgid "Requires Internet connection" - msgstr "インターネット接続が必要です" - --#: ../panels/color/color.ui.h:26 -+#: panels/color/color.ui:591 - msgid "" - "You may find these instructions on how to use the profile on GNU/Linux, Apple OS X and Microsoft Windows systems useful." --msgstr "" --"GNU/LinuxApple OS XMicrosoft Windows システムでのプロファイルの利用方法が役立つ" --"かもしません。" -+msgstr "GNU/LinuxApple OS XMicrosoft Windows システムでのプロファイルの利用方法が役立つかもしません。" - --#: ../panels/color/color.ui.h:27 --#: ../panels/user-accounts/um-fingerprint-dialog.c:723 -+#: panels/color/color.ui:607 panels/user-accounts/um-fingerprint-dialog.c:720 - msgid "Summary" - msgstr "概要" - --#: ../panels/color/color.ui.h:28 -+#: panels/color/color.ui:621 - msgid "Add Profile" - msgstr "プロファイルの追加" - --#: ../panels/color/color.ui.h:29 -+#: panels/color/color.ui:643 - msgid "_Import File…" - msgstr "ファイルを読み込む(_I)…" - --#: ../panels/color/color.ui.h:31 --#: ../panels/network/connection-editor/net-connection-editor.c:519 --#: ../panels/printers/new-printer-dialog.ui.h:4 --#: ../panels/region/input-chooser.ui.h:3 --#: ../panels/user-accounts/data/account-dialog.ui.h:3 -+#: panels/color/color.ui:672 -+#: panels/network/connection-editor/net-connection-editor.c:519 -+#: panels/printers/new-printer-dialog.ui:80 panels/region/input-chooser.ui:22 -+#: panels/user-accounts/data/account-dialog.ui:47 - msgid "_Add" - msgstr "追加(_A)" - --#: ../panels/color/color.ui.h:32 -+#: panels/color/color.ui:732 - msgid "" - "Problems detected. The profile may not work correctly. Show " - "details." --msgstr "" --"問題が検出されました。プロファイルは正しく動作しない可能性があります。詳細を表示する。" -+msgstr "問題が検出されました。プロファイルは正しく動作しない可能性があります。詳細を表示する。" - --#: ../panels/color/color.ui.h:33 -+#: panels/color/color.ui:807 - msgid "Each device needs an up to date color profile to be color managed." --msgstr "" --"カラーマネージメントを行うには、各デバイスの最新のカラープロファイルが必要に" --"なります。" -+msgstr "カラーマネージメントを行うには、各デバイスの最新のカラープロファイルが必要になります。" - --#: ../panels/color/color.ui.h:34 -+#: panels/color/color.ui:829 - msgid "Learn more" - msgstr "もっと詳しく" - --#: ../panels/color/color.ui.h:35 -+#: panels/color/color.ui:834 - msgid "Learn more about color management" - msgstr "カラーマネージメントについてもっと詳しく知る" - --#: ../panels/color/color.ui.h:36 -+#: panels/color/color.ui:882 - msgid "_Set for all users" - msgstr "全ユーザー用に設定(_S)" - --#: ../panels/color/color.ui.h:37 -+#: panels/color/color.ui:886 panels/color/color.ui:901 -+#: panels/color/color.ui:902 - msgid "Set this profile for all users on this computer" - msgstr "コンピューターのすべてのユーザーでプロファイルを利用" - --#: ../panels/color/color.ui.h:38 -+#: panels/color/color.ui:897 - msgid "_Enable" - msgstr "有効にする(_E)" - --#: ../panels/color/color.ui.h:39 -+#: panels/color/color.ui:928 - msgid "_Add profile" - msgstr "プロファイルの追加(_A)" - --#: ../panels/color/color.ui.h:40 -+#: panels/color/color.ui:941 - msgid "_Calibrate…" - msgstr "キャリブレート(_C)…" - --#: ../panels/color/color.ui.h:41 -+#: panels/color/color.ui:945 - msgid "Calibrate the device" - msgstr "デバイスのキャリブレート" - --#: ../panels/color/color.ui.h:42 -+#: panels/color/color.ui:956 - msgid "_Remove profile" - msgstr "プロファイルの削除(_R)" - --#: ../panels/color/color.ui.h:43 -+#: panels/color/color.ui:969 - msgid "_View details" - msgstr "詳細を表示(_V)" - --#: ../panels/color/color.ui.h:44 -+#: panels/color/color.ui:1005 - msgid "Unable to detect any devices that can be color managed" - msgstr "カラーマネジメント対象のデバイスを検出できません" - --#: ../panels/color/color.ui.h:45 -+#: panels/color/color.ui:1047 - msgid "LCD" - msgstr "LCD" - --#: ../panels/color/color.ui.h:46 -+#: panels/color/color.ui:1052 - msgid "LED" - msgstr "LED" - --#: ../panels/color/color.ui.h:47 -+#: panels/color/color.ui:1057 - msgid "CRT" - msgstr "CRT" - --#: ../panels/color/color.ui.h:48 -+#: panels/color/color.ui:1062 - msgid "Projector" - msgstr "プロジェクター" - --#: ../panels/color/color.ui.h:49 -+#: panels/color/color.ui:1067 - msgid "Plasma" - msgstr "プラズマ" - --#: ../panels/color/color.ui.h:50 -+#: panels/color/color.ui:1072 - msgid "LCD (CCFL backlight)" - msgstr "LCD (CCFL バックライト)" - --#: ../panels/color/color.ui.h:51 -+#: panels/color/color.ui:1077 - msgid "LCD (RGB LED backlight)" - msgstr "LCD (RGB LED バックライト)" - --#: ../panels/color/color.ui.h:52 -+#: panels/color/color.ui:1082 - msgid "LCD (white LED backlight)" - msgstr "LCD (白色 LED バックライト)" - --#: ../panels/color/color.ui.h:53 -+#: panels/color/color.ui:1087 - msgid "Wide gamut LCD (CCFL backlight)" - msgstr "広色域 LCD (CCFL バックライト)" - --#: ../panels/color/color.ui.h:54 -+#: panels/color/color.ui:1092 - msgid "Wide gamut LCD (RGB LED backlight)" - msgstr "広色域 LCD (RGB LED backlight)" - --#: ../panels/color/color.ui.h:55 -+#: panels/color/color.ui:1109 - msgctxt "Calibration quality" - msgid "High" - msgstr "高" - --#: ../panels/color/color.ui.h:56 -+#: panels/color/color.ui:1110 - msgid "40 minutes" - msgstr "40 分" - --#: ../panels/color/color.ui.h:57 -+#: panels/color/color.ui:1114 - msgctxt "Calibration quality" - msgid "Medium" - msgstr "中" - --#: ../panels/color/color.ui.h:58 ../panels/power/power.ui.h:2 --#: ../panels/privacy/privacy.ui.h:7 -+#: panels/color/color.ui:1115 panels/power/power.ui:25 -+#: panels/privacy/privacy.ui:38 - msgid "30 minutes" - msgstr "30 分" - --#: ../panels/color/color.ui.h:59 -+#: panels/color/color.ui:1119 - msgctxt "Calibration quality" - msgid "Low" - msgstr "低" - --#: ../panels/color/color.ui.h:60 ../panels/power/power.ui.h:1 -+#: panels/color/color.ui:1120 panels/power/power.ui:13 panels/power/power.ui:95 - msgid "15 minutes" - msgstr "15 分" - --#: ../panels/color/color.ui.h:61 -+#: panels/color/color.ui:1142 - msgid "Native to display" - msgstr "ディスプレイ本来の設定" - --#: ../panels/color/color.ui.h:62 -+#: panels/color/color.ui:1146 - msgid "D50 (Printing and publishing)" - msgstr "D50 (印刷および出版)" - --#: ../panels/color/color.ui.h:63 -+#: panels/color/color.ui:1150 - msgid "D55" - msgstr "D55" - --#: ../panels/color/color.ui.h:64 -+#: panels/color/color.ui:1154 - msgid "D65 (Photography and graphics)" - msgstr "D65 (写真とグラフィック)" - --#: ../panels/color/color.ui.h:65 -+#: panels/color/color.ui:1158 - msgid "D75" - msgstr "D75" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/color/gnome-color-panel.desktop.in.in.h:2 --msgid "Co­lor" --msgstr "色管理" -+#: panels/color/gnome-color-panel.desktop.in.in:3 -+msgid "Color" -+msgstr "色" - --#: ../panels/color/gnome-color-panel.desktop.in.in.h:3 -+#: panels/color/gnome-color-panel.desktop.in.in:4 - msgid "" - "Calibrate the color of your devices, such as displays, cameras or printers" - msgstr "ディスプレイやカメラ、プリンター等のデバイスのキャリブレート" - --#. Translators: those are keywords for the color control-center panel --#: ../panels/color/gnome-color-panel.desktop.in.in.h:5 -+#. 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: 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 "" --"Color;ICC;Profile;Calibrate;Printer;Display;色;ICC;プロファイル;キャリブレー" --"ション;プリンター;ディスプレイ;" -+msgstr "Color;ICC;Profile;Calibrate;Printer;Display;色;ICC;プロファイル;キャリブレーション;プリンター;ディスプレイ;" - --#: ../panels/common/cc-common-language.c:323 -+#: panels/common/cc-common-language.c:323 - msgid "Other…" - msgstr "その他…" - --#: ../panels/common/cc-language-chooser.c:124 --#: ../panels/region/cc-format-chooser.c:269 --#: ../panels/region/cc-input-chooser.c:169 -+#: panels/common/cc-language-chooser.c:124 -+#: panels/region/cc-format-chooser.c:269 panels/region/cc-input-chooser.c:169 - msgid "More…" - msgstr "さらに…" - --#: ../panels/common/cc-language-chooser.c:140 -+#: panels/common/cc-language-chooser.c:140 - msgid "No languages found" - msgstr "言語が見つかりません" - --#: ../panels/common/cc-util.c:127 --#: ../panels/network/connection-editor/ce-page-details.c:106 -+#: panels/common/cc-util.c:127 -+#: panels/network/connection-editor/ce-page-details.c:106 - msgid "Today" - msgstr "今日" - --#: ../panels/common/cc-util.c:131 --#: ../panels/network/connection-editor/ce-page-details.c:108 -+#: panels/common/cc-util.c:131 -+#: panels/network/connection-editor/ce-page-details.c:108 - msgid "Yesterday" - msgstr "昨日" - - #. Translators: This is a date format string in the style of "Feb 24". --#: ../panels/common/cc-util.c:138 -+#: panels/common/cc-util.c:138 - msgid "%b %e" - msgstr "%m月%d日" - - #. Translators: This is a date format string in the style of "Feb 24, 2013". --#: ../panels/common/cc-util.c:143 -+#: panels/common/cc-util.c:143 - msgid "%b %e, %Y" - msgstr "%Y年%m月%d日" - --#: ../panels/common/language-chooser.ui.h:1 -+#: panels/common/language-chooser.ui:5 - msgid "Language" - msgstr "言語" - --#: ../panels/datetime/big.ui.h:1 ../panels/datetime/little.ui.h:1 --#: ../panels/datetime/middle.ui.h:1 ../panels/datetime/ydm.ui.h:1 -+#: panels/datetime/big.ui:16 panels/datetime/little.ui:16 -+#: panels/datetime/middle.ui:16 panels/datetime/ydm.ui:16 - msgid "Day" - msgstr "日" - --#: ../panels/datetime/big.ui.h:2 ../panels/datetime/little.ui.h:2 --#: ../panels/datetime/middle.ui.h:2 ../panels/datetime/ydm.ui.h:2 -+#: panels/datetime/big.ui:32 panels/datetime/little.ui:32 -+#: panels/datetime/middle.ui:32 panels/datetime/ydm.ui:32 - msgid "Month" - msgstr "月" - --#: ../panels/datetime/big.ui.h:3 ../panels/datetime/little.ui.h:3 --#: ../panels/datetime/middle.ui.h:3 ../panels/datetime/ydm.ui.h:3 -+#: panels/datetime/big.ui:48 panels/datetime/little.ui:48 -+#: panels/datetime/middle.ui:48 panels/datetime/ydm.ui:48 - msgid "Year" - msgstr "年" - - #. Translators: This is the full date and time format used in 12-hour mode. --#: ../panels/datetime/cc-datetime-panel.c:339 -+#: panels/datetime/cc-datetime-panel.c:333 - msgid "%e %B %Y, %l:%M %p" - msgstr "%Y年%B%d日 %p%I:%M" - - #. Translators: This is the full date and time format used in 24-hour mode. --#: ../panels/datetime/cc-datetime-panel.c:344 -+#: panels/datetime/cc-datetime-panel.c:338 - msgid "%e %B %Y, %R" - msgstr "%Y年%B%d日 %R" - - #. Translators: "city, country" --#: ../panels/datetime/cc-datetime-panel.c:522 -+#: panels/datetime/cc-datetime-panel.c:503 - #, c-format - msgctxt "timezone loc" - msgid "%s, %s" -@@ -948,7 +931,7 @@ msgstr "%2$s、%1$s" - - #. Update the timezone on the listbow row - #. Translators: "timezone (details)" --#: ../panels/datetime/cc-datetime-panel.c:552 -+#: panels/datetime/cc-datetime-panel.c:530 - #, c-format - msgctxt "timezone desc" - msgid "%s (%s)" -@@ -956,384 +939,366 @@ msgstr "%s (%s)" - - #. Translators: UTC here means the Coordinated Universal Time. - #. * %:::z will be replaced by the offset from UTC e.g. UTC+02 --#: ../panels/datetime/cc-datetime-panel.c:560 -+#: panels/datetime/cc-datetime-panel.c:537 - msgid "UTC%:::z" - msgstr "UTC%:::z" - - #. Translators: This is the time format used in 12-hour mode. --#: ../panels/datetime/cc-datetime-panel.c:565 -+#: panels/datetime/cc-datetime-panel.c:542 - msgid "%l:%M %p" - msgstr "%p%I:%M" - - #. Translators: This is the time format used in 24-hour mode. --#: ../panels/datetime/cc-datetime-panel.c:570 -+#: panels/datetime/cc-datetime-panel.c:547 - msgid "%R" - msgstr "%R" - - #. Update the text bubble in the timezone map - #. Translators: "timezone (utc shift)" --#: ../panels/datetime/cc-datetime-panel.c:575 -+#: panels/datetime/cc-datetime-panel.c:552 - #, c-format - msgctxt "timezone map" - msgid "%s (%s)" - msgstr "%s (%s)" - --#: ../panels/datetime/datetime.ui.h:1 -+#: panels/datetime/datetime.ui:22 - msgid "January" - msgstr "1月" - --#: ../panels/datetime/datetime.ui.h:2 -+#: panels/datetime/datetime.ui:25 - msgid "February" - msgstr "2月" - --#: ../panels/datetime/datetime.ui.h:3 -+#: panels/datetime/datetime.ui:28 - msgid "March" - msgstr "3月" - --#: ../panels/datetime/datetime.ui.h:4 -+#: panels/datetime/datetime.ui:31 - msgid "April" - msgstr "4月" - --#: ../panels/datetime/datetime.ui.h:5 -+#: panels/datetime/datetime.ui:34 - msgid "May" - msgstr "5月" - --#: ../panels/datetime/datetime.ui.h:6 -+#: panels/datetime/datetime.ui:37 - msgid "June" - msgstr "6月" - --#: ../panels/datetime/datetime.ui.h:7 -+#: panels/datetime/datetime.ui:40 - msgid "July" - msgstr "7月" - --#: ../panels/datetime/datetime.ui.h:8 -+#: panels/datetime/datetime.ui:43 - msgid "August" - msgstr "8月" - --#: ../panels/datetime/datetime.ui.h:9 -+#: panels/datetime/datetime.ui:46 - msgid "September" - msgstr "9月" - --#: ../panels/datetime/datetime.ui.h:10 -+#: panels/datetime/datetime.ui:49 - msgid "October" - msgstr "10月" - --#: ../panels/datetime/datetime.ui.h:11 -+#: panels/datetime/datetime.ui:52 - msgid "November" - msgstr "11月" - --#: ../panels/datetime/datetime.ui.h:12 -+#: panels/datetime/datetime.ui:55 - msgid "December" - msgstr "12月" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/datetime/datetime.ui.h:13 --#: ../panels/datetime/gnome-datetime-panel.desktop.in.in.h:2 -+#: panels/datetime/datetime.ui:61 -+#: panels/datetime/gnome-datetime-panel.desktop.in.in:3 - msgid "Date & Time" - msgstr "日付と時刻" - --#: ../panels/datetime/datetime.ui.h:14 -+#: panels/datetime/datetime.ui:106 - msgid "Hour" - msgstr "時" - - #. Translator: this is the separator between hours and minutes, like in HH∶MM --#: ../panels/datetime/datetime.ui.h:16 -+#: panels/datetime/datetime.ui:121 - msgid "∶" - msgstr "∶" - --#: ../panels/datetime/datetime.ui.h:17 -+#: panels/datetime/datetime.ui:143 - msgid "Minute" - msgstr "分" - --#: ../panels/datetime/datetime.ui.h:18 -+#: panels/datetime/datetime.ui:208 - msgid "Time Zone" - msgstr "タイムゾーン" - --#: ../panels/datetime/datetime.ui.h:19 -+#: panels/datetime/datetime.ui:228 - msgid "Search for a city" - msgstr "都市を検索する" - --#: ../panels/datetime/datetime.ui.h:20 -+#: panels/datetime/datetime.ui:304 - msgid "Automatic _Date & Time" - msgstr "自動日時設定(_D)" - --#: ../panels/datetime/datetime.ui.h:21 -+#: panels/datetime/datetime.ui:319 panels/datetime/datetime.ui:397 - msgid "Requires internet access" - msgstr "インターネットアクセスが必要です" - --#: ../panels/datetime/datetime.ui.h:22 -+#: panels/datetime/datetime.ui:382 - msgid "Automatic Time _Zone" - msgstr "自動タイムゾーン設定(_Z)" - --#: ../panels/datetime/datetime.ui.h:23 -+#: panels/datetime/datetime.ui:454 - msgid "Date & _Time" - msgstr "日付と時刻(_T)" - --#: ../panels/datetime/datetime.ui.h:24 -+#: panels/datetime/datetime.ui:502 - msgid "Time Z_one" - msgstr "タイムゾーン(_O)" - --#: ../panels/datetime/datetime.ui.h:25 -+#: panels/datetime/datetime.ui:570 - msgid "Time _Format" - msgstr "日時書式(_F)" - --#: ../panels/datetime/datetime.ui.h:26 -+#: panels/datetime/datetime.ui:588 - msgid "24-hour" - msgstr "24時制" - --#: ../panels/datetime/datetime.ui.h:27 -+#: panels/datetime/datetime.ui:589 - msgid "AM / PM" - msgstr "午前/午後" - --#: ../panels/datetime/gnome-datetime-panel.desktop.in.in.h:3 -+#: panels/datetime/gnome-datetime-panel.desktop.in.in:4 - msgid "Change the date and time, including time zone" - msgstr "日付、時刻、タイムゾーンを変更します。" - --#. Translators: those are keywords for the date and time control-center panel --#: ../panels/datetime/gnome-datetime-panel.desktop.in.in.h:5 -+#. 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: 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 "" --"Clock;Timezone;Location;時計;日付;時刻;時間;日時;タイムゾーン;場所;Date;Time;" -+msgstr "Clock;Timezone;Location;時計;日付;時刻;時間;日時;タイムゾーン;場所;Date;Time;" - --#: ../panels/datetime/org.gnome.controlcenter.datetime.policy.in.h:1 -+#: panels/datetime/org.gnome.controlcenter.datetime.policy.in:11 - msgid "Change system time and date settings" - msgstr "システムの時刻と日付の設定を変更" - --#: ../panels/datetime/org.gnome.controlcenter.datetime.policy.in.h:2 -+#: panels/datetime/org.gnome.controlcenter.datetime.policy.in:12 - msgid "To change time or date settings, you need to authenticate." - msgstr "時刻と日付の設定を変更するには、認証が必要です。" - --#: ../panels/display/cc-display-panel.c:738 -+#: panels/display/cc-display-panel.c:732 - msgctxt "Display rotation" - msgid "Landscape" - msgstr "横方向" - --#: ../panels/display/cc-display-panel.c:741 --#, fuzzy --#| msgid "Portrait" -+#: panels/display/cc-display-panel.c:735 - msgctxt "Display rotation" - msgid "Portrait Right" --msgstr "縦方向" -+msgstr "縦方向 (右)" - --#: ../panels/display/cc-display-panel.c:744 --#, fuzzy --#| msgid "Portrait" -+#: panels/display/cc-display-panel.c:738 - msgctxt "Display rotation" - msgid "Portrait Left" --msgstr "縦方向" -+msgstr "縦方向 (左)" - --#: ../panels/display/cc-display-panel.c:747 --#, fuzzy --#| msgid "Landscape" -+#: panels/display/cc-display-panel.c:741 - msgctxt "Display rotation" - msgid "Landscape (flipped)" - msgstr "横方向 (逆)" - - #. Translators: This option sets orientation of print (portrait, landscape...) --#: ../panels/display/cc-display-panel.c:788 --#: ../panels/display/cc-display-panel.c:838 --#: ../panels/printers/pp-options-dialog.c:558 -+#: panels/display/cc-display-panel.c:808 -+#: panels/printers/pp-options-dialog.c:558 - msgid "Orientation" - msgstr "向き" - --#: ../panels/display/cc-display-panel.c:881 --#: ../panels/display/cc-display-panel.c:933 --#: ../panels/display/cc-display-panel.c:1751 --#: ../panels/display/cc-display-panel.c:1797 --#: ../panels/printers/pp-options-dialog.c:87 -+#: panels/display/cc-display-panel.c:873 panels/display/cc-display-panel.c:1676 -+#: panels/printers/pp-options-dialog.c:87 - msgid "Resolution" - msgstr "解像度" - --#: ../panels/display/cc-display-panel.c:978 --#: ../panels/display/cc-display-panel.c:1049 -+#: panels/display/cc-display-panel.c:961 - msgid "Refresh Rate" - msgstr "リフレッシュレート" - --#: ../panels/display/cc-display-panel.c:1186 --#, fuzzy --#| msgctxt "background, style" --#| msgid "Scale" -+#: panels/display/cc-display-panel.c:1098 - msgid "Scale" - msgstr "サイズ調整" - --#: ../panels/display/cc-display-panel.c:1239 -+#: panels/display/cc-display-panel.c:1151 - msgid "Adjust for TV" - msgstr "TV向けに調整" - --#: ../panels/display/cc-display-panel.c:1451 --#: ../panels/display/cc-display-panel.c:1497 --#, fuzzy --#| msgid "Secondary Display" -+#: panels/display/cc-display-panel.c:1413 - msgid "Primary Display" --msgstr "セカンダリディスプレイ" -+msgstr "プライマリーディスプレイ" - --#: ../panels/display/cc-display-panel.c:1546 --#, fuzzy --#| msgid "Display Mapping" -+#: panels/display/cc-display-panel.c:1442 - msgid "Display Arrangement" --msgstr "画面のマッピング" -+msgstr "ディスプレイ配置" - --#: ../panels/display/cc-display-panel.c:1547 -+#: panels/display/cc-display-panel.c:1443 - msgid "" - "Drag displays to match your setup. The top bar is placed on the primary " - "display." --msgstr "" -+msgstr "セットアップに合わせてディスプレイをドラッグします。トップバーはプライマリーディスプレイに配置されます。" - --#: ../panels/display/cc-display-panel.c:1985 -+#: panels/display/cc-display-panel.c:1866 - msgid "Display Mode" - msgstr "ディスプレイモード" - --#: ../panels/display/cc-display-panel.c:2001 --#, fuzzy --#| msgid "Dis­plays" -+#: panels/display/cc-display-panel.c:1882 - msgid "Join Displays" --msgstr "ディスプレイ" -+msgstr "ディスプレイの結合" - --#: ../panels/display/cc-display-panel.c:2004 -+#: panels/display/cc-display-panel.c:1885 - msgid "Mirror" - msgstr "ミラー" - --#: ../panels/display/cc-display-panel.c:2007 -+#: panels/display/cc-display-panel.c:1888 - msgid "Single Display" - msgstr "シングルディスプレイ" - --#: ../panels/display/cc-display-panel.c:2693 -+#: panels/display/cc-display-panel.c:2593 - msgid "Apply Changes?" - msgstr "変更を適用しますか?" - --#: ../panels/display/cc-display-panel.c:2707 --#: ../panels/network/connection-editor/connection-editor.ui.h:2 --#: ../panels/network/network-wifi.ui.h:2 -+#: panels/display/cc-display-panel.c:2607 -+#: panels/network/connection-editor/connection-editor.ui:24 -+#: panels/network/network-wifi.ui:38 - msgid "_Apply" - msgstr "適用(_A)" - --#: ../panels/display/cc-display-panel.c:3083 -+#: 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:3299 --#: ../panels/notifications/cc-notifications-panel.c:293 --#: ../panels/power/cc-power-panel.c:1970 ../panels/power/cc-power-panel.c:1977 --#: ../panels/privacy/cc-privacy-panel.c:190 --#: ../panels/privacy/cc-privacy-panel.c:257 --#: ../panels/universal-access/cc-ua-panel.c:331 --#: ../panels/universal-access/cc-ua-panel.c:712 --#: ../panels/universal-access/cc-ua-panel.c:725 --#: ../panels/universal-access/cc-ua-panel.c:737 --#: ../panels/universal-access/cc-ua-panel.c:908 -+#: panels/display/cc-display-panel.c:3198 -+#: panels/notifications/cc-notifications-panel.c:292 -+#: 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 -+#: panels/universal-access/cc-ua-panel.c:727 -+#: panels/universal-access/cc-ua-panel.c:739 -+#: panels/universal-access/cc-ua-panel.c:910 - msgid "On" - msgstr "オン" - --#: ../panels/display/cc-display-panel.c:3299 ../panels/network/net-proxy.c:54 --#: ../panels/notifications/cc-notifications-panel.c:293 --#: ../panels/power/cc-power-panel.c:1964 ../panels/power/cc-power-panel.c:1975 --#: ../panels/privacy/cc-privacy-panel.c:190 --#: ../panels/privacy/cc-privacy-panel.c:257 --#: ../panels/universal-access/cc-ua-panel.c:331 --#: ../panels/universal-access/cc-ua-panel.c:712 --#: ../panels/universal-access/cc-ua-panel.c:725 --#: ../panels/universal-access/cc-ua-panel.c:737 --#: ../panels/universal-access/cc-ua-panel.c:908 --#: ../panels/universal-access/uap.ui.h:7 -+#: 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: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 -+#: panels/universal-access/cc-ua-panel.c:727 -+#: panels/universal-access/cc-ua-panel.c:739 -+#: panels/universal-access/cc-ua-panel.c:910 panels/universal-access/uap.ui:334 -+#: panels/universal-access/uap.ui:380 panels/universal-access/uap.ui:426 -+#: panels/universal-access/uap.ui:532 panels/universal-access/uap.ui:685 -+#: panels/universal-access/uap.ui:731 panels/universal-access/uap.ui:777 -+#: panels/universal-access/uap.ui:929 - msgid "Off" - msgstr "オフ" - --#: ../panels/display/cc-display-panel.c:3320 -+#: panels/display/cc-display-panel.c:3219 - msgid "_Night Light" - msgstr "夜間モード(_N)" - --#: ../panels/display/cc-display-panel.c:3385 -+#: panels/display/cc-display-panel.c:3284 - msgid "Could not get screen information" - msgstr "スクリーンの情報を取得できませんでした" - - #. This cancels the redshift inhibit. --#: ../panels/display/display.ui.h:2 -+#: panels/display/display.ui:71 - msgid "Restart Filter" - msgstr "フィルターを再起動" - - #. Inhibit the redshift functionality until the next day starts --#: ../panels/display/display.ui.h:4 -+#: panels/display/display.ui:103 - msgid "Temporarily Disabled Until Tomorrow" - msgstr "明日まで一時的に無効にする" - --#: ../panels/display/display.ui.h:5 -+#: panels/display/display.ui:144 - msgid "" - "Night light makes the screen color warmer. This can help to prevent eye " - "strain and sleeplessness." --msgstr "" --"夜間モードは画面の色を少し暖色にします。これは目の疲れを緩和し、不眠を防ぐの" --"に役立ちます。" -+msgstr "夜間モードは画面の色を少し暖色にします。これは目の疲れを緩和し、不眠を防ぐのに役立ちます。" - - #. This is the redshift functionality where we suppress blue light when the sun has gone down --#: ../panels/display/display.ui.h:7 -+#: panels/display/display.ui:171 panels/display/display.ui:567 - msgid "Night Light" - msgstr "夜間モード" - --#: ../panels/display/display.ui.h:8 -+#: panels/display/display.ui:187 - msgid "Schedule" - msgstr "スケジュール" - --#: ../panels/display/display.ui.h:9 -+#: panels/display/display.ui:215 - msgid "Sunset to Sunrise" - msgstr "日没から日の出まで" - --#: ../panels/display/display.ui.h:10 --#: ../panels/network/connection-editor/ip4-page.ui.h:4 --#: ../panels/network/connection-editor/ip6-page.ui.h:5 --#: ../panels/network/net-proxy.c:56 ../panels/network/network-proxy.ui.h:3 --#: ../panels/network/network-wifi.ui.h:26 --#: ../panels/privacy/cc-privacy-panel.c:217 -+#: panels/display/display.ui:229 -+#: panels/network/connection-editor/ip4-page.ui:69 -+#: panels/network/connection-editor/ip6-page.ui:83 -+#: panels/network/net-proxy.c:56 panels/network/network-proxy.ui:113 -+#: panels/network/network-wifi.ui:777 panels/network/network-wifi.ui:1054 -+#: panels/privacy/cc-privacy-panel.c:217 - msgid "Manual" - msgstr "手動" - --#: ../panels/display/display.ui.h:11 -+#: panels/display/display.ui:268 - msgid "From" - msgstr "開始" - --#: ../panels/display/display.ui.h:12 -+#: panels/display/display.ui:309 panels/display/display.ui:430 - msgid ":" - msgstr ":" - - #. This is the short form for the time period in the morning --#: ../panels/display/display.ui.h:14 -+#: panels/display/display.ui:343 panels/display/display.ui:464 - msgid "AM" - msgstr "午前" - - #. This is the short form for the time period in the afternoon --#: ../panels/display/display.ui.h:16 -+#: panels/display/display.ui:359 panels/display/display.ui:480 - msgid "PM" - msgstr "午後" - --#: ../panels/display/display.ui.h:17 -+#: panels/display/display.ui:528 - msgid "To" - msgstr "終了" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/display/gnome-display-panel.desktop.in.in.h:2 --msgid "Dis­plays" -+#: panels/display/gnome-display-panel.desktop.in.in:3 -+msgid "Displays" - msgstr "ディスプレイ" - --#: ../panels/display/gnome-display-panel.desktop.in.in.h:3 -+#: panels/display/gnome-display-panel.desktop.in.in:4 - msgid "Choose how to use connected monitors and projectors" - msgstr "接続したモニターやプロジェクターの使用方法を変更します。" - --#. Translators: those are keywords for the display control-center panel --#: ../panels/display/gnome-display-panel.desktop.in.in.h:5 -+#. 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: 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;" --msgstr "" --"Panel;Projector;xrandr;Screen;Resolution;Refresh;Monitor;Night;Light;Blue;" --"redshift;color;sunset;sunrise;パネル;プロジェクター;画面;解像度;リフレッシュ;" --"モニター;ナイトライト;夜間モード;ブルーライト;色管理;ディスプレイ;ディスプ" --"レー;Displays;日没;日の出;" -+msgstr "Panel;Projector;xrandr;Screen;Resolution;Refresh;Monitor;Night;Light;Blue;redshift;color;sunset;sunrise;パネル;プロジェクター;画面;解像度;リフレッシュ;モニター;ナイトライト;夜間モード;ブルーライト;色管理;ディスプレイ;ディスプレー;Displays;日没;日の出;" - - #. TRANSLATORS: AP type --#: ../panels/info/cc-info-overview-panel.c:381 --#: ../panels/info/cc-info-overview-panel.c:468 --#: ../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 "不明" - -@@ -1341,77 +1306,61 @@ msgstr "不明" - #. * example: - #. * "Fedora 25 (Workstation Edition); Build ID: xyz" or - #. * "Ubuntu 16.04 LTS; Build ID: jki" --#: ../panels/info/cc-info-overview-panel.c:476 -+#: panels/info/cc-info-overview-panel.c:473 - #, c-format - msgid "%s; Build ID: %s" - msgstr "%s (ビルド ID: %s)" - - #. translators: This is the type of architecture for the OS --#: ../panels/info/cc-info-overview-panel.c:493 -+#: panels/info/cc-info-overview-panel.c:490 - #, c-format - msgid "64-bit" - msgstr "64 ビット" - - #. translators: This is the type of architecture for the OS --#: ../panels/info/cc-info-overview-panel.c:496 -+#: panels/info/cc-info-overview-panel.c:493 - #, c-format - msgid "32-bit" - msgstr "32 ビット" - --#: ../panels/info/cc-info-overview-panel.c:807 -+#: panels/info/cc-info-overview-panel.c:782 - #, c-format - msgid "Version %s" - msgstr "バージョン %s" - --#: ../panels/info/cc-info-panel.c:138 --msgid "Section" --msgstr "セクション" -- --#: ../panels/info/cc-info-panel.c:147 ../panels/info/info.ui.h:1 --msgid "Overview" --msgstr "概要" -- --#: ../panels/info/cc-info-panel.c:153 ../panels/info/info.ui.h:2 --msgid "Default Applications" --msgstr "既定のアプリケーション" -- --#: ../panels/info/cc-info-panel.c:158 ../panels/info/info.ui.h:3 --msgid "Removable Media" --msgstr "リムーバブルメディア" -- --#: ../panels/info/cc-info-removable-media-panel.c:312 -+#: panels/info/cc-info-removable-media-panel.c:298 - msgid "Ask what to do" - msgstr "どうするか確認する" - --#: ../panels/info/cc-info-removable-media-panel.c:316 -+#: panels/info/cc-info-removable-media-panel.c:302 - msgid "Do nothing" - msgstr "なにもしない" - --#: ../panels/info/cc-info-removable-media-panel.c:320 -+#: panels/info/cc-info-removable-media-panel.c:306 - msgid "Open folder" - msgstr "フォルダーを開く" - --#: ../panels/info/cc-info-removable-media-panel.c:411 -+#: panels/info/cc-info-removable-media-panel.c:391 - msgid "Other Media" - msgstr "他のメディア" - --#: ../panels/info/cc-info-removable-media-panel.c:444 -+#: panels/info/cc-info-removable-media-panel.c:424 - msgid "Select an application for audio CDs" - msgstr "オーディオCD用のアプリケーションを選択" - --#: ../panels/info/cc-info-removable-media-panel.c:445 -+#: panels/info/cc-info-removable-media-panel.c:425 - msgid "Select an application for video DVDs" - msgstr "ビデオDVD用のアプリケーションを選択" - --#: ../panels/info/cc-info-removable-media-panel.c:446 -+#: panels/info/cc-info-removable-media-panel.c:426 - msgid "Select an application to run when a music player is connected" - msgstr "ミュージックプレイヤーが接続された時に実行するアプリケーションを選択" - --#: ../panels/info/cc-info-removable-media-panel.c:447 -+#: panels/info/cc-info-removable-media-panel.c:427 - msgid "Select an application to run when a camera is connected" - msgstr "カメラが接続された時に起動するアプリケーションを選択" - --#: ../panels/info/cc-info-removable-media-panel.c:448 -+#: panels/info/cc-info-removable-media-panel.c:428 - msgid "Select an application for software CDs" - msgstr "ソフトウェアの CD を開くアプリケーションを選択してください" - -@@ -1420,404 +1369,629 @@ msgstr "ソフトウェアの CD を開くアプリケーションを選択し - #. * If the shared-mime-info translation works for your language, - #. * simply leave these untranslated. - #. --#: ../panels/info/cc-info-removable-media-panel.c:460 -+#: panels/info/cc-info-removable-media-panel.c:440 - msgid "audio DVD" - msgstr "オーディオ DVD" - --#: ../panels/info/cc-info-removable-media-panel.c:461 -+#: panels/info/cc-info-removable-media-panel.c:441 - msgid "blank Blu-ray disc" - msgstr "空のブルーレイディスク" - --#: ../panels/info/cc-info-removable-media-panel.c:462 -+#: panels/info/cc-info-removable-media-panel.c:442 - msgid "blank CD disc" - msgstr "空の CD" - --#: ../panels/info/cc-info-removable-media-panel.c:463 -+#: panels/info/cc-info-removable-media-panel.c:443 - msgid "blank DVD disc" - msgstr "空の DVD" - --#: ../panels/info/cc-info-removable-media-panel.c:464 -+#: panels/info/cc-info-removable-media-panel.c:444 - msgid "blank HD DVD disc" - msgstr "空の HD DVD" - --#: ../panels/info/cc-info-removable-media-panel.c:465 -+#: panels/info/cc-info-removable-media-panel.c:445 - msgid "Blu-ray video disc" - msgstr "ブルーレイビデオディスク" - --#: ../panels/info/cc-info-removable-media-panel.c:466 -+#: panels/info/cc-info-removable-media-panel.c:446 - msgid "e-book reader" - msgstr "電子書籍リーダー" - --#: ../panels/info/cc-info-removable-media-panel.c:467 -+#: panels/info/cc-info-removable-media-panel.c:447 - msgid "HD DVD video disc" - msgstr "HD DVD ビデオディスク" - --#: ../panels/info/cc-info-removable-media-panel.c:468 -+#: panels/info/cc-info-removable-media-panel.c:448 - msgid "Picture CD" - msgstr "ピクチャーCD" - --#: ../panels/info/cc-info-removable-media-panel.c:469 -+#: panels/info/cc-info-removable-media-panel.c:449 - msgid "Super Video CD" - msgstr "スーパービデオCD" - --#: ../panels/info/cc-info-removable-media-panel.c:470 -+#: panels/info/cc-info-removable-media-panel.c:450 - msgid "Video CD" - msgstr "ビデオCD" - --#: ../panels/info/cc-info-removable-media-panel.c:471 -+#: panels/info/cc-info-removable-media-panel.c:451 - msgid "Windows software" - msgstr "Windows ソフトウェア" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/info/gnome-default-apps-panel.desktop.in.in.h:2 --msgid "Defa­ult Applications" -+#: panels/info/cc-subscription-details-dialog.c:125 -+msgid "Subscribed" -+msgstr "サブスクライブ済み" -+ -+#: panels/info/cc-subscription-details-dialog.c:127 -+msgid "No Specific Subscription" -+msgstr "特定のサブスクリプションはありません" -+ -+#: panels/info/cc-subscription-details-dialog.c:129 -+msgid "Not Subscribed" -+msgstr "サブスクライブなし" -+ -+#: panels/info/cc-subscription-details-dialog.c:138 -+msgid "Product Name" -+msgstr "製品名" -+ -+#: panels/info/cc-subscription-details-dialog.c:139 -+msgid "Product ID" -+msgstr "製品 ID" -+ -+#: panels/info/cc-subscription-details-dialog.c:140 -+msgid "Version" -+msgstr "バージョン" -+ -+#: panels/info/cc-subscription-details-dialog.c:141 -+msgid "Arch" -+msgstr "Arch" -+ -+#: panels/info/cc-subscription-details-dialog.c:142 -+msgid "Status" -+msgstr "ステータス" -+ -+#: panels/info/cc-subscription-details-dialog.c:146 -+msgid "Starts" -+msgstr "開始" -+ -+#: panels/info/cc-subscription-details-dialog.c:147 -+msgid "Ends" -+msgstr "終了" -+ -+#: 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 "登録の詳細" -+ -+#: panels/info/cc-subscription-details-dialog.c:188 -+msgid "Subscribe System" -+msgstr "システムのサブスクライブ" -+ -+#: panels/info/cc-subscription-details-dialog.c:201 -+msgid "Looking For Available Subscriptions…" -+msgstr "利用できる全サブスクリプションを検索中..." -+ -+#: panels/info/cc-subscription-details-dialog.c:215 -+msgid "Unregister System" -+msgstr "システムの登録解除" -+ -+#: panels/info/cc-subscription-details-dialog.c:229 -+msgid "Unregistering System…" -+msgstr "システムを登録解除中..." -+ -+#. 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 "インストール済みの製品は検出されませんでした。" -+ -+#: panels/info/cc-subscription-details-dialog.ui:42 -+msgid "_Unregister" -+msgstr "登録解除 (_U)" -+ -+#: panels/info/cc-subscription-details-dialog.ui:63 -+msgid "_Subscribe" -+msgstr "サブスクライブ (_S)" -+ -+#: panels/info/cc-subscription-details-dialog.ui:138 -+msgid "Failed to Unregister System" -+msgstr "システムの登録に失敗しました" -+ -+#: panels/info/cc-subscription-details-dialog.ui:197 -+msgid "This system is subscribed to receive software updates." -+msgstr "このシステムは、ソフトウェア更新を受け取るためにサブスクライブ済みです。" -+ -+#: panels/info/cc-subscription-details-dialog.ui:215 -+msgid "" -+"This system lacks subscriptions to receive updates for some installed " -+"software." -+msgstr "このシステムでは、インストールされている一部のソフトウェアの更新を受信するためのサブスクリプションが欠落しています。" -+ -+#: panels/info/cc-subscription-details-dialog.ui:233 -+msgid "This system lacks subscriptions to receive software updates." -+msgstr "このシステムには、ソフトウェア更新を受信するためのサブスクリプションが欠落しています。" -+ -+#: panels/info/cc-subscription-details-dialog.ui:251 -+msgid "This system is registered to receive software updates." -+msgstr "このシステムは、ソフトウェア更新を受信するために登録されています。" -+ -+#: panels/info/cc-subscription-details-dialog.ui:269 -+msgid "This system has no supported software installed." -+msgstr "このシステムには、対応ソフトウェアがインストールされていません。" -+ -+#: panels/info/cc-subscription-details-dialog.ui:303 -+msgid "_Unregister…" -+msgstr "登録解除...(_U)" -+ -+#: panels/info/cc-subscription-details-dialog.ui:324 -+msgid "_Subscribe…" -+msgstr "サブスクライブ...(_S)" -+ -+#: panels/info/cc-subscription-details-dialog.ui:357 -+msgid "" -+"Subscribing with Red Hat will allow this system to receive software updates." -+msgstr "Red Hat のサブスクライブ登録を行うと、このシステムはソフトウェアの更新を受け取ることができます。" -+ -+#: panels/info/cc-subscription-details-dialog.ui:391 -+msgid "" -+"Warning: unregistering this system will result in it no longer receiving " -+"software updates." -+msgstr "警告: このシステムの登録を解除すると、ソフトウェアの更新を受けられなくなります。" -+ -+#: panels/info/cc-subscription-register-dialog.c:81 -+#: panels/info/cc-subscription-register-dialog.ui:9 -+msgid "Register System" -+msgstr "システムの登録" -+ -+#: panels/info/cc-subscription-register-dialog.c:88 -+msgid "Registering System…" -+msgstr "システムを登録中..." -+ -+#: panels/info/cc-subscription-register-dialog.ui:37 -+msgid "_Register" -+msgstr "登録(_R)" -+ -+#: panels/info/cc-subscription-register-dialog.ui:107 -+msgid "Failed to Register System" -+msgstr "システムの登録に失敗しました" -+ -+#: panels/info/cc-subscription-register-dialog.ui:159 -+msgid "Register this system with Red Hat to receive software updates." -+msgstr "このシステムは、ソフトウェア更新を受信するために Red Hat に登録されています。" -+ -+#: panels/info/cc-subscription-register-dialog.ui:179 -+msgid "Registration Server" -+msgstr "登録サービス" -+ -+#: 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 "カスタムアドレス" -+ -+#: panels/info/cc-subscription-register-dialog.ui:236 -+msgid "_URL" -+msgstr "URL(_U)" -+ -+#: panels/info/cc-subscription-register-dialog.ui:270 -+msgid "Registration Type" -+msgstr "登録タイプ" -+ -+#: panels/info/cc-subscription-register-dialog.ui:289 -+msgid "Red Hat Account" -+msgstr "Red Hat アカウント" -+ -+#: panels/info/cc-subscription-register-dialog.ui:302 -+msgid "Activation Keys" -+msgstr "アクティベーションキー" -+ -+#: panels/info/cc-subscription-register-dialog.ui:355 -+msgid "_Login" -+msgstr "ログイン(_R)" -+ -+#: 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 "パスワード(_P)" -+ -+#: panels/info/cc-subscription-register-dialog.ui:427 -+#: panels/info/cc-subscription-register-dialog.ui:540 -+msgid "_Organization" -+msgstr "組織(_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 "アクティベーションキーをコンマで区切って入力します。アクティベーションキーの設定が競合する場合は、右端のキーが優先されます。" -+ -+#: panels/info/cc-subscription-register-dialog.ui:508 -+msgid "_Activation Keys" -+msgstr "アクティベーションキー(_A)" -+ -+#: panels/info/gnome-default-apps-panel.desktop.in.in:3 -+msgid "Default Applications" - msgstr "既定のアプリケーション" - --#: ../panels/info/gnome-default-apps-panel.desktop.in.in.h:3 -+#: panels/info/gnome-default-apps-panel.desktop.in.in:4 - msgid "Configure Default Applications" - msgstr "既定のアプリケーションを設定します" - --#. Translators: those are keywords for the Default Applications panel --#: ../panels/info/gnome-default-apps-panel.desktop.in.in.h:5 -+#. 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 "星付き" -+ -+#. 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 "" --"default;application;preferred;media;デフォルト;既定;アプリケーション;メディ" --"ア;" -+msgstr "default;application;preferred;media;デフォルト;既定;アプリケーション;メディア;" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/info/gnome-info-overview-panel.desktop.in.in.h:2 --msgid "Ab­out" -+#: panels/info/gnome-info-overview-panel.desktop.in.in:3 -+msgid "About" - msgstr "情報" - --#: ../panels/info/gnome-info-overview-panel.desktop.in.in.h:3 --#: ../panels/info/gnome-info-panel.desktop.in.in.h:3 -+#: panels/info/gnome-info-overview-panel.desktop.in.in:4 - msgid "View information about your system" - msgstr "システム情報を表示します。" - -+#. 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: 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.h:5 --#: ../panels/info/gnome-info-panel.desktop.in.in.h:5 -+#: 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;" --msgstr "" --"device;system;information;memory;processor;version;default;application;" --"preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;デバイス;システ" --"ム;情報;メモリ;プロセッサ;バージョン;デフォルト;アプリケーション;設定;オー" --"ディオ;音声;音楽;ミュージック;ビデオ;動画;ディスク;リムーバブルメディア;媒体;" --"自動起動;オートラン;Details;詳細;" -- --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/info/gnome-info-panel.desktop.in.in.h:2 --msgid "De­tails" --msgstr "詳細" -+msgstr "device;system;information;memory;processor;version;default;application;preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;デバイス;システム;情報;メモリ;プロセッサ;バージョン;デフォルト;アプリケーション;設定;オーディオ;音声;音楽;ミュージック;ビデオ;動画;ディスク;リムーバブルメディア;媒体;自動起動;オートラン;Details;詳細;" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/info/gnome-removable-media-panel.desktop.in.in.h:2 --msgid "Remo­vable Media" -+#: panels/info/gnome-removable-media-panel.desktop.in.in:3 -+msgid "Removable Media" - msgstr "リムーバブルメディア" - --#: ../panels/info/gnome-removable-media-panel.desktop.in.in.h:3 -+#: panels/info/gnome-removable-media-panel.desktop.in.in:4 - msgid "Configure Removable Media settings" - msgstr "リムーバブルメディアを設定します" - --#. Translators: those are keywords for the Removable Media panel --#: ../panels/info/gnome-removable-media-panel.desktop.in.in.h:5 -+#. 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: 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;" --msgstr "" --"device;system;default;application;preferred;cd;dvd;usb;audio;video;disc;" --"removable;media;autorun;デバイス;システム;デフォルト;既定;アプリケーション;設" --"定;オーディオ;音声;音楽;ミュージック;ビデオ;動画;ディスク;リムーバブルメディ" --"ア;媒体;自動起動;オートラン;" -+msgstr "device;system;default;application;preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;デバイス;システム;デフォルト;既定;アプリケーション;設定;オーディオ;音声;音楽;ミュージック;ビデオ;動画;ディスク;リムーバブルメディア;媒体;自動起動;オートラン;" - --#: ../panels/info/info-default-apps.ui.h:1 -+#: panels/info/info-default-apps.ui:31 - msgid "_Web" - msgstr "ウェブ(_W)" - --#: ../panels/info/info-default-apps.ui.h:2 -+#: panels/info/info-default-apps.ui:43 - msgid "_Mail" - msgstr "メール(_M)" - --#: ../panels/info/info-default-apps.ui.h:3 -+#: panels/info/info-default-apps.ui:59 - msgid "_Calendar" - msgstr "カレンダー(_C)" - --#: ../panels/info/info-default-apps.ui.h:4 -+#: panels/info/info-default-apps.ui:75 - msgid "M_usic" - msgstr "音楽(_U)" - --#: ../panels/info/info-default-apps.ui.h:5 -+#: panels/info/info-default-apps.ui:91 - msgid "_Video" - msgstr "ビデオ(_V)" - --#: ../panels/info/info-default-apps.ui.h:6 --#: ../panels/info/info-removable-media.ui.h:5 -+#: panels/info/info-default-apps.ui:162 panels/info/info-removable-media.ui:161 - msgid "_Photos" - msgstr "写真(_P)" - --#: ../panels/info/info-overview.ui.h:1 -+#: panels/info/info-overview.ui:61 - msgid "Device name" - msgstr "デバイス名" - --#: ../panels/info/info-overview.ui.h:2 -+#: panels/info/info-overview.ui:77 - msgid "Memory" - msgstr "メモリ" - --#: ../panels/info/info-overview.ui.h:3 -+#: panels/info/info-overview.ui:93 - msgid "Processor" - msgstr "プロセッサ" - --#: ../panels/info/info-overview.ui.h:4 -+#: panels/info/info-overview.ui:109 - msgid "Graphics" - msgstr "グラフィック" - --#. To translators: this field contains the distro name and version --#: ../panels/info/info-overview.ui.h:6 --msgid "OS name" --msgstr "OS 名" -- - #. To translators: this field contains the distro type --#: ../panels/info/info-overview.ui.h:8 -+#: panels/info/info-overview.ui:140 - msgid "OS type" - msgstr "OSの種類" - --#: ../panels/info/info-overview.ui.h:9 -+#: panels/info/info-overview.ui:156 - msgid "Virtualization" - msgstr "仮想化" - --#: ../panels/info/info-overview.ui.h:10 -+#: panels/info/info-overview.ui:172 - msgid "Disk" - msgstr "ディスク" - --#: ../panels/info/info-overview.ui.h:11 -+#: panels/info/info-overview.ui:277 - msgid "Calculating…" - msgstr "計算中…" - --#: ../panels/info/info-overview.ui.h:12 --msgid "Check for updates" --msgstr "更新の確認" -+#: panels/info/info-overview.ui:333 -+msgid "System Not Registered" -+msgstr "システムは登録されていません" -+ -+#: panels/info/info-overview.ui:345 -+msgid "Register this system to receive software updates." -+msgstr "ソフトウェア更新を受信するために、このシステムを登録します。" -+ -+#: panels/info/info-overview.ui:355 -+msgid "_Register…" -+msgstr "登録...(_R)" -+ -+#: panels/info/info-overview.ui:388 -+msgid "Registered System" -+msgstr "登録済みシステム" -+ -+#: panels/info/info-overview.ui:404 -+msgid "System is registered and able to receive software updates." -+msgstr "システムは登録されているため、ソフトウェア更新を受け取ることが可能です。" -+ -+#: panels/info/info-overview.ui:418 -+msgid "System is registered but is unable to receive all software updates." -+msgstr "システムは登録されていますが、すべてのソフトウェア更新を受信できません。" - --#: ../panels/info/info-removable-media.ui.h:1 -+#: panels/info/info-overview.ui:433 -+msgid "_Details" -+msgstr "詳細(_D)" -+ -+#: panels/info/info-overview.ui:457 -+msgid "_View Updates" -+msgstr "詳細を表示(_V)" -+ -+#: panels/info/info-removable-media.ui:43 - msgid "Select how media should be handled" - msgstr "メディアの処理方法を選択してください" - --#: ../panels/info/info-removable-media.ui.h:2 -+#: panels/info/info-removable-media.ui:74 - msgid "CD _audio" - msgstr "CD オーディオ(_A)" - --#: ../panels/info/info-removable-media.ui.h:3 -+#: panels/info/info-removable-media.ui:91 - msgid "_DVD video" - msgstr "DVD ビデオ(_D)" - --#: ../panels/info/info-removable-media.ui.h:4 -+#: panels/info/info-removable-media.ui:132 - msgid "_Music player" - msgstr "音楽プレイヤー(_M)" - --#: ../panels/info/info-removable-media.ui.h:6 -+#: panels/info/info-removable-media.ui:190 - msgid "_Software" - msgstr "ソフトウェア(_S)" - --#: ../panels/info/info-removable-media.ui.h:7 -+#: panels/info/info-removable-media.ui:228 - msgid "_Other Media…" - msgstr "他のメディア(_O)…" - --#: ../panels/info/info-removable-media.ui.h:8 -+#: panels/info/info-removable-media.ui:272 - msgid "_Never prompt or start programs on media insertion" --msgstr "" --"メディア挿入時にどう処理するか確認したり、プログラムを実行したりしない(_N)" -+msgstr "メディア挿入時にどう処理するか確認したり、プログラムを実行したりしない(_N)" - --#: ../panels/info/info-removable-media.ui.h:9 -+#: panels/info/info-removable-media.ui:331 - msgid "Select how other media should be handled" - msgstr "他のメディアの処理を選択してください" - --#: ../panels/info/info-removable-media.ui.h:10 -+#: panels/info/info-removable-media.ui:370 - msgid "_Action:" - msgstr "アクション(_A):" - --#: ../panels/info/info-removable-media.ui.h:11 -+#: panels/info/info-removable-media.ui:393 - msgid "_Type:" - msgstr "種類(_T):" - --#: ../panels/keyboard/00-multimedia.xml.in.h:1 -+#: panels/keyboard/00-multimedia.xml.in:2 - msgid "Sound and Media" - msgstr "音とメディア" - --#: ../panels/keyboard/00-multimedia.xml.in.h:2 -+#: panels/keyboard/00-multimedia.xml.in:4 - msgid "Volume mute" - msgstr "ミュートにする" - --#: ../panels/keyboard/00-multimedia.xml.in.h:3 -+#: panels/keyboard/00-multimedia.xml.in:6 - msgid "Volume down" - msgstr "音量を下げる" - --#: ../panels/keyboard/00-multimedia.xml.in.h:4 -+#: panels/keyboard/00-multimedia.xml.in:8 - msgid "Volume up" - msgstr "音量を上げる" - --#: ../panels/keyboard/00-multimedia.xml.in.h:5 -+#: panels/keyboard/00-multimedia.xml.in:10 - msgid "Launch media player" - msgstr "メディアプレイヤーを起動" - --#: ../panels/keyboard/00-multimedia.xml.in.h:6 -+#: panels/keyboard/00-multimedia.xml.in:12 - msgid "Play (or play/pause)" - msgstr "再生 (あるいは再生/一時停止)" - --#: ../panels/keyboard/00-multimedia.xml.in.h:7 -+#: panels/keyboard/00-multimedia.xml.in:14 - msgid "Pause playback" - msgstr "再生を一時停止" - --#: ../panels/keyboard/00-multimedia.xml.in.h:8 -+#: panels/keyboard/00-multimedia.xml.in:16 - msgid "Stop playback" - msgstr "再生を停止" - --#: ../panels/keyboard/00-multimedia.xml.in.h:9 -+#: panels/keyboard/00-multimedia.xml.in:18 - msgid "Previous track" - msgstr "前のトラック" - --#: ../panels/keyboard/00-multimedia.xml.in.h:10 -+#: panels/keyboard/00-multimedia.xml.in:20 - msgid "Next track" - msgstr "次のトラック" - --#: ../panels/keyboard/00-multimedia.xml.in.h:11 -+#: panels/keyboard/00-multimedia.xml.in:22 - msgid "Eject" - msgstr "取り出し" - --#: ../panels/keyboard/01-input-sources.xml.in.h:1 --#: ../panels/universal-access/uap.ui.h:12 -+#: panels/keyboard/01-input-sources.xml.in:4 panels/universal-access/uap.ui:576 - msgid "Typing" - msgstr "タイピング" - --#: ../panels/keyboard/01-input-sources.xml.in.h:2 -+#: panels/keyboard/01-input-sources.xml.in:8 - msgid "Switch to next input source" - msgstr "次の入力ソースへ切り替える" - --#: ../panels/keyboard/01-input-sources.xml.in.h:3 -+#: panels/keyboard/01-input-sources.xml.in:13 - msgid "Switch to previous input source" - msgstr "前の入力ソースへ切り替える" - --#: ../panels/keyboard/01-launchers.xml.in.h:1 -+#: panels/keyboard/01-launchers.xml.in:2 - msgid "Launchers" - msgstr "ランチャー" - --#: ../panels/keyboard/01-launchers.xml.in.h:2 -+#: panels/keyboard/01-launchers.xml.in:4 - msgid "Launch help browser" - msgstr "ヘルプブラウザーを起動" - --#: ../panels/keyboard/01-launchers.xml.in.h:3 ../shell/alt/cc-window.c:1590 --#: ../shell/cc-window.c:251 ../shell/cc-window.c:794 --#: ../shell/gnome-control-center.desktop.in.in.h:1 ../shell/window.ui.h:1 -+#: 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 "設定" - --#: ../panels/keyboard/01-launchers.xml.in.h:4 -+#: panels/keyboard/01-launchers.xml.in:8 - msgid "Launch calculator" - msgstr "電卓を起動" - --#: ../panels/keyboard/01-launchers.xml.in.h:5 -+#: panels/keyboard/01-launchers.xml.in:10 - msgid "Launch email client" - msgstr "メールクライアントを起動" - --#: ../panels/keyboard/01-launchers.xml.in.h:6 -+#: panels/keyboard/01-launchers.xml.in:12 - msgid "Launch web browser" - msgstr "ウェブブラウザーを起動" - --#: ../panels/keyboard/01-launchers.xml.in.h:7 -+#: panels/keyboard/01-launchers.xml.in:14 - msgid "Home folder" - msgstr "ホームフォルダー" - --#: ../panels/keyboard/01-launchers.xml.in.h:8 -+#: panels/keyboard/01-launchers.xml.in:16 -+#: panels/search/gnome-search-panel.desktop.in.in:3 shell/window.ui:157 -+msgid "Search" -+msgstr "検索" -+ -+#: panels/keyboard/01-launchers.xml.in:16 - msgctxt "keybinding" - msgid "Search" - msgstr "検索" - --#: ../panels/keyboard/01-screenshot.xml.in.h:1 -+#: panels/keyboard/01-screenshot.xml.in:2 - msgid "Screenshots" - msgstr "スクリーンショット" - --#. translators: $PICTURES will be replaced by the name of the XDG Pictures directory --#: ../panels/keyboard/01-screenshot.xml.in.h:3 -+#: panels/keyboard/01-screenshot.xml.in:6 - msgid "Save a screenshot to $PICTURES" - msgstr "スクリーンショットを$PICTURESフォルダーに保存する" - --#. translators: $PICTURES will be replaced by the name of the XDG Pictures directory --#: ../panels/keyboard/01-screenshot.xml.in.h:5 -+#: panels/keyboard/01-screenshot.xml.in:10 - msgid "Save a screenshot of a window to $PICTURES" - msgstr "ウィンドウのスクリーンショットを$PICTURESフォルダーに保存する" - --#. translators: $PICTURES will be replaced by the name of the XDG Pictures directory --#: ../panels/keyboard/01-screenshot.xml.in.h:7 -+#: panels/keyboard/01-screenshot.xml.in:14 - msgid "Save a screenshot of an area to $PICTURES" - msgstr "選択領域のスクリーンショットを$PICTURESフォルダーに保存する" - --#: ../panels/keyboard/01-screenshot.xml.in.h:8 -+#: panels/keyboard/01-screenshot.xml.in:17 - msgid "Copy a screenshot to clipboard" - msgstr "スクリーンショットをクリップボードにコピーする" - --#: ../panels/keyboard/01-screenshot.xml.in.h:9 -+#: panels/keyboard/01-screenshot.xml.in:20 - msgid "Copy a screenshot of a window to clipboard" - msgstr "ウィンドウのスクリーンショットをクリップボードにコピーする" - --#: ../panels/keyboard/01-screenshot.xml.in.h:10 -+#: panels/keyboard/01-screenshot.xml.in:23 - msgid "Copy a screenshot of an area to clipboard" - msgstr "選択領域のスクリーンショットをクリップボードにコピーする" - --#: ../panels/keyboard/01-screenshot.xml.in.h:11 -+#: panels/keyboard/01-screenshot.xml.in:26 - msgid "Record a short screencast" - msgstr "スクリーンキャストを撮る" - --#: ../panels/keyboard/01-system.xml.in.h:1 -+#: panels/keyboard/01-system.xml.in:2 - msgid "System" - msgstr "システム" - --#: ../panels/keyboard/01-system.xml.in.h:2 -+#: panels/keyboard/01-system.xml.in:4 - msgid "Log out" - msgstr "ログアウト" - --#: ../panels/keyboard/01-system.xml.in.h:3 -+#: panels/keyboard/01-system.xml.in:6 - msgid "Lock screen" - msgstr "画面をロック" - --#: ../panels/keyboard/50-accessibility.xml.in.h:1 -+#: panels/keyboard/50-accessibility.xml.in:2 -+#: panels/universal-access/gnome-universal-access-panel.desktop.in.in:3 - msgid "Universal Access" - msgstr "ユニバーサルアクセス" - --#: ../panels/keyboard/50-accessibility.xml.in.h:2 -+#: panels/keyboard/50-accessibility.xml.in:4 - msgid "Turn zoom on or off" - msgstr "ズームのオン/オフを切り替える" - --#: ../panels/keyboard/50-accessibility.xml.in.h:3 -+#: panels/keyboard/50-accessibility.xml.in:6 - msgid "Zoom in" - msgstr "ズームイン" - --#: ../panels/keyboard/50-accessibility.xml.in.h:4 -+#: panels/keyboard/50-accessibility.xml.in:8 - msgid "Zoom out" - msgstr "ズームアウト" - --#: ../panels/keyboard/50-accessibility.xml.in.h:5 -+#: panels/keyboard/50-accessibility.xml.in:10 - msgid "Turn screen reader on or off" - msgstr "スクリーンリーダーのオン/オフを切り替える" - --#: ../panels/keyboard/50-accessibility.xml.in.h:6 -+#: panels/keyboard/50-accessibility.xml.in:12 - msgid "Turn on-screen keyboard on or off" - msgstr "オンスクリーンキーボードのオン/オフを切り替える" - --#: ../panels/keyboard/50-accessibility.xml.in.h:7 -+#: panels/keyboard/50-accessibility.xml.in:14 - msgid "Increase text size" - msgstr "文字サイズを拡大" - --#: ../panels/keyboard/50-accessibility.xml.in.h:8 -+#: panels/keyboard/50-accessibility.xml.in:16 - msgid "Decrease text size" - msgstr "文字サイズを縮小" - --#: ../panels/keyboard/50-accessibility.xml.in.h:9 -+#: panels/keyboard/50-accessibility.xml.in:18 - msgid "High contrast on or off" - msgstr "ハイコントラストのオン/オフを切り替える" - --#: ../panels/keyboard/cc-keyboard-manager.c:506 --#: ../panels/keyboard/cc-keyboard-manager.c:514 --#: ../panels/keyboard/cc-keyboard-manager.c:822 -+#: panels/keyboard/cc-keyboard-manager.c:506 -+#: panels/keyboard/cc-keyboard-manager.c:514 -+#: panels/keyboard/cc-keyboard-manager.c:822 - msgid "Custom Shortcuts" - msgstr "独自のショートカット" - -@@ -1826,14 +2000,13 @@ msgstr "独自のショートカット" - #. - #. translators: - #. * The device has been disabled --#: ../panels/keyboard/cc-keyboard-option.c:276 --#: ../panels/keyboard/cc-keyboard-option.c:395 --#: ../panels/keyboard/keyboard-shortcuts.c:435 --#: ../panels/keyboard/shortcut-editor.ui.h:2 --#: ../panels/network/network-proxy.ui.h:4 --#: ../panels/network/network-wifi.ui.h:31 --#: ../panels/sound/gvc/gvc-mixer-control.c:1866 --#: ../panels/user-accounts/um-fingerprint-dialog.c:214 -+#: panels/keyboard/cc-keyboard-option.c:263 -+#: panels/keyboard/cc-keyboard-option.c:382 -+#: panels/keyboard/keyboard-shortcuts.c:435 -+#: panels/keyboard/shortcut-editor.ui:96 panels/network/network-proxy.ui:123 -+#: panels/network/network-wifi.ui:782 panels/network/network-wifi.ui:1059 -+#: panels/user-accounts/um-fingerprint-dialog.c:211 -+#: subprojects/gvc/gvc-mixer-control.c:1866 - msgid "Disabled" - msgstr "無効" - -@@ -1841,7 +2014,7 @@ msgstr "無効" - #. * chooser'. AltGr is often used for this purpose. See - #. * https://live.gnome.org/Design/SystemSettings/RegionAndLanguage - #. --#: ../panels/keyboard/cc-keyboard-option.c:354 -+#: panels/keyboard/cc-keyboard-option.c:341 - msgid "Alternative Characters Key" - msgstr "代替文字キー" - -@@ -1849,275 +2022,274 @@ msgstr "代替文字キー" - #. * sequences that are combined to form a single character. - #. * See http://en.wikipedia.org/wiki/Compose_key - #. --#: ../panels/keyboard/cc-keyboard-option.c:363 -+#: panels/keyboard/cc-keyboard-option.c:350 - msgid "Compose Key" - msgstr "Compose キー" - --#: ../panels/keyboard/cc-keyboard-option.c:368 -+#: panels/keyboard/cc-keyboard-option.c:355 - msgid "Modifiers-only switch to next source" - msgstr "次の入力ソースへ切り替える (修飾キーのみ)" - --#: ../panels/keyboard/cc-keyboard-panel.c:181 -+#: panels/keyboard/cc-keyboard-panel.c:181 - msgid "Reset All Shortcuts?" - msgstr "すべてのショートカットをリセットしますか?" - --#: ../panels/keyboard/cc-keyboard-panel.c:184 -+#: panels/keyboard/cc-keyboard-panel.c:184 - msgid "" - "Resetting the shortcuts may affect your custom shortcuts. This cannot be " - "undone." --msgstr "" --"ショートカットをリセットするとカスタムショートカットが影響を受ける可能性があ" --"ります。 この処理を元に戻すことはできません。" -+msgstr "ショートカットをリセットするとカスタムショートカットが影響を受ける可能性があります。 この処理を元に戻すことはできません。" - --#: ../panels/keyboard/cc-keyboard-panel.c:188 --#: ../panels/keyboard/shortcut-editor.ui.h:9 --#: ../panels/printers/authentication-dialog.ui.h:2 --#: ../panels/printers/ppd-selection-dialog.ui.h:2 -+#: panels/keyboard/cc-keyboard-panel.c:188 -+#: panels/keyboard/shortcut-editor.ui:346 -+#: panels/printers/authentication-dialog.ui:29 -+#: panels/printers/ppd-selection-dialog.ui:27 - msgid "Cancel" - msgstr "キャンセル" - --#: ../panels/keyboard/cc-keyboard-panel.c:189 -+#: panels/keyboard/cc-keyboard-panel.c:189 - msgid "Reset All" - msgstr "すべてリセット" - --#: ../panels/keyboard/cc-keyboard-panel.c:281 -+#: panels/keyboard/cc-keyboard-panel.c:281 - msgid "Reset the shortcut to its default value" - msgstr "ショートカットをデフォルトの値にリセットする" - --#: ../panels/keyboard/cc-keyboard-shortcut-editor.c:427 -+#: panels/keyboard/cc-keyboard-shortcut-editor.c:413 - #, c-format - msgid "" - "%s is already being used for %s. If you replace it, %s will be " - "disabled" --msgstr "" --"すでに %s は %s のために使われています。もし入れ替えなければ %s が無効" --"化されます。" -+msgstr "すでに %s は %s のために使われています。もし入れ替えなければ %s が無効化されます。" - --#: ../panels/keyboard/cc-keyboard-shortcut-editor.c:597 -+#: panels/keyboard/cc-keyboard-shortcut-editor.c:583 - msgid "Set Custom Shortcut" - msgstr "独自のショートカットの設定" - --#: ../panels/keyboard/cc-keyboard-shortcut-editor.c:597 -+#: panels/keyboard/cc-keyboard-shortcut-editor.c:583 - msgid "Set Shortcut" - msgstr "ショートカットの設定" - - #. Setup the top label --#: ../panels/keyboard/cc-keyboard-shortcut-editor.c:606 -+#: panels/keyboard/cc-keyboard-shortcut-editor.c:592 - #, c-format - msgid "Enter new shortcut to change %s." - msgstr "%s の新しいショートカットを入力してください。" - --#: ../panels/keyboard/cc-keyboard-shortcut-editor.c:1033 -+#: panels/keyboard/cc-keyboard-shortcut-editor.c:1019 - msgid "Add Custom Shortcut" - msgstr "ショートカットの追加" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/keyboard/gnome-keyboard-panel.desktop.in.in.h:2 --msgid "Key­board" -+#: panels/keyboard/gnome-keyboard-panel.desktop.in.in:3 -+msgid "Keyboard" - msgstr "キーボード" - --#: ../panels/keyboard/gnome-keyboard-panel.desktop.in.in.h:3 -+#: panels/keyboard/gnome-keyboard-panel.desktop.in.in:4 - msgid "View and change keyboard shortcuts and set your typing preferences" - msgstr "キーボードショートカットの表示や変更、タイピングの設定を行います" - --#. Translators: those are keywords for the keyboard control-center panel --#: ../panels/keyboard/gnome-keyboard-panel.desktop.in.in.h:5 -+#. 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: 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 "" --"Shortcut;Workspace;Window;Resize;Zoom;Contrast;Input;Source;Lock;Volume;" --"ショートカット;ワークスペース;ウィンドウ;リサイズ;サイズ変更;ズーム;コントラ" --"スト;入力;インプット;ソース;ロック;ボリューム;音量;" -+msgstr "Shortcut;Workspace;Window;Resize;Zoom;Contrast;Input;Source;Lock;Volume;ショートカット;ワークスペース;ウィンドウ;リサイズ;サイズ変更;ズーム;コントラスト;入力;インプット;ソース;ロック;ボリューム;音量;" - --#: ../panels/keyboard/gnome-keyboard-panel.ui.h:1 --#: ../panels/region/input-options.ui.h:4 ../shell/cc-application.c:251 -+#: panels/keyboard/gnome-keyboard-panel.ui:67 panels/region/input-options.ui:68 -+#: shell/cc-application.c:255 - msgid "Keyboard Shortcuts" - msgstr "キーボードショートカット" - --#: ../panels/keyboard/gnome-keyboard-panel.ui.h:2 -+#: panels/keyboard/gnome-keyboard-panel.ui:77 - msgid "Reset All…" - msgstr "すべてリセット…" - --#: ../panels/keyboard/gnome-keyboard-panel.ui.h:3 -+#: panels/keyboard/gnome-keyboard-panel.ui:78 - msgid "Reset all shortcuts to their default keybindings" - msgstr "すべてのショートカットをデフォルトのキーバインディングにリセットする" - --#: ../panels/keyboard/gnome-keyboard-panel.ui.h:4 -+#: panels/keyboard/gnome-keyboard-panel.ui:164 - msgid "No keyboard shortcut found" - msgstr "キーボードショートカットがありません" - --#: ../panels/keyboard/gnome-keyboard-panel.ui.h:5 ../shell/panel-list.ui.h:4 -+#: panels/keyboard/gnome-keyboard-panel.ui:175 shell/panel-list.ui:206 - msgid "Try a different search" - msgstr "別の検索を試す" - --#: ../panels/keyboard/shortcut-editor.ui.h:1 -+#: panels/keyboard/shortcut-editor.ui:68 panels/keyboard/shortcut-editor.ui:318 - msgid "Press Esc to cancel or Backspace to reset the keyboard shortcut." --msgstr "" --"Esc でキャンセル、Backspace でキーボードショートカットをリセットできます。" -+msgstr "Esc でキャンセル、Backspace でキーボードショートカットをリセットできます。" - --#: ../panels/keyboard/shortcut-editor.ui.h:3 --#: ../panels/printers/details-dialog.ui.h:1 --#: ../panels/sound/gvc-mixer-dialog.c:1493 --#: ../panels/sound/gvc-sound-theme-chooser.c:564 -+#: panels/keyboard/shortcut-editor.ui:156 panels/printers/details-dialog.ui:38 -+#: panels/sound/gvc-mixer-dialog.c:1480 -+#: panels/sound/gvc-sound-theme-chooser.c:554 - msgid "Name" - msgstr "名前" - --#: ../panels/keyboard/shortcut-editor.ui.h:4 -+#: panels/keyboard/shortcut-editor.ui:168 - msgid "Command" - msgstr "コマンド" - --#: ../panels/keyboard/shortcut-editor.ui.h:5 -+#: panels/keyboard/shortcut-editor.ui:180 - msgid "Shortcut" - msgstr "ショートカット" - --#: ../panels/keyboard/shortcut-editor.ui.h:6 -+#: panels/keyboard/shortcut-editor.ui:259 - msgid "Set Shortcut…" - msgstr "ショートカットの設定…" - --#: ../panels/keyboard/shortcut-editor.ui.h:7 --#: ../panels/network/network-wifi.ui.h:20 -+#: panels/keyboard/shortcut-editor.ui:272 panels/network/network-wifi.ui:594 - msgid "None" - msgstr "何もしない" - --#: ../panels/keyboard/shortcut-editor.ui.h:8 -+#: panels/keyboard/shortcut-editor.ui:303 - msgid "Enter the new shortcut" - msgstr "新しいショートカットキーを入力してください" - --#: ../panels/keyboard/shortcut-editor.ui.h:10 -+#: panels/keyboard/shortcut-editor.ui:357 - msgid "Remove" - msgstr "削除" - --#: ../panels/keyboard/shortcut-editor.ui.h:11 -+#: panels/keyboard/shortcut-editor.ui:367 - msgid "Add" - msgstr "追加" - --#: ../panels/keyboard/shortcut-editor.ui.h:12 -+#: panels/keyboard/shortcut-editor.ui:382 - msgid "Replace" - msgstr "入れ替え" - --#: ../panels/keyboard/shortcut-editor.ui.h:13 -+#: panels/keyboard/shortcut-editor.ui:395 - msgid "Set" - msgstr "設定" - - # Button Label --#: ../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 "設定を確認する(_S)" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/mouse/gnome-mouse-panel.desktop.in.in.h:2 --msgid "Mouse & Touch­pad" -+#: panels/mouse/gnome-mouse-panel.desktop.in.in:3 -+msgid "Mouse & Touchpad" - msgstr "マウスとタッチパッド" - --#: ../panels/mouse/gnome-mouse-panel.desktop.in.in.h:3 -+#: panels/mouse/gnome-mouse-panel.desktop.in.in:4 - msgid "" - "Change your mouse or touchpad sensitivity and select right or left-handed" - msgstr "マウスやタッチパッドの感度の変更、利き手の選択をします" - --#. Translators: those are keywords for the mouse and touchpad control-center panel --#: ../panels/mouse/gnome-mouse-panel.desktop.in.in.h:5 -+#. 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: 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;Pointer;Click;Tap;Double;Button;Trackball;トラックパッド;ポインター;" --"クリック;タップ;ダブル;ボタン;トラックボール;スクロール;Mouse;Touchpad;マウ" --"ス;タッチパッド;" -+msgstr "Trackpad;Pointer;Click;Tap;Double;Button;Trackball;トラックパッド;ポインター;クリック;タップ;ダブル;ボタン;トラックボール;スクロール;Mouse;Touchpad;マウス;タッチパッド;" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:1 -+#: panels/mouse/gnome-mouse-properties.ui:45 - msgid "General" - msgstr "全般" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:2 -+#: panels/mouse/gnome-mouse-properties.ui:83 - msgid "Primary Button" - msgstr "主ボタン" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:3 -+#: panels/mouse/gnome-mouse-properties.ui:102 - msgid "Sets the order of physical buttons on mice and touchpads." - msgstr "マウス、タッチパッドのボタンの順位を設定します。" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:4 -+#: panels/mouse/gnome-mouse-properties.ui:131 - msgid "Left" - msgstr "左" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:5 -+#: panels/mouse/gnome-mouse-properties.ui:141 - msgid "Right" - msgstr "右" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:6 -+#: panels/mouse/gnome-mouse-properties.ui:177 - msgid "Mouse" - msgstr "マウス" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:7 -+#: panels/mouse/gnome-mouse-properties.ui:216 - msgid "Mouse Speed" - msgstr "マウスの速度" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:8 -+#: panels/mouse/gnome-mouse-properties.ui:238 -+#: panels/mouse/gnome-mouse-properties.ui:543 - msgid "Double-click timeout" - msgstr "ダブルクリックと認識される最長クリック間隔" - -+#. Translators: This switch reverses the scrolling direction for mices. The term used comes from OS X so use the same translation if possible. - #. Translators: This switch reverses the scrolling direction for touchpads. The term used comes from OS X so use the same translation if possible. --#: ../panels/mouse/gnome-mouse-properties.ui.h:10 -+#: panels/mouse/gnome-mouse-properties.ui:275 -+#: panels/mouse/gnome-mouse-properties.ui:451 - msgid "Natural Scrolling" - msgstr "ナチュラルスクロール" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:11 -+#: panels/mouse/gnome-mouse-properties.ui:291 -+#: panels/mouse/gnome-mouse-properties.ui:467 - msgid "Scrolling moves the content, not the view." - msgstr "スクロールする方向にコンテンツが移動します。" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:12 -+#: panels/mouse/gnome-mouse-properties.ui:341 -+#: panels/mouse/gnome-mouse-properties.ui:386 - msgid "Touchpad" - msgstr "タッチパッド" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:13 -+#: panels/mouse/gnome-mouse-properties.ui:522 - msgid "Touchpad Speed" - msgstr "タッチパッドの速度" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:14 -+#: panels/mouse/gnome-mouse-properties.ui:581 - msgid "Tap to Click" - msgstr "タップでクリックする" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:15 -+#: panels/mouse/gnome-mouse-properties.ui:634 - msgid "Two-finger Scrolling" - msgstr "2本指でのスクロール" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:16 -+#: panels/mouse/gnome-mouse-properties.ui:687 - msgid "Edge Scrolling" - msgstr "エッジスクロール" - --#: ../panels/mouse/gnome-mouse-test.c:130 --#: ../panels/mouse/gnome-mouse-test.ui.h:1 -+#: panels/mouse/gnome-mouse-test.c:130 panels/mouse/gnome-mouse-test.ui:23 - msgid "Try clicking, double clicking, scrolling" - msgstr "クリック、ダブルクリック、スクロールを試してください" - --#: ../panels/mouse/gnome-mouse-test.c:135 -+#: panels/mouse/gnome-mouse-test.c:135 - msgid "Five clicks, GEGL time!" - msgstr "クリック 5 回、GEGLタイム" - --#: ../panels/mouse/gnome-mouse-test.c:140 -+#: panels/mouse/gnome-mouse-test.c:140 - msgid "Double click, primary button" - msgstr "ダブルクリック、主ボタン" - --#: ../panels/mouse/gnome-mouse-test.c:140 -+#: panels/mouse/gnome-mouse-test.c:140 - msgid "Single click, primary button" - msgstr "シングルクリック、主ボタン" - --#: ../panels/mouse/gnome-mouse-test.c:143 -+#: panels/mouse/gnome-mouse-test.c:143 - msgid "Double click, middle button" - msgstr "ダブルクリック、中央ボタン" - --#: ../panels/mouse/gnome-mouse-test.c:143 -+#: panels/mouse/gnome-mouse-test.c:143 - msgid "Single click, middle button" - msgstr "シングルクリック、中央ボタン" - --#: ../panels/mouse/gnome-mouse-test.c:146 -+#: panels/mouse/gnome-mouse-test.c:146 - msgid "Double click, secondary button" - msgstr "ダブルクリック、副ボタン" - --#: ../panels/mouse/gnome-mouse-test.c:146 -+#: panels/mouse/gnome-mouse-test.c:146 - msgid "Single click, secondary button" - msgstr "シングルクリック、副ボタン" - - #. add proxy to device list --#: ../panels/network/cc-network-panel.c:579 -+#: panels/network/cc-network-panel.c:583 - msgid "Network proxy" - msgstr "ネットワークプロキシ" - -@@ -2125,598 +2297,610 @@ msgstr "ネットワークプロキシ" - #. * 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 "%s VPN" - --#: ../panels/network/cc-network-panel.c:779 ../panels/network/wifi.ui.h:7 -+#: panels/network/cc-network-panel.c:810 panels/network/wifi.ui:282 - msgid "Oops, something has gone wrong. Please contact your software vendor." - msgstr "問題に遭遇しました。ソフトウェアベンダーに報告してください。" - --#: ../panels/network/cc-network-panel.c:785 -+#: panels/network/cc-network-panel.c:816 - msgid "NetworkManager needs to be running." - msgstr "NetworkManager が動作している必要があります。" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/network/cc-wifi-panel.c:209 --#: ../panels/network/gnome-wifi-panel.desktop.in.in.h:2 --#: ../panels/network/network-wifi.ui.h:58 -+#: panels/network/cc-wifi-panel.c:213 -+#: panels/network/gnome-wifi-panel.desktop.in.in:3 -+#: panels/network/network-wifi.ui:1769 - msgid "Wi-Fi" - msgstr "Wi-Fi" - --#: ../panels/network/connection-editor/8021x-security-page.ui.h:1 -+#: panels/network/connection-editor/8021x-security-page.ui:26 - msgid "802.1x _Security" - msgstr "802.1x セキュリティ(_S)" - --#: ../panels/network/connection-editor/8021x-security-page.ui.h:2 --#: ../panels/network/connection-editor/security-page.ui.h:2 --#: ../panels/wacom/wacom-stylus-page.ui.h:8 -+#: panels/network/connection-editor/8021x-security-page.ui:73 -+#: panels/network/connection-editor/security-page.ui:72 -+#: panels/wacom/wacom-stylus-page.ui:108 - msgid "page 1" - msgstr "ページ1" - --#: ../panels/network/connection-editor/8021x-security-page.ui.h:3 --#: ../panels/network/connection-editor/security-page.ui.h:3 --#: ../panels/network/wireless-security/eap-method-fast.ui.h:4 --#: ../panels/network/wireless-security/eap-method-peap.ui.h:4 --#: ../panels/network/wireless-security/eap-method-ttls.ui.h:1 -+#: panels/network/connection-editor/8021x-security-page.ui:224 -+#: panels/network/connection-editor/security-page.ui:223 -+#: panels/network/wireless-security/eap-method-fast.ui:50 -+#: panels/network/wireless-security/eap-method-peap.ui:48 -+#: panels/network/wireless-security/eap-method-ttls.ui:31 - msgid "Anony_mous identity" - msgstr "匿名の識別子(_M)" - --#: ../panels/network/connection-editor/8021x-security-page.ui.h:4 --#: ../panels/network/connection-editor/security-page.ui.h:4 -+#: panels/network/connection-editor/8021x-security-page.ui:238 -+#: panels/network/connection-editor/security-page.ui:237 - msgid "Inner _authentication" - msgstr "内部認証(_A)" - --#: ../panels/network/connection-editor/8021x-security-page.ui.h:5 --#: ../panels/network/connection-editor/security-page.ui.h:5 --#: ../panels/wacom/wacom-stylus-page.ui.h:16 -+#: panels/network/connection-editor/8021x-security-page.ui:281 -+#: panels/network/connection-editor/security-page.ui:280 -+#: panels/wacom/wacom-stylus-page.ui:426 - msgid "page 2" - msgstr "ページ2" - --#: ../panels/network/connection-editor/ce-page-8021x-security.c:101 --#: ../panels/network/connection-editor/ce-page-security.c:445 --#: ../panels/network/connection-editor/details-page.ui.h:3 --#: ../panels/network/network-wifi.ui.h:6 -+#: panels/network/connection-editor/ce-page-8021x-security.c:101 -+#: panels/network/connection-editor/ce-page-security.c:445 -+#: panels/network/connection-editor/details-page.ui:86 -+#: panels/network/network-wifi.ui:239 - msgid "Security" - msgstr "セキュリティ" - --#: ../panels/network/connection-editor/ce-page.c:481 -+#: panels/network/connection-editor/ce-page.c:481 - msgid "automatic" - msgstr "自動" - --#: ../panels/network/connection-editor/ce-page.c:521 -+#: panels/network/connection-editor/ce-page.c:521 - #, c-format - msgid "Profile %d" - msgstr "プロファイル %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:407 -+#: panels/network/connection-editor/ce-page-details.c:56 -+#: 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:412 --#: ../panels/network/network-wifi.ui.h:19 -+#: panels/network/connection-editor/ce-page-details.c:60 -+#: 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/connection-editor/ce-page-details.c:64 -+#: 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/connection-editor/ce-page-details.c:69 -+#: panels/network/net-device-wifi.c:248 - msgid "Enterprise" - msgstr "Enterprise" - --#: ../panels/network/connection-editor/ce-page-details.c:74 --#: ../panels/network/net-device-wifi.c:249 --#: ../panels/network/net-device-wifi.c:397 -+#: panels/network/connection-editor/ce-page-details.c:74 -+#: panels/network/net-device-wifi.c:253 panels/network/net-device-wifi.c:458 - msgctxt "Wifi security" - msgid "None" - msgstr "なし" - --#: ../panels/network/connection-editor/ce-page-details.c:95 --#: ../panels/power/power.ui.h:17 -+#: panels/network/connection-editor/ce-page-details.c:95 -+#: panels/power/power.ui:99 - msgid "Never" - msgstr "しない" - --#: ../panels/network/connection-editor/ce-page-details.c:110 --#: ../panels/network/net-device-ethernet.c:120 --#: ../panels/network/net-device-wifi.c:505 -+#: panels/network/connection-editor/ce-page-details.c:110 -+#: panels/network/net-device-ethernet.c:121 -+#: panels/network/net-device-wifi.c:567 - #, c-format - msgid "%i day ago" - msgid_plural "%i days ago" - msgstr[0] "%i 日前" - - #. Translators: network device speed --#: ../panels/network/connection-editor/ce-page-details.c:176 --#: ../panels/network/net-device-ethernet.c:50 --#: ../panels/network/net-device-wifi.c:561 -+#: panels/network/connection-editor/ce-page-details.c:225 -+#: 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:202 --#: ../panels/network/net-device-wifi.c:590 -+#: panels/network/connection-editor/ce-page-details.c:251 -+#: panels/network/net-device-wifi.c:675 - msgctxt "Signal strength" - msgid "None" - msgstr "なし" - --#: ../panels/network/connection-editor/ce-page-details.c:204 --#: ../panels/network/net-device-wifi.c:592 -+#: panels/network/connection-editor/ce-page-details.c:253 -+#: panels/network/net-device-wifi.c:677 - msgctxt "Signal strength" - msgid "Weak" - msgstr "弱い" - --#: ../panels/network/connection-editor/ce-page-details.c:206 --#: ../panels/network/net-device-wifi.c:594 -+#: panels/network/connection-editor/ce-page-details.c:255 -+#: panels/network/net-device-wifi.c:679 - msgctxt "Signal strength" - msgid "Ok" - msgstr "OK" - --#: ../panels/network/connection-editor/ce-page-details.c:208 --#: ../panels/network/net-device-wifi.c:596 -+#: panels/network/connection-editor/ce-page-details.c:257 -+#: panels/network/net-device-wifi.c:681 - msgctxt "Signal strength" - msgid "Good" - msgstr "良い" - --#: ../panels/network/connection-editor/ce-page-details.c:210 --#: ../panels/network/net-device-wifi.c:598 -+#: panels/network/connection-editor/ce-page-details.c:259 -+#: panels/network/net-device-wifi.c:683 - msgctxt "Signal strength" - msgid "Excellent" - msgstr "非常に良い" - --#: ../panels/network/connection-editor/ce-page-details.c:248 -+#: panels/network/connection-editor/ce-page-details.c:302 - msgid "Forget Connection" - msgstr "接続情報を破棄" - --#: ../panels/network/connection-editor/ce-page-details.c:250 -+#: panels/network/connection-editor/ce-page-details.c:304 - msgid "Remove Connection Profile" - msgstr "接続プロファイルを削除" - --#: ../panels/network/connection-editor/ce-page-details.c:252 -+#: panels/network/connection-editor/ce-page-details.c:306 - msgid "Remove VPN" - msgstr "VPNを削除" - --#: ../panels/network/connection-editor/ce-page-details.c:280 --#: ../panels/network/network-wifi.ui.h:46 ../shell/cc-window.c:243 --#: ../shell/panel-list.ui.h:2 -+#: panels/network/connection-editor/ce-page-details.c:334 -+#: panels/network/network-wifi.ui:1456 shell/cc-window.c:212 -+#: shell/panel-list.ui:103 - msgid "Details" - msgstr "詳細" - --#: ../panels/network/connection-editor/ce-page-ethernet.c:173 --#: ../panels/network/connection-editor/ce-page-vpn.c:188 --#: ../panels/network/connection-editor/ce-page-wifi.c:194 --#: ../panels/network/network-wifi.ui.h:47 -+#: panels/network/connection-editor/ce-page-ethernet.c:174 -+#: panels/network/connection-editor/ce-page-vpn.c:188 -+#: panels/network/connection-editor/ce-page-wifi.c:194 -+#: panels/network/network-wifi.ui:1460 - msgid "Identity" - msgstr "Identity" - --#: ../panels/network/connection-editor/ce-page-ip4.c:251 --#: ../panels/network/connection-editor/ce-page-ip6.c:230 -+#: panels/network/connection-editor/ce-page-ip4.c:251 -+#: panels/network/connection-editor/ce-page-ip6.c:230 - msgid "Delete Address" - msgstr "アドレスを削除" - --#: ../panels/network/connection-editor/ce-page-ip4.c:422 --#: ../panels/network/connection-editor/ce-page-ip6.c:390 -+#: panels/network/connection-editor/ce-page-ip4.c:422 -+#: panels/network/connection-editor/ce-page-ip6.c:390 - msgid "Delete Route" - msgstr "ルートを削除" - --#: ../panels/network/connection-editor/ce-page-ip4.c:896 --#: ../panels/network/network-wifi.ui.h:48 -+#: 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:827 --#: ../panels/network/network-wifi.ui.h:49 -+#: panels/network/connection-editor/ce-page-ip6.c:831 -+#: panels/network/network-wifi.ui:1468 - msgid "IPv6" - msgstr "IPv6" - --#: ../panels/network/connection-editor/ce-page-security.c:245 -+#: panels/network/connection-editor/ce-page-security.c:245 - msgctxt "Wi-Fi/Ethernet security" - msgid "None" - msgstr "なし" - --#: ../panels/network/connection-editor/ce-page-security.c:268 -+#: panels/network/connection-editor/ce-page-security.c:268 - msgid "WEP 40/128-bit Key (Hex or ASCII)" - msgstr "WEP 40/128-bit キー (HEX または ASCII)" - --#: ../panels/network/connection-editor/ce-page-security.c:278 -+#: panels/network/connection-editor/ce-page-security.c:278 - msgid "WEP 128-bit Passphrase" - msgstr "WEP 128-bit パスフレーズ" - --#: ../panels/network/connection-editor/ce-page-security.c:291 --#: ../panels/network/wireless-security/wireless-security.c:465 -+#: panels/network/connection-editor/ce-page-security.c:291 -+#: panels/network/wireless-security/wireless-security.c:465 - msgid "LEAP" - msgstr "LEAP" - --#: ../panels/network/connection-editor/ce-page-security.c:304 -+#: panels/network/connection-editor/ce-page-security.c:304 - msgid "Dynamic WEP (802.1x)" - msgstr "動的 WEP (802.1x)" - --#: ../panels/network/connection-editor/ce-page-security.c:318 -+#: panels/network/connection-editor/ce-page-security.c:318 - msgid "WPA & WPA2 Personal" - msgstr "WPA & WPA2 Personal" - --#: ../panels/network/connection-editor/ce-page-security.c:332 -+#: panels/network/connection-editor/ce-page-security.c:332 - msgid "WPA & WPA2 Enterprise" - msgstr "WPA & WPA2 Enterprise" - --#: ../panels/network/connection-editor/details-page.ui.h:1 --#: ../panels/network/network-wifi.ui.h:4 -+#: panels/network/connection-editor/details-page.ui:18 -+#: panels/network/network-wifi.ui:174 - msgid "Signal Strength" - msgstr "信号強度" - --#: ../panels/network/connection-editor/details-page.ui.h:2 --#: ../panels/network/network-wifi.ui.h:5 -+#: panels/network/connection-editor/details-page.ui:52 -+#: panels/network/network-wifi.ui:207 - msgid "Link speed" - msgstr "リンクの速度" - --#: ../panels/network/connection-editor/details-page.ui.h:4 --#: ../panels/network/net-device-ethernet.c:153 --#: ../panels/network/network-wifi.ui.h:7 ../panels/network/panel-common.c:644 -+#: panels/network/connection-editor/details-page.ui:104 -+#: panels/network/net-device-ethernet.c:154 panels/network/network-wifi.ui:256 -+#: panels/network/panel-common.c:644 - msgid "IPv4 Address" - msgstr "IPv4 アドレス" - --#: ../panels/network/connection-editor/details-page.ui.h:5 --#: ../panels/network/net-device-ethernet.c:154 --#: ../panels/network/net-device-ethernet.c:158 --#: ../panels/network/network-mobile.ui.h:4 --#: ../panels/network/network-wifi.ui.h:8 ../panels/network/panel-common.c:645 -+#: panels/network/connection-editor/details-page.ui:122 -+#: panels/network/net-device-ethernet.c:155 -+#: panels/network/net-device-ethernet.c:159 -+#: panels/network/network-mobile.ui:189 panels/network/network-wifi.ui:273 -+#: panels/network/panel-common.c:645 - msgid "IPv6 Address" - msgstr "IPv6 アドレス" - --#: ../panels/network/connection-editor/details-page.ui.h:6 --#: ../panels/network/net-device-ethernet.c:161 --#: ../panels/network/network-wifi.ui.h:9 -+#: panels/network/connection-editor/details-page.ui:140 -+#: panels/network/net-device-ethernet.c:162 panels/network/network-wifi.ui:290 - msgid "Hardware Address" - msgstr "ハードウェアアドレス" - --#: ../panels/network/connection-editor/details-page.ui.h:7 --#: ../panels/network/net-device-ethernet.c:165 --#: ../panels/network/network-mobile.ui.h:5 --#: ../panels/network/network-wifi.ui.h:10 -+#: panels/network/connection-editor/details-page.ui:158 -+#: panels/network/net-device-ethernet.c:166 -+#: panels/network/network-mobile.ui:206 panels/network/network-wifi.ui:307 - msgid "Default Route" - msgstr "デフォルトルート" - --#: ../panels/network/connection-editor/details-page.ui.h:8 --#: ../panels/network/connection-editor/ip4-page.ui.h:10 --#: ../panels/network/connection-editor/ip6-page.ui.h:11 --#: ../panels/network/net-device-ethernet.c:167 --#: ../panels/network/network-mobile.ui.h:6 --#: ../panels/network/network-wifi.ui.h:11 -+#: panels/network/connection-editor/details-page.ui:177 -+#: panels/network/connection-editor/ip4-page.ui:197 -+#: panels/network/connection-editor/ip6-page.ui:211 -+#: panels/network/net-device-ethernet.c:168 -+#: panels/network/network-mobile.ui:224 panels/network/network-wifi.ui:325 -+#: panels/network/network-wifi.ui:832 panels/network/network-wifi.ui:1109 - msgid "DNS" - msgstr "DNS" - --#: ../panels/network/connection-editor/details-page.ui.h:9 -+#: panels/network/connection-editor/details-page.ui:195 - msgid "Last Used" - msgstr "前回の使用" - --#: ../panels/network/connection-editor/details-page.ui.h:10 -+#: panels/network/connection-editor/details-page.ui:324 - msgid "Connect _automatically" - msgstr "自動接続する(_A)" - --#: ../panels/network/connection-editor/details-page.ui.h:11 -+#: panels/network/connection-editor/details-page.ui:343 - msgid "Make available to _other users" - msgstr "他のユーザーも利用可能(_O)" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:1 --#: ../panels/network/connection-editor/ip4-page.ui.h:11 --#: ../panels/network/connection-editor/ip6-page.ui.h:2 --#: ../panels/network/net-proxy.c:58 ../panels/network/network-proxy.ui.h:2 --#: ../panels/network/wireless-security/eap-method-peap.ui.h:1 --#: ../panels/privacy/cc-privacy-panel.c:217 -+#: panels/network/connection-editor/details-page.ui:376 -+msgid "Restrict background data usage" -+msgstr "バックグラウンドデータの使用の制限" -+ -+#: panels/network/connection-editor/details-page.ui:386 -+msgid "Appropriate for connections that have data charges or limits." -+msgstr "データ料金や制限がある接続に適しています。" -+ -+#: panels/network/connection-editor/ethernet-page.ui:16 -+#: panels/network/connection-editor/ethernet-page.ui:39 -+#: panels/network/connection-editor/ip4-page.ui:209 -+#: panels/network/connection-editor/ip4-page.ui:277 -+#: panels/network/connection-editor/ip6-page.ui:42 -+#: panels/network/connection-editor/ip6-page.ui:223 -+#: panels/network/connection-editor/ip6-page.ui:291 -+#: panels/network/net-proxy.c:58 panels/network/network-proxy.ui:103 -+#: panels/network/wireless-security/eap-method-peap.ui:22 -+#: panels/privacy/cc-privacy-panel.c:217 - msgid "Automatic" - msgstr "自動" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:2 -+#: panels/network/connection-editor/ethernet-page.ui:19 - msgid "Twisted Pair (TP)" - msgstr "ツイストペア (TP)" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:3 -+#: panels/network/connection-editor/ethernet-page.ui:22 - msgid "Attachment Unit Interface (AUI)" - msgstr "Attachment Unit Interface (AUI)" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:4 -+#: panels/network/connection-editor/ethernet-page.ui:25 - msgid "BNC" - msgstr "BNC" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:5 -+#: panels/network/connection-editor/ethernet-page.ui:28 - msgid "Media Independent Interface (MII)" - msgstr "Media Independent Interface (MII)" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:6 -+#: panels/network/connection-editor/ethernet-page.ui:42 - msgid "10 Mb/s" - msgstr "10 Mb/s" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:7 -+#: panels/network/connection-editor/ethernet-page.ui:45 - msgid "100 Mb/s" - msgstr "100 Mb/s" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:8 -+#: panels/network/connection-editor/ethernet-page.ui:48 - msgid "1 Gb/s" - msgstr "1 Gb/s" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:9 -+#: panels/network/connection-editor/ethernet-page.ui:51 - msgid "10 Gb/s" - msgstr "10 Gb/s" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:10 --#: ../panels/network/connection-editor/vpn-page.ui.h:1 -+#: panels/network/connection-editor/ethernet-page.ui:71 -+#: panels/network/connection-editor/vpn-page.ui:23 - msgid "_Name" - msgstr "名前(_N)" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:11 --#: ../panels/network/connection-editor/wifi-page.ui.h:4 --#: ../panels/network/network-wifi.ui.h:38 -+#: panels/network/connection-editor/ethernet-page.ui:100 -+#: panels/network/connection-editor/wifi-page.ui:68 -+#: panels/network/network-wifi.ui:1261 - msgid "_MAC Address" - msgstr "MAC アドレス(_M)" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:12 -+#: panels/network/connection-editor/ethernet-page.ui:146 - msgid "M_TU" - msgstr "MTU(_T)" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:13 --#: ../panels/network/connection-editor/wifi-page.ui.h:5 -+#: panels/network/connection-editor/ethernet-page.ui:163 -+#: panels/network/connection-editor/wifi-page.ui:98 - msgid "_Cloned Address" - msgstr "クローンしたアドレス(_C)" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:14 -+#: panels/network/connection-editor/ethernet-page.ui:178 - msgid "bytes" - msgstr "バイト" - --#: ../panels/network/connection-editor/ip4-page.ui.h:1 -+#: panels/network/connection-editor/ip4-page.ui:27 - msgid "IPv_4 Method" - msgstr "IPv4 メソッド(_4)" - --#: ../panels/network/connection-editor/ip4-page.ui.h:2 --#: ../panels/network/network-wifi.ui.h:27 -+#: panels/network/connection-editor/ip4-page.ui:42 -+#: panels/network/network-wifi.ui:778 panels/network/network-wifi.ui:1055 - msgid "Automatic (DHCP)" - msgstr "自動 (DHCP)" - --#: ../panels/network/connection-editor/ip4-page.ui.h:3 --#: ../panels/network/connection-editor/ip6-page.ui.h:4 -+#: panels/network/connection-editor/ip4-page.ui:55 -+#: panels/network/connection-editor/ip6-page.ui:69 - msgid "Link-Local Only" - msgstr "リンクローカルのみ" - --#: ../panels/network/connection-editor/ip4-page.ui.h:5 --#: ../panels/network/connection-editor/ip6-page.ui.h:6 -+#: panels/network/connection-editor/ip4-page.ui:83 -+#: panels/network/connection-editor/ip6-page.ui:97 - msgid "Disable" - msgstr "無効" - --#: ../panels/network/connection-editor/ip4-page.ui.h:6 --#: ../panels/network/connection-editor/ip6-page.ui.h:7 -+#: panels/network/connection-editor/ip4-page.ui:111 -+#: panels/network/connection-editor/ip6-page.ui:125 - msgid "Addresses" - msgstr "アドレス" - --#: ../panels/network/connection-editor/ip4-page.ui.h:7 --#: ../panels/network/connection-editor/ip6-page.ui.h:8 --#: ../panels/printers/details-dialog.ui.h:3 -+#: panels/network/connection-editor/ip4-page.ui:129 -+#: panels/network/connection-editor/ip4-page.ui:313 -+#: panels/network/connection-editor/ip6-page.ui:143 -+#: panels/network/connection-editor/ip6-page.ui:327 -+#: panels/printers/details-dialog.ui:87 - msgid "Address" - msgstr "アドレス" - --#: ../panels/network/connection-editor/ip4-page.ui.h:8 -+#: panels/network/connection-editor/ip4-page.ui:143 -+#: panels/network/connection-editor/ip4-page.ui:327 - msgid "Netmask" - msgstr "ネットマスク" - --#: ../panels/network/connection-editor/ip4-page.ui.h:9 --#: ../panels/network/connection-editor/ip6-page.ui.h:10 -+#: panels/network/connection-editor/ip4-page.ui:157 -+#: panels/network/connection-editor/ip4-page.ui:341 -+#: panels/network/connection-editor/ip6-page.ui:171 -+#: panels/network/connection-editor/ip6-page.ui:355 - msgid "Gateway" - msgstr "ゲートウェイ" - --#: ../panels/network/connection-editor/ip4-page.ui.h:12 --#: ../panels/network/connection-editor/ip6-page.ui.h:12 -+#: panels/network/connection-editor/ip4-page.ui:220 -+#: panels/network/connection-editor/ip6-page.ui:234 - msgid "Automatic DNS" - msgstr "自動 DNS" - --#: ../panels/network/connection-editor/ip4-page.ui.h:13 --#: ../panels/network/connection-editor/ip6-page.ui.h:13 -+#: panels/network/connection-editor/ip4-page.ui:244 -+#: panels/network/connection-editor/ip6-page.ui:258 - msgid "Separate IP addresses with commas" - msgstr "複数の IP アドレスを指定する場合はそれぞれコンマで区切ってください" - --#: ../panels/network/connection-editor/ip4-page.ui.h:14 --#: ../panels/network/connection-editor/ip6-page.ui.h:14 --#: ../panels/network/network-wifi.ui.h:32 -+#: panels/network/connection-editor/ip4-page.ui:265 -+#: panels/network/connection-editor/ip6-page.ui:279 -+#: panels/network/network-wifi.ui:877 panels/network/network-wifi.ui:1154 - msgid "Routes" - msgstr "ルート" - --#: ../panels/network/connection-editor/ip4-page.ui.h:15 --#: ../panels/network/connection-editor/ip6-page.ui.h:15 -+#: panels/network/connection-editor/ip4-page.ui:288 -+#: panels/network/connection-editor/ip6-page.ui:302 - msgid "Automatic Routes" - msgstr "自動ルート" - - #. Translators: Please see https://en.wikipedia.org/wiki/Metrics_(networking) --#: ../panels/network/connection-editor/ip4-page.ui.h:17 --#: ../panels/network/connection-editor/ip6-page.ui.h:17 -+#: panels/network/connection-editor/ip4-page.ui:354 -+#: panels/network/connection-editor/ip6-page.ui:368 - msgid "Metric" - msgstr "メトリック" - --#: ../panels/network/connection-editor/ip4-page.ui.h:18 --#: ../panels/network/connection-editor/ip6-page.ui.h:18 --#: ../panels/network/network-wifi.ui.h:34 -+#: panels/network/connection-editor/ip4-page.ui:384 -+#: panels/network/connection-editor/ip6-page.ui:398 -+#: panels/network/network-wifi.ui:933 panels/network/network-wifi.ui:1210 - msgid "Use this connection _only for resources on its network" - msgstr "この接続はネットワーク上のリソースのためだけに使用(_O)" - --#: ../panels/network/connection-editor/ip6-page.ui.h:1 -+#: panels/network/connection-editor/ip6-page.ui:27 - msgid "IPv_6 Method" - msgstr "IPv6 メソッド(_6)" - --#: ../panels/network/connection-editor/ip6-page.ui.h:3 -+#: panels/network/connection-editor/ip6-page.ui:55 - msgid "Automatic, DHCP only" - msgstr "自動、DHCP のみ" - --#: ../panels/network/connection-editor/ip6-page.ui.h:9 -+#: panels/network/connection-editor/ip6-page.ui:157 -+#: panels/network/connection-editor/ip6-page.ui:341 - msgid "Prefix" - msgstr "プレフィックス" - --#: ../panels/network/connection-editor/net-connection-editor.c:273 -+#: panels/network/connection-editor/net-connection-editor.c:273 - msgid "Unable to open connection editor" - msgstr "接続エディターを起動できません" - --#: ../panels/network/connection-editor/net-connection-editor.c:291 -+#: panels/network/connection-editor/net-connection-editor.c:291 - msgid "New Profile" - msgstr "新規プロファイル" - --#: ../panels/network/connection-editor/net-connection-editor.c:603 --#: ../panels/network/network.ui.h:2 -+#: panels/network/connection-editor/net-connection-editor.c:603 -+#: panels/network/network.ui:142 - msgid "VPN" - msgstr "VPN" - --#: ../panels/network/connection-editor/net-connection-editor.c:751 -+#: panels/network/connection-editor/net-connection-editor.c:751 - msgid "Import from file…" - msgstr "ファイルからインポート…" - --#: ../panels/network/connection-editor/net-connection-editor.c:785 -+#: panels/network/connection-editor/net-connection-editor.c:785 - msgid "Add VPN" - msgstr "VPNの追加" - --#: ../panels/network/connection-editor/security-page.ui.h:1 --#: ../panels/network/network-wifi.ui.h:16 -+#: panels/network/connection-editor/security-page.ui:26 -+#: panels/network/network-wifi.ui:529 - msgid "S_ecurity" - msgstr "セキュリティ(_E)" - --#: ../panels/network/connection-editor/vpn-helpers.c:141 -+#: panels/network/connection-editor/vpn-helpers.c:141 - msgid "Cannot import VPN connection" - msgstr "VPN 接続をインポートできません" - --#: ../panels/network/connection-editor/vpn-helpers.c:143 -+#: panels/network/connection-editor/vpn-helpers.c:143 - #, c-format - msgid "" - "The file “%s” could not be read or does not contain recognized VPN " - "connection information\n" - "\n" - "Error: %s." --msgstr "" --"ファイル “%s” は読み込めなかったか、または処理できる VPN 接続情報がありませ" --"ん\n" -+msgstr "ファイル “%s” は読み込めなかったか、または処理できる VPN 接続情報がありません\n" - "\n" - "エラー: %s" - --#: ../panels/network/connection-editor/vpn-helpers.c:178 -+#: panels/network/connection-editor/vpn-helpers.c:178 - msgid "Select file to import" - msgstr "インポートするファイルを選択する" - --#: ../panels/network/connection-editor/vpn-helpers.c:182 --#: ../panels/printers/pp-details-dialog.c:320 --#: ../panels/sharing/cc-sharing-panel.c:383 --#: ../panels/user-accounts/um-photo-dialog.c:222 -+#: panels/network/connection-editor/vpn-helpers.c:182 -+#: panels/printers/pp-details-dialog.c:332 -+#: panels/sharing/cc-sharing-panel.c:393 -+#: panels/user-accounts/um-photo-dialog.c:231 - msgid "_Open" - msgstr "開く(_O)" - --#: ../panels/network/connection-editor/vpn-helpers.c:230 -+#: panels/network/connection-editor/vpn-helpers.c:230 - #, c-format - msgid "A file named “%s” already exists." - msgstr "'%s' というファイルはすでに存在します。" - --#: ../panels/network/connection-editor/vpn-helpers.c:232 -+#: panels/network/connection-editor/vpn-helpers.c:232 - msgid "_Replace" - msgstr "入れ替え(_R)" - --#: ../panels/network/connection-editor/vpn-helpers.c:234 -+#: panels/network/connection-editor/vpn-helpers.c:234 - #, c-format - msgid "Do you want to replace %s with the VPN connection you are saving?" - msgstr "%s を、保存している VPN 接続に入れ替えますか?" - --#: ../panels/network/connection-editor/vpn-helpers.c:270 -+#: panels/network/connection-editor/vpn-helpers.c:270 - msgid "Cannot export VPN connection" - msgstr "VPN 接続をエクスポートできません" - --#: ../panels/network/connection-editor/vpn-helpers.c:272 -+#: panels/network/connection-editor/vpn-helpers.c:272 - #, c-format - msgid "" - "The VPN connection “%s” could not be exported to %s.\n" - "\n" - "Error: %s." --msgstr "" --"VPN 接続 \"%s\" は %s にエクスポートできませんでした。\n" -+msgstr "VPN 接続 \"%s\" は %s にエクスポートできませんでした。\n" - "\n" - "エラー: %s" - --#: ../panels/network/connection-editor/vpn-helpers.c:307 -+#: panels/network/connection-editor/vpn-helpers.c:307 - msgid "Export VPN connection" - msgstr "VPN 接続をエクスポートする" - --#: ../panels/network/connection-editor/vpn-page.ui.h:2 -+#: panels/network/connection-editor/vpn-page.ui:58 - msgid "(Error: unable to load VPN connection editor)" - msgstr "(エラー: VPN 接続エディターを読み込めません)" - --#: ../panels/network/connection-editor/wifi-page.ui.h:1 --#: ../panels/network/network-wifi.ui.h:14 -+#: panels/network/connection-editor/wifi-page.ui:20 -+#: panels/network/network-wifi.ui:497 - msgid "_SSID" - msgstr "SSID(_S)" - --#: ../panels/network/connection-editor/wifi-page.ui.h:2 --#: ../panels/network/network-wifi.ui.h:15 -+#: panels/network/connection-editor/wifi-page.ui:36 -+#: panels/network/network-wifi.ui:513 - msgid "_BSSID" - msgstr "BSSID(_B)" - --#: ../panels/network/connection-editor/wifi-page.ui.h:3 --#: ../panels/network/network-wifi.ui.h:18 -+#: panels/network/connection-editor/wifi-page.ui:53 -+#: panels/network/network-wifi.ui:562 - msgid "My Home Network" - msgstr "マイホームネットワーク" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/network/gnome-network-panel.desktop.in.in.h:2 --msgid "Net­work" -+#: panels/network/gnome-network-panel.desktop.in.in:3 -+#: panels/network/network-mobile.ui:241 -+msgid "Network" - msgstr "ネットワーク" - --#: ../panels/network/gnome-network-panel.desktop.in.in.h:3 -+#: panels/network/gnome-network-panel.desktop.in.in:4 - msgid "Control how you connect to the Internet" - msgstr "ネットワークへの接続方法を設定します。" - --#. Translators: those are keywords for the network control-center panel --#: ../panels/network/gnome-network-panel.desktop.in.in.h:5 -+#. 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: 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;" --msgstr "" --"Network;Wireless;Wi-Fi;Wifi;IP;LAN;Proxy;WAN;Broadband;Modem;Bluetooth;vpn;" --"DNS;ネットワーク;インターネット;無線;ワイヤレス;有線;プロキシー;プロキシ;ブ" --"ロードバンド;モデム;ブルートゥース;VPN;ドメイン名;ドメインネームサーバー;" -+msgstr "Network;Wireless;Wi-Fi;Wifi;IP;LAN;Proxy;WAN;Broadband;Modem;Bluetooth;vpn;DNS;ネットワーク;インターネット;無線;ワイヤレス;有線;プロキシー;プロキシ;ブロードバンド;モデム;ブルートゥース;VPN;ドメイン名;ドメインネームサーバー;" - --#: ../panels/network/gnome-wifi-panel.desktop.in.in.h:3 -+#: panels/network/gnome-wifi-panel.desktop.in.in:4 - msgid "Control how you connect to Wi-Fi networks" - msgstr "Wi-Fi ネットワークへの接続方法を設定します。" - --#. Translators: those are keywords for the wi-fi control-center panel --#: ../panels/network/gnome-wifi-panel.desktop.in.in.h:5 -+#. 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: 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 "" --"Network;Wireless;Wi-Fi;Wifi;IP;LAN;Broadband;DNS;ネットワーク;無線;ワイヤレ" --"ス;ブロードバンド;" -+msgstr "Network;Wireless;Wi-Fi;Wifi;IP;LAN;Broadband;DNS;ネットワーク;無線;ワイヤレス;ブロードバンド;" - --#: ../panels/network/net-device-ethernet.c:106 --#: ../panels/network/net-device-wifi.c:491 -+#: panels/network/net-device-ethernet.c:107 -+#: panels/network/net-device-wifi.c:553 - msgid "never" - msgstr "未接続" - --#: ../panels/network/net-device-ethernet.c:116 --#: ../panels/network/net-device-wifi.c:501 -+#: panels/network/net-device-ethernet.c:117 -+#: panels/network/net-device-wifi.c:563 - msgid "today" - msgstr "今日" - --#: ../panels/network/net-device-ethernet.c:118 --#: ../panels/network/net-device-wifi.c:503 -+#: panels/network/net-device-ethernet.c:119 -+#: panels/network/net-device-wifi.c:565 - msgid "yesterday" - msgstr "昨日" - --#: ../panels/network/net-device-ethernet.c:156 --#: ../panels/network/network-mobile.ui.h:3 ../panels/network/panel-common.c:647 --#: ../panels/network/panel-common.c:649 -+#: panels/network/net-device-ethernet.c:157 -+#: panels/network/network-mobile.ui:172 panels/network/panel-common.c:647 -+#: panels/network/panel-common.c:649 - msgid "IP Address" - msgstr "IP アドレス" - --#: ../panels/network/net-device-ethernet.c:172 --#: ../panels/network/network-wifi.ui.h:12 -+#: panels/network/net-device-ethernet.c:173 panels/network/network-wifi.ui:342 - msgid "Last used" - msgstr "最後の利用" - -@@ -2725,1143 +2909,1095 @@ msgstr "最後の利用" - #. * profile. It is also used to display ethernet in the - #. * device list. - #. --#: ../panels/network/net-device-ethernet.c:275 --#: ../panels/network/network-ethernet.ui.h:1 --#: ../panels/network/network-simple.ui.h:1 -+#: panels/network/net-device-ethernet.c:277 -+#: panels/network/network-ethernet.ui:19 panels/network/network-simple.ui:39 - msgid "Wired" - msgstr "有線" - --#: ../panels/network/net-device-ethernet.c:343 --#: ../panels/network/net-device-wifi.c:1792 --#: ../panels/network/network-ethernet.ui.h:2 --#: ../panels/network/network-mobile.ui.h:8 --#: ../panels/network/network-simple.ui.h:3 ../panels/network/network-vpn.ui.h:2 -+#: 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…" - msgstr "オプション…" - --#: ../panels/network/net-device-mobile.c:238 -+#: panels/network/net-device-mobile.c:238 - msgid "Add new connection" - msgstr "新規の接続を追加" - --#: ../panels/network/net-device-wifi.c:1275 -+#: panels/network/net-device-wifi.c:1368 - #, c-format - msgid "Switching on the wireless hotspot will disconnect you from %s." --msgstr "" --"ワイヤレスホットスポットをオンにすると %s の接続が切断されます。" -+msgstr "ワイヤレスホットスポットをオンにすると %s の接続が切断されます。" - --#: ../panels/network/net-device-wifi.c:1279 -+#: panels/network/net-device-wifi.c:1372 - msgid "" - "It is not possible to access the Internet through your wireless while the " - "hotspot is active." --msgstr "" --"ホットスポットがアクティブな場合、ワイヤレスによるインターネット接続はできま" --"せん。" -+msgstr "ホットスポットがアクティブな場合、ワイヤレスによるインターネット接続はできません。" - --#: ../panels/network/net-device-wifi.c:1286 -+#: panels/network/net-device-wifi.c:1379 - msgid "Turn On Wi-Fi Hotspot?" - msgstr "Wi-Fi アクセスポイントをオンにしますか?" - --#: ../panels/network/net-device-wifi.c:1308 -+#: panels/network/net-device-wifi.c:1401 - msgid "" - "Wi-Fi hotspots are usually used to share an additional Internet connection " - "over Wi-Fi." --msgstr "" --"Wi-Fi アクセスポイント機能は、追加のインターネット接続を Wi-Fi 経由で共有する" --"ために使用されます。" -+msgstr "Wi-Fi アクセスポイント機能は、追加のインターネット接続を Wi-Fi 経由で共有するために使用されます。" - --#: ../panels/network/net-device-wifi.c:1319 -+#: panels/network/net-device-wifi.c:1412 - msgid "_Turn On" - msgstr "オン(_T)" - --#: ../panels/network/net-device-wifi.c:1396 -+#: panels/network/net-device-wifi.c:1489 - msgid "Stop hotspot and disconnect any users?" - msgstr "アクセスポイントを停止し、ユーザーを切断しますか?" - --#: ../panels/network/net-device-wifi.c:1399 -+#: panels/network/net-device-wifi.c:1492 - msgid "_Stop Hotspot" - msgstr "停止(_S)" - --#: ../panels/network/net-device-wifi.c:1496 -+#: panels/network/net-device-wifi.c:1592 - msgid "System policy prohibits use as a Hotspot" - msgstr "システムのポリシーによりホットスポットとしての利用は禁止されています" - --#: ../panels/network/net-device-wifi.c:1499 -+#: panels/network/net-device-wifi.c:1595 - msgid "Wireless device does not support Hotspot mode" - msgstr "ワイヤレスデバイスがホットスポットモードに対応していません" - --#: ../panels/network/net-device-wifi.c:1630 -+#: panels/network/net-device-wifi.c:1733 - msgid "" - "Network details for the selected networks, including passwords and any " - "custom configuration will be lost." - msgstr "パスワードや独自の設定など、 選択したネットワークの詳細は失われます。" - --#: ../panels/network/net-device-wifi.c:1634 --#: ../panels/network/network-wifi.ui.h:42 -+#: panels/network/net-device-wifi.c:1737 panels/network/network-wifi.ui:1362 - msgid "_Forget" - msgstr "破棄(_F)" - --#: ../panels/network/net-device-wifi.c:1943 --#: ../panels/network/net-device-wifi.c:1950 -+#: panels/network/net-device-wifi.c:2046 panels/network/net-device-wifi.c:2053 - msgid "Known Wi-Fi Networks" - msgstr "既知の Wi-Fi ネットワーク" - - #. translators: This is the label for the "Forget wireless network" functionality --#: ../panels/network/net-device-wifi.c:1983 -+#: panels/network/net-device-wifi.c:2086 - msgctxt "Wi-Fi Network" - msgid "_Forget" - msgstr "破棄(_F)" - - #. TRANSLATORS: this is when the use leaves the PAC textbox blank --#: ../panels/network/net-proxy.c:102 -+#: panels/network/net-proxy.c:102 - msgid "" - "Web Proxy Autodiscovery is used when a Configuration URL is not provided." --msgstr "" --"設定ファイルの URL が指定されていない場合 Web Proxy Autodiscovery が使用され" --"ます。" -+msgstr "設定ファイルの URL が指定されていない場合 Web Proxy Autodiscovery が使用されます。" - - #. TRANSLATORS: WPAD is bad: if you enable it on an untrusted - #. * network, then anyone else on that network can tell your - #. * machine that it should proxy all of your web traffic - #. * through them. --#: ../panels/network/net-proxy.c:110 -+#: panels/network/net-proxy.c:110 - msgid "This is not recommended for untrusted public networks." - msgstr "信頼できない公衆ネットワークでは推奨されません。" - --#: ../panels/network/network-mobile.ui.h:1 -+#: panels/network/network-mobile.ui:30 - msgid "IMEI" - msgstr "IMEI" - --#: ../panels/network/network-mobile.ui.h:2 -+#: panels/network/network-mobile.ui:48 - msgid "Provider" - msgstr "プロバイダー" - --#: ../panels/network/network-mobile.ui.h:7 --msgid "Network" --msgstr "ネットワーク" -- --#: ../panels/network/network-proxy.ui.h:1 -+#: panels/network/network-proxy.ui:47 panels/network/network-proxy.ui:92 - msgid "Network Proxy" - msgstr "ネットワークプロキシ" - --#: ../panels/network/network-proxy.ui.h:5 -+#: panels/network/network-proxy.ui:173 - msgid "_HTTP Proxy" - msgstr "HTTP プロキシ(_H)" - --#: ../panels/network/network-proxy.ui.h:6 -+#: panels/network/network-proxy.ui:192 - msgid "H_TTPS Proxy" - msgstr "HTTPS プロキシ(_T)" - --#: ../panels/network/network-proxy.ui.h:7 -+#: panels/network/network-proxy.ui:211 - msgid "_FTP Proxy" - msgstr "FTP プロキシ(_F)" - --#: ../panels/network/network-proxy.ui.h:8 -+#: panels/network/network-proxy.ui:230 - msgid "_Socks Host" - msgstr "Socks ホスト(_S)" - --#: ../panels/network/network-proxy.ui.h:9 -+#: panels/network/network-proxy.ui:249 - msgid "_Ignore Hosts" - msgstr "次のホストを無視する(_I)" - --#: ../panels/network/network-proxy.ui.h:10 -+#: panels/network/network-proxy.ui:287 - msgid "HTTP proxy port" - msgstr "HTTP プロキシポート" - --#: ../panels/network/network-proxy.ui.h:11 -+#: panels/network/network-proxy.ui:364 - msgid "HTTPS proxy port" - msgstr "HTTPS プロキシポート" - --#: ../panels/network/network-proxy.ui.h:12 -+#: panels/network/network-proxy.ui:385 - msgid "FTP proxy port" - msgstr "FTP プロキシポート" - --#: ../panels/network/network-proxy.ui.h:13 -+#: panels/network/network-proxy.ui:406 - msgid "Socks proxy port" - msgstr "Socks プロキシポート" - --#: ../panels/network/network-proxy.ui.h:14 -+#: panels/network/network-proxy.ui:435 - msgid "_Configuration URL" - msgstr "設定 URL(_C)" - --#: ../panels/network/network-simple.ui.h:2 -+#: panels/network/network-simple.ui:50 - msgid "Turn device off" - msgstr "デバイスをオフにする" - --#. Translators: The found device is a printer connected via Bluetooth --#: ../panels/network/network.ui.h:1 --#: ../panels/printers/pp-new-printer-dialog.c:1816 --msgid "Bluetooth" --msgstr "Bluetooth" -- --#: panels/network/network.ui:68 -+#: panels/network/network.ui:101 - msgid "Other Devices" - msgstr "その他のデバイス" - --#: ../panels/network/network.ui.h:3 -+#: panels/network/network.ui:194 - msgid "Not set up" - msgstr "未設定" - --#: ../panels/network/network-vpn.ui.h:1 -+#: panels/network/network-vpn.ui:56 - msgid "Turn VPN connection off" - msgstr "VPN 接続をオフにする" - --#: ../panels/network/network-wifi.ui.h:3 -+#: panels/network/network-wifi.ui:127 - msgid "Automatic _Connect" - msgstr "自動接続(_C)" - --#: ../panels/network/network-wifi.ui.h:13 -+#: panels/network/network-wifi.ui:474 - msgid "details" - msgstr "詳細" - --#: ../panels/network/network-wifi.ui.h:17 --#: ../panels/network/wireless-security/eap-method-leap.ui.h:2 --#: ../panels/network/wireless-security/eap-method-simple.ui.h:2 --#: ../panels/network/wireless-security/ws-leap.ui.h:2 --#: ../panels/network/wireless-security/ws-wpa-psk.ui.h:1 --#: ../panels/sharing/sharing.ui.h:9 --#: ../panels/user-accounts/data/account-dialog.ui.h:12 --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:7 --msgid "_Password" --msgstr "パスワード(_P)" -- --#: ../panels/network/network-wifi.ui.h:21 -+#: panels/network/network-wifi.ui:622 - msgid "Show P_assword" - msgstr "パスワードを表示(_A)" - --#: ../panels/network/network-wifi.ui.h:22 -+#: panels/network/network-wifi.ui:652 - msgid "Make available to other users" - msgstr "他のユーザーに利用可能にする" - --#: ../panels/network/network-wifi.ui.h:23 -+#: panels/network/network-wifi.ui:680 - msgid "identity" - msgstr "識別情報" - --#: ../panels/network/network-wifi.ui.h:24 -+#: panels/network/network-wifi.ui:714 - msgid "IPv_4" - msgstr "IPv4(_4)" - --#: ../panels/network/network-wifi.ui.h:25 -+#: panels/network/network-wifi.ui:755 panels/network/network-wifi.ui:1032 - msgid "_Addresses" - msgstr "アドレス(_A)" - --#: ../panels/network/network-wifi.ui.h:28 -+#: panels/network/network-wifi.ui:779 panels/network/network-wifi.ui:1056 - msgid "Automatic (DHCP) addresses only" - msgstr "自動 (DHCP) アドレスのみ" - --#: ../panels/network/network-wifi.ui.h:29 -+#: panels/network/network-wifi.ui:780 panels/network/network-wifi.ui:1057 - msgid "Link-local only" - msgstr "リンクローカルのみ" - --#: ../panels/network/network-wifi.ui.h:30 -+#: panels/network/network-wifi.ui:781 panels/network/network-wifi.ui:1058 - msgid "Shared with other computers" - msgstr "他のコンピューターと共有する" - --#: ../panels/network/network-wifi.ui.h:33 -+#: panels/network/network-wifi.ui:917 panels/network/network-wifi.ui:1194 - msgid "_Ignore automatically obtained routes" - msgstr "自動的に得られたルートを無視する(_I)" - --#: ../panels/network/network-wifi.ui.h:35 -+#: panels/network/network-wifi.ui:960 - msgid "ipv4" - msgstr "ipv4" - --#: ../panels/network/network-wifi.ui.h:36 -+#: panels/network/network-wifi.ui:991 - msgid "IPv_6" - msgstr "IPv6(_6)" - --#: ../panels/network/network-wifi.ui.h:37 -+#: panels/network/network-wifi.ui:1237 - msgid "ipv6" - msgstr "ipv6" - --#: ../panels/network/network-wifi.ui.h:39 -+#: panels/network/network-wifi.ui:1277 - msgid "_Cloned MAC Address" - msgstr "クローンしたMACアドレス(_C)" - --#: ../panels/network/network-wifi.ui.h:40 -+#: panels/network/network-wifi.ui:1327 - msgid "hardware" - msgstr "ハードウェア" - --#: ../panels/network/network-wifi.ui.h:41 -+#: panels/network/network-wifi.ui:1346 - msgid "_Reset" - msgstr "リセット(_R)" - --#: ../panels/network/network-wifi.ui.h:43 -+#: panels/network/network-wifi.ui:1382 - msgid "" - "Reset the settings for this connection to their defaults, but remember as a " - "preferred connection." --msgstr "" --"この接続の設定をデフォルトにリセットしますが、推奨接続であることは記憶しま" --"す。" -+msgstr "この接続の設定をデフォルトにリセットしますが、推奨接続であることは記憶します。" - --#: ../panels/network/network-wifi.ui.h:44 -+#: panels/network/network-wifi.ui:1399 - msgid "" - "Remove all details relating to this network and do not try to automatically " - "connect to it." --msgstr "" --"このネットワークに関する詳細はすべて削除して、自動的に接続しないようにしま" --"す。" -+msgstr "このネットワークに関する詳細はすべて削除して、自動的に接続しないようにします。" - --#: ../panels/network/network-wifi.ui.h:45 -+#: panels/network/network-wifi.ui:1419 - msgid "reset" - msgstr "リセット" - --#: ../panels/network/network-wifi.ui.h:50 -+#: panels/network/network-wifi.ui:1472 - msgid "Hardware" - msgstr "ハードウェア" - --#: ../panels/network/network-wifi.ui.h:51 -+#: panels/network/network-wifi.ui:1476 - msgctxt "tab" - msgid "Reset" - msgstr "リセット" - --#: ../panels/network/network-wifi.ui.h:52 -+#: panels/network/network-wifi.ui:1537 - msgid "Wi-Fi Hotspot" - msgstr "Wi-Fi アクセスポイント" - --#: ../panels/network/network-wifi.ui.h:53 -+#: panels/network/network-wifi.ui:1554 - msgid "Switch off to connect to a Wi-Fi network" - msgstr "Wi-Fiネットワークへ接続するためスイッチをオフ" - --#: ../panels/network/network-wifi.ui.h:54 -+#: panels/network/network-wifi.ui:1603 - msgid "Network Name" - msgstr "ネットワーク名" - --#: ../panels/network/network-wifi.ui.h:55 -+#: panels/network/network-wifi.ui:1621 - msgid "Connected Devices" - msgstr "接続しているデバイス" - --#: ../panels/network/network-wifi.ui.h:56 -+#: panels/network/network-wifi.ui:1639 - msgid "Security type" - msgstr "セキュリティタイプ" - --#: ../panels/network/network-wifi.ui.h:57 --#: ../panels/printers/authentication-dialog.ui.h:5 --#: ../panels/printers/new-printer-dialog.ui.h:14 --#: ../panels/user-accounts/data/account-dialog.ui.h:9 -+#: panels/network/network-wifi.ui:1702 -+msgctxt "Wi-Fi passkey" - msgid "Password" - msgstr "パスワード" - --#: ../panels/network/network-wifi.ui.h:59 -+#: panels/network/network-wifi.ui:1799 - msgid "Turn Wi-Fi off" - msgstr "Wi-Fi をオフにする" - --#: ../panels/network/network-wifi.ui.h:60 -+#: panels/network/network-wifi.ui:1831 - msgid "_Connect to Hidden Network…" - msgstr "非表示のネットワークに接続(_C)…" - --#: ../panels/network/network-wifi.ui.h:61 -+#: panels/network/network-wifi.ui:1841 - msgid "_Turn On Wi-Fi Hotspot…" - msgstr "Wi-Fi アクセスポイントをオンにする(_T)" - --#: ../panels/network/network-wifi.ui.h:62 -+#: panels/network/network-wifi.ui:1851 - msgid "_Known Wi-Fi Networks" - msgstr "既知の Wi-Fi ネットワーク(_K)" - --#: ../panels/network/wifi.ui.h:1 --msgid "Make sure you have a Wi-Fi adapter plugged and turned on" --msgstr "Wi-Fi アダプターが装着されオンになっていることを確認してください" -- --#: ../panels/network/wifi.ui.h:2 -+#: panels/network/wifi.ui:40 - msgid "No Wi-Fi Adapter Found" - msgstr "Wi-Fi アダプターが見つかりません" - --#: ../panels/network/wifi.ui.h:3 -+#: panels/network/wifi.ui:52 -+msgid "Make sure you have a Wi-Fi adapter plugged and turned on" -+msgstr "Wi-Fi アダプターが装着されオンになっていることを確認してください" -+ -+#: panels/network/wifi.ui:127 - msgid "Airplane Mode" - msgstr "機内モード(_P)" - --#: ../panels/network/wifi.ui.h:4 -+#: panels/network/wifi.ui:142 - msgid "Disables Wi-Fi, Bluetooth and mobile broadband" - msgstr "Wi-Fi, Bluetooth および モバイルブロードバンドを無効にします" - --#: ../panels/network/wifi.ui.h:5 -+#: panels/network/wifi.ui:192 - msgid "Visible Networks" - msgstr "ネットワーク一覧" - --#: ../panels/network/wifi.ui.h:6 -+#: panels/network/wifi.ui:271 - msgid "NetworkManager needs to be running" - msgstr "NetworkManager が動作している必要があります" - - #. TRANSLATORS: AP type --#: ../panels/network/panel-common.c:127 -+#: panels/network/panel-common.c:127 - msgid "Ad-hoc" - msgstr "アドホック" - - #. TRANSLATORS: AP type --#: ../panels/network/panel-common.c:131 -+#: panels/network/panel-common.c:131 - msgid "Infrastructure" - msgstr "インフラストラクチャ" - - #. TRANSLATORS: device status - #. TRANSLATORS: VPN status --#: ../panels/network/panel-common.c:147 ../panels/network/panel-common.c:201 -+#: panels/network/panel-common.c:147 panels/network/panel-common.c:201 - msgid "Status unknown" - msgstr "ステータス不明" - - #. TRANSLATORS: device status --#: ../panels/network/panel-common.c:151 -+#: panels/network/panel-common.c:151 - msgid "Unmanaged" - msgstr "管理対象外" - - #. TRANSLATORS: device status --#: ../panels/network/panel-common.c:155 -+#: panels/network/panel-common.c:155 - msgid "Unavailable" - msgstr "利用不可" - - #. TRANSLATORS: device status - #. TRANSLATORS: VPN status --#: ../panels/network/panel-common.c:165 ../panels/network/panel-common.c:207 -+#: panels/network/panel-common.c:165 panels/network/panel-common.c:207 - msgid "Connecting" - msgstr "接続中" - - #. TRANSLATORS: device status - #. TRANSLATORS: VPN status --#: ../panels/network/panel-common.c:169 ../panels/network/panel-common.c:211 -+#: panels/network/panel-common.c:169 panels/network/panel-common.c:211 - msgid "Authentication required" - msgstr "認証が要求されました" - - #. TRANSLATORS: device status - #. TRANSLATORS: VPN status --#: ../panels/network/panel-common.c:173 ../panels/network/panel-common.c:215 -+#: panels/network/panel-common.c:173 panels/network/panel-common.c:215 - msgid "Connected" - msgstr "接続済み" - - #. TRANSLATORS: device status --#: ../panels/network/panel-common.c:177 -+#: panels/network/panel-common.c:177 - msgid "Disconnecting" - msgstr "切断中" - - #. TRANSLATORS: device status - #. TRANSLATORS: VPN status --#: ../panels/network/panel-common.c:181 ../panels/network/panel-common.c:219 -+#: panels/network/panel-common.c:181 panels/network/panel-common.c:219 - msgid "Connection failed" - msgstr "接続失敗" - - #. TRANSLATORS: device status - #. TRANSLATORS: VPN status --#: ../panels/network/panel-common.c:185 ../panels/network/panel-common.c:227 -+#: panels/network/panel-common.c:185 panels/network/panel-common.c:227 - msgid "Status unknown (missing)" - msgstr "ステータス不明 (見つからない)" - - #. TRANSLATORS: VPN status --#: ../panels/network/panel-common.c:223 -+#: panels/network/panel-common.c:223 - msgid "Not connected" - msgstr "接続していない" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:248 -+#: panels/network/panel-common.c:248 - msgid "Configuration failed" - msgstr "設定に失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:252 -+#: panels/network/panel-common.c:252 - msgid "IP configuration failed" - msgstr "IP設定に失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:256 -+#: panels/network/panel-common.c:256 - msgid "IP configuration expired" - msgstr "IP設定の期限切れ" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:260 -+#: panels/network/panel-common.c:260 - msgid "Secrets were required, but not provided" - msgstr "秘密の情報が必要でしたが入力されませんでした" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:264 -+#: panels/network/panel-common.c:264 - msgid "802.1x supplicant disconnected" - msgstr "802.1x サプリカントが切断されました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:268 -+#: panels/network/panel-common.c:268 - msgid "802.1x supplicant configuration failed" - msgstr "802.1x サプリカントの設定に失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:272 -+#: panels/network/panel-common.c:272 - msgid "802.1x supplicant failed" - msgstr "802.1x サプリカントが失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:276 -+#: panels/network/panel-common.c:276 - msgid "802.1x supplicant took too long to authenticate" - msgstr "802.1x サプリカントの認証に時間がかかりすぎました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:280 -+#: panels/network/panel-common.c:280 - msgid "PPP service failed to start" - msgstr "PPPサービスの起動に失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:284 -+#: panels/network/panel-common.c:284 - msgid "PPP service disconnected" - msgstr "PPPサービスの接続を切断しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:288 -+#: panels/network/panel-common.c:288 - msgid "PPP failed" - msgstr "PPP が失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:292 -+#: panels/network/panel-common.c:292 - msgid "DHCP client failed to start" - msgstr "DHCPクライアントの起動に失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:296 -+#: panels/network/panel-common.c:296 - msgid "DHCP client error" - msgstr "DHCPクライアントにエラーが発生しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:300 -+#: panels/network/panel-common.c:300 - msgid "DHCP client failed" - msgstr "DHCPクライアントが失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:304 -+#: panels/network/panel-common.c:304 - msgid "Shared connection service failed to start" - msgstr "共有接続サービスの起動に失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:308 -+#: panels/network/panel-common.c:308 - msgid "Shared connection service failed" - msgstr "共有接続サービスが失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:312 -+#: panels/network/panel-common.c:312 - msgid "AutoIP service failed to start" - msgstr "AutoIP サービスの起動に失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:316 -+#: panels/network/panel-common.c:316 - msgid "AutoIP service error" - msgstr "AutoIP サービスにエラーが発生しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:320 -+#: panels/network/panel-common.c:320 - msgid "AutoIP service failed" - msgstr "AutoIP サービスが失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:324 -+#: panels/network/panel-common.c:324 - msgid "Line busy" - msgstr "回線が使用中です" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:328 -+#: panels/network/panel-common.c:328 - msgid "No dial tone" - msgstr "発信音がありません" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:332 -+#: panels/network/panel-common.c:332 - msgid "No carrier could be established" - msgstr "キャリアの確立ができませんでした" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:336 -+#: panels/network/panel-common.c:336 - msgid "Dialing request timed out" - msgstr "発信要求がタイムアウトしました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:340 -+#: panels/network/panel-common.c:340 - msgid "Dialing attempt failed" - msgstr "発信の試行に失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:344 -+#: panels/network/panel-common.c:344 - msgid "Modem initialization failed" - msgstr "モデムの初期化に失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:348 -+#: panels/network/panel-common.c:348 - msgid "Failed to select the specified APN" - msgstr "指定されたAPNの選択に失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:352 -+#: panels/network/panel-common.c:352 - msgid "Not searching for networks" - msgstr "ネットワーク検索をしていません" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:356 -+#: panels/network/panel-common.c:356 - msgid "Network registration denied" - msgstr "ネットワーク登録が拒否されました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:360 -+#: panels/network/panel-common.c:360 - msgid "Network registration timed out" - msgstr "ネットワーク登録がタイムアウトしました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:364 -+#: panels/network/panel-common.c:364 - msgid "Failed to register with the requested network" - msgstr "要求されたネットワークへの登録に失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:368 -+#: panels/network/panel-common.c:368 - msgid "PIN check failed" - msgstr "PINチェックに失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:372 -+#: panels/network/panel-common.c:372 - msgid "Firmware for the device may be missing" - msgstr "このデバイスのファームウェアがないようです" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:376 -+#: panels/network/panel-common.c:376 - msgid "Connection disappeared" - msgstr "接続が消失しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:380 -+#: panels/network/panel-common.c:380 - msgid "Existing connection was assumed" - msgstr "既存の接続とみなされました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:384 -+#: panels/network/panel-common.c:384 - msgid "Modem not found" - msgstr "モデムが見つかりませんでした" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:388 -+#: panels/network/panel-common.c:388 - msgid "Bluetooth connection failed" - msgstr "Bluetooth接続に失敗しました" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:392 -+#: panels/network/panel-common.c:392 - msgid "SIM Card not inserted" - msgstr "SIMカードが挿入されていません" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:396 -+#: panels/network/panel-common.c:396 - msgid "SIM Pin required" - msgstr "SIMのPIN番号が必要です" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:400 -+#: panels/network/panel-common.c:400 - msgid "SIM Puk required" - msgstr "SIMのPUKが必要です" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:404 -+#: panels/network/panel-common.c:404 - msgid "SIM wrong" - msgstr "SIMが違います" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:408 -+#: panels/network/panel-common.c:408 - msgid "Connection dependency failed" - msgstr "接続が依存するデバイス等の準備ができません" - - #. TRANSLATORS: device status --#: ../panels/network/panel-common.c:433 -+#: panels/network/panel-common.c:433 - msgid "Firmware missing" - msgstr "ファームウェア未検出" - - #. TRANSLATORS: device status --#: ../panels/network/panel-common.c:437 -+#: panels/network/panel-common.c:437 - msgid "Cable unplugged" - msgstr "ケーブル抜け" - --#: ../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 "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 "ファイルが選択されていません" - --#: ../panels/network/wireless-security/eap-method.c:264 -+#: panels/network/wireless-security/eap-method.c:276 - msgid "unspecified error validating eap-method file" - msgstr "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 "DER, PEM, 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 "DER か PEM の証明書 (*.der, *.pem, *.crt, *.cer)" - --#: ../panels/network/wireless-security/eap-method-fast.c:72 -+#: panels/network/wireless-security/eap-method-fast.c:72 - msgid "missing EAP-FAST PAC file" - msgstr "EAP-FAST PACファイルが見つかりません" - --#: ../panels/network/wireless-security/eap-method-fast.c:268 --#: ../panels/network/wireless-security/eap-method-peap.c:302 --#: ../panels/network/wireless-security/eap-method-ttls.c:351 -+#: panels/network/wireless-security/eap-method-fast.c:268 -+#: panels/network/wireless-security/eap-method-peap.c:302 -+#: panels/network/wireless-security/eap-method-ttls.c:351 - msgid "GTC" - msgstr "GTC" - --#: ../panels/network/wireless-security/eap-method-fast.c:283 --#: ../panels/network/wireless-security/eap-method-peap.c:272 --#: ../panels/network/wireless-security/eap-method-ttls.c:289 -+#: panels/network/wireless-security/eap-method-fast.c:283 -+#: panels/network/wireless-security/eap-method-peap.c:272 -+#: panels/network/wireless-security/eap-method-ttls.c:289 - msgid "MSCHAPv2" - msgstr "MSCHAPv2" - --#: ../panels/network/wireless-security/eap-method-fast.c:406 -+#: panels/network/wireless-security/eap-method-fast.c:406 - msgid "Choose a PAC file" - msgstr "PAC ファイルを選択" - --#: ../panels/network/wireless-security/eap-method-fast.c:413 -+#: panels/network/wireless-security/eap-method-fast.c:413 - msgid "PAC files (*.pac)" - msgstr "PAC ファイル (*.pac)" - --#: ../panels/network/wireless-security/eap-method-fast.ui.h:1 -+#: panels/network/wireless-security/eap-method-fast.ui:22 - msgid "Anonymous" - msgstr "匿名" - --#: ../panels/network/wireless-security/eap-method-fast.ui.h:2 -+#: panels/network/wireless-security/eap-method-fast.ui:25 - msgid "Authenticated" - msgstr "認証" - --#: ../panels/network/wireless-security/eap-method-fast.ui.h:3 -+#: panels/network/wireless-security/eap-method-fast.ui:28 - msgid "Both" - msgstr "両方" - --#: ../panels/network/wireless-security/eap-method-fast.ui.h:5 -+#: panels/network/wireless-security/eap-method-fast.ui:76 - msgid "PAC _file" - msgstr "PAC ファイル(_F)" - --#: ../panels/network/wireless-security/eap-method-fast.ui.h:6 --#: ../panels/network/wireless-security/eap-method-peap.ui.h:7 --#: ../panels/network/wireless-security/eap-method-ttls.ui.h:4 -+#: panels/network/wireless-security/eap-method-fast.ui:122 -+#: panels/network/wireless-security/eap-method-peap.ui:146 -+#: panels/network/wireless-security/eap-method-ttls.ui:97 - msgid "_Inner authentication" - msgstr "内部認証(_I)" - --#: ../panels/network/wireless-security/eap-method-fast.ui.h:7 -+#: panels/network/wireless-security/eap-method-fast.ui:156 - msgid "Allow automatic PAC pro_visioning" - msgstr "自動的なPACプロビジョニングを許可する(_V)" - --#: ../panels/network/wireless-security/eap-method-leap.c:65 -+#: panels/network/wireless-security/eap-method-leap.c:65 - msgid "missing EAP-LEAP username" - msgstr "EAP-LEAPユーザー名が見つかりません" - --#: ../panels/network/wireless-security/eap-method-leap.c:74 -+#: panels/network/wireless-security/eap-method-leap.c:74 - msgid "missing EAP-LEAP password" - msgstr "EAP-LEAPパスワードが見つかりません" - --#: ../panels/network/wireless-security/eap-method-leap.ui.h:1 --#: ../panels/network/wireless-security/eap-method-simple.ui.h:1 --#: ../panels/network/wireless-security/ws-leap.ui.h:1 --#: ../panels/user-accounts/data/account-dialog.ui.h:4 -+#: panels/network/wireless-security/eap-method-leap.ui:26 -+#: panels/network/wireless-security/eap-method-simple.ui:26 -+#: panels/network/wireless-security/ws-leap.ui:26 -+#: panels/user-accounts/data/account-dialog.ui:142 -+#: panels/user-accounts/data/account-dialog.ui:505 - msgid "_Username" - msgstr "ユーザー名(_U)" - --#: ../panels/network/wireless-security/eap-method-leap.ui.h:3 --#: ../panels/network/wireless-security/eap-method-simple.ui.h:3 --#: ../panels/network/wireless-security/eap-method-tls.ui.h:7 --#: ../panels/network/wireless-security/ws-leap.ui.h:3 --#: ../panels/network/wireless-security/ws-wpa-psk.ui.h:3 -+#: panels/network/wireless-security/eap-method-leap.ui:68 -+#: panels/network/wireless-security/eap-method-simple.ui:85 -+#: panels/network/wireless-security/eap-method-tls.ui:164 -+#: panels/network/wireless-security/ws-leap.ui:68 -+#: panels/network/wireless-security/ws-wpa-psk.ui:76 - msgid "Sho_w password" - msgstr "パスワードを表示(_W)" - --#: ../panels/network/wireless-security/eap-method-peap.c:63 -+#: panels/network/wireless-security/eap-method-peap.c:63 - #, c-format - msgid "invalid EAP-PEAP CA certificate: %s" - msgstr "無効なEAP-LEAP CA証明書: %s" - --#: ../panels/network/wireless-security/eap-method-peap.c:68 -+#: panels/network/wireless-security/eap-method-peap.c:68 - msgid "invalid EAP-PEAP CA certificate: no certificate specified" - msgstr "無効なEAP-LEAP CA証明書: 認証書が指定されていない" - --#: ../panels/network/wireless-security/eap-method-peap.c:287 --#: ../panels/network/wireless-security/eap-method-ttls.c:336 --#: ../panels/network/wireless-security/wireless-security.c:441 -+#: panels/network/wireless-security/eap-method-peap.c:287 -+#: panels/network/wireless-security/eap-method-ttls.c:336 -+#: panels/network/wireless-security/wireless-security.c:441 - msgid "MD5" - msgstr "MD5" - --#: ../panels/network/wireless-security/eap-method-peap.c:381 --#: ../panels/network/wireless-security/eap-method-tls.c:501 --#: ../panels/network/wireless-security/eap-method-ttls.c:430 -+#: panels/network/wireless-security/eap-method-peap.c:381 -+#: panels/network/wireless-security/eap-method-tls.c:492 -+#: panels/network/wireless-security/eap-method-ttls.c:430 - msgid "Choose a Certificate Authority certificate" - msgstr "認証局(CA)証明書を選択" - --#: ../panels/network/wireless-security/eap-method-peap.ui.h:2 -+#: panels/network/wireless-security/eap-method-peap.ui:25 - msgid "Version 0" - msgstr "バージョン 0" - --#: ../panels/network/wireless-security/eap-method-peap.ui.h:3 -+#: panels/network/wireless-security/eap-method-peap.ui:28 - msgid "Version 1" - msgstr "バージョン 1" - --#: ../panels/network/wireless-security/eap-method-peap.ui.h:5 --#: ../panels/network/wireless-security/eap-method-tls.ui.h:3 --#: ../panels/network/wireless-security/eap-method-ttls.ui.h:2 -+#: panels/network/wireless-security/eap-method-peap.ui:74 -+#: panels/network/wireless-security/eap-method-tls.ui:75 -+#: panels/network/wireless-security/eap-method-ttls.ui:57 - msgid "C_A certificate" - msgstr "CA証明書(_A)" - --#: ../panels/network/wireless-security/eap-method-peap.ui.h:6 --#: ../panels/network/wireless-security/eap-method-tls.ui.h:4 --#: ../panels/network/wireless-security/eap-method-ttls.ui.h:3 -+#: panels/network/wireless-security/eap-method-peap.ui:96 -+#: panels/network/wireless-security/eap-method-tls.ui:97 -+#: panels/network/wireless-security/eap-method-ttls.ui:79 - msgid "No CA certificate is _required" - msgstr "CA証明書が要求されましたが存在しません(_R)" - --#: ../panels/network/wireless-security/eap-method-peap.ui.h:8 -+#: panels/network/wireless-security/eap-method-peap.ui:114 - msgid "PEAP _version" - msgstr "PEAPバージョン(_V)" - --#: ../panels/network/wireless-security/eap-method-simple.c:74 -+#: panels/network/wireless-security/eap-method-simple.c:74 - msgid "missing EAP username" - msgstr "EAPユーザー名が見つかりません" - --#: ../panels/network/wireless-security/eap-method-simple.c:87 -+#: panels/network/wireless-security/eap-method-simple.c:87 - msgid "missing EAP password" - msgstr "EAPパスワードが見つかりません" - --#: ../panels/network/wireless-security/eap-method-tls.c:68 -+#: panels/network/wireless-security/eap-method-tls.c:68 - msgid "missing EAP-TLS identity" - msgstr "EAP-ELS認証" - --#: ../panels/network/wireless-security/eap-method-tls.c:77 -+#: panels/network/wireless-security/eap-method-tls.c:77 - #, c-format - msgid "invalid EAP-TLS CA certificate: %s" - msgstr "EAP-TLSユーザー名が見つかりません: %s" - --#: ../panels/network/wireless-security/eap-method-tls.c:84 -+#: panels/network/wireless-security/eap-method-tls.c:84 - msgid "invalid EAP-TLS CA certificate: no certificate specified" - msgstr "無効なEAP-TLS CA証明書: 認証書が指定されていない" - --#: ../panels/network/wireless-security/eap-method-tls.c:95 --msgid "invalid EAP-TLS password: missing" --msgstr "無効なEAP-TLSパスワード: 見つかりません" -- --#: ../panels/network/wireless-security/eap-method-tls.c:109 -+#: panels/network/wireless-security/eap-method-tls.c:100 - #, c-format - msgid "invalid EAP-TLS private-key: %s" - msgstr "無効なEAP-TLS秘密鍵: %s" - --#: ../panels/network/wireless-security/eap-method-tls.c:119 -+#: panels/network/wireless-security/eap-method-tls.c:110 - #, c-format - msgid "invalid EAP-TLS user-certificate: %s" - msgstr "無効なEAP-TLSユーザー証明書: %s" - --#: ../panels/network/wireless-security/eap-method-tls.c:316 -+#: panels/network/wireless-security/eap-method-tls.c:307 - msgid "Unencrypted private keys are insecure" - msgstr "暗号化のないプライベートキーは安全ではありません" - --#: ../panels/network/wireless-security/eap-method-tls.c:319 -+#: panels/network/wireless-security/eap-method-tls.c:310 - msgid "" - "The selected private key does not appear to be protected by a password. This " - "could allow your security credentials to be compromised. Please select a " - "password-protected private key.\n" - "\n" - "(You can password-protect your private key with openssl)" --msgstr "" --"選択したプライベートキーはパスワードで保護されていないようです。この状態は 信" --"用情報の侵害を許してしまいます。パスワード保護のあるプライベートキーを選択し" --"てください。\n" -+msgstr "選択したプライベートキーはパスワードで保護されていないようです。この状態は 信用情報の侵害を許してしまいます。パスワード保護のあるプライベートキーを選択してください。\n" - "\n" - "(プライベートキーは openssl を使用してパスワード保護ができます)" - --#: ../panels/network/wireless-security/eap-method-tls.c:495 -+#: panels/network/wireless-security/eap-method-tls.c:486 - msgid "Choose your personal certificate" - msgstr "個人用証明書を選択する" - --#: ../panels/network/wireless-security/eap-method-tls.c:507 -+#: panels/network/wireless-security/eap-method-tls.c:498 - msgid "Choose your private key" - msgstr "プライベートキーを選択する" - --#: ../panels/network/wireless-security/eap-method-tls.ui.h:1 -+#: panels/network/wireless-security/eap-method-tls.ui:24 - msgid "I_dentity" - msgstr "アイデンティティ(_D)" - --#: ../panels/network/wireless-security/eap-method-tls.ui.h:2 -+#: panels/network/wireless-security/eap-method-tls.ui:50 - msgid "_User certificate" - msgstr "ユーザー証明書(_U)" - --#: ../panels/network/wireless-security/eap-method-tls.ui.h:5 -+#: panels/network/wireless-security/eap-method-tls.ui:115 - msgid "Private _key" - msgstr "プライベートキー(_K)" - --#: ../panels/network/wireless-security/eap-method-tls.ui.h:6 -+#: panels/network/wireless-security/eap-method-tls.ui:140 - msgid "_Private key password" - msgstr "プライベートキーのパスワード(_P)" - --#: ../panels/network/wireless-security/eap-method-ttls.c:63 -+#: panels/network/wireless-security/eap-method-ttls.c:63 - #, c-format - msgid "invalid EAP-TTLS CA certificate: %s" - msgstr "無効なEAP-TTLS CA証明書: %s" - --#: ../panels/network/wireless-security/eap-method-ttls.c:68 -+#: panels/network/wireless-security/eap-method-ttls.c:68 - msgid "invalid EAP-TTLS CA certificate: no certificate specified" - msgstr "無効なEAP-TTLS CA証明書: 証明書が指定されていない" - --#: ../panels/network/wireless-security/eap-method-ttls.c:259 -+#: panels/network/wireless-security/eap-method-ttls.c:259 - msgid "PAP" - msgstr "PAP" - --#: ../panels/network/wireless-security/eap-method-ttls.c:274 -+#: panels/network/wireless-security/eap-method-ttls.c:274 - msgid "MSCHAP" - msgstr "MSCHAP" - --#: ../panels/network/wireless-security/eap-method-ttls.c:305 -+#: panels/network/wireless-security/eap-method-ttls.c:305 - msgid "MSCHAPv2 (no EAP)" - msgstr "MSCHAPv2 (no EAP)" - --#: ../panels/network/wireless-security/eap-method-ttls.c:321 -+#: panels/network/wireless-security/eap-method-ttls.c:321 - msgid "CHAP" - msgstr "CHAP" - --#: ../panels/network/wireless-security/wireless-security.c:87 -+#: panels/network/wireless-security/wireless-security.c:87 - msgid "Unknown error validating 802.1X security" - msgstr "802.1X セキュリティを検証中に未知のエラー" - --#: ../panels/network/wireless-security/wireless-security.c:453 -+#: panels/network/wireless-security/wireless-security.c:453 - msgid "TLS" - msgstr "TLS" - --#: ../panels/network/wireless-security/wireless-security.c:477 -+#: panels/network/wireless-security/wireless-security.c:477 - msgid "PWD" - msgstr "PWD" - --#: ../panels/network/wireless-security/wireless-security.c:488 -+#: panels/network/wireless-security/wireless-security.c:488 - msgid "FAST" - msgstr "FAST" - --#: ../panels/network/wireless-security/wireless-security.c:499 -+#: panels/network/wireless-security/wireless-security.c:499 - msgid "Tunneled TLS" - msgstr "トンネル化 TLS" - --#: ../panels/network/wireless-security/wireless-security.c:510 -+#: panels/network/wireless-security/wireless-security.c:510 - msgid "Protected EAP (PEAP)" - msgstr "保護つき EAP (PEAP)" - --#: ../panels/network/wireless-security/ws-dynamic-wep.ui.h:1 --#: ../panels/network/wireless-security/ws-wep-key.ui.h:6 --#: ../panels/network/wireless-security/ws-wpa-eap.ui.h:1 -+#: panels/network/wireless-security/ws-dynamic-wep.ui:39 -+#: panels/network/wireless-security/ws-wep-key.ui:115 -+#: panels/network/wireless-security/ws-wpa-eap.ui:33 - msgid "Au_thentication" - msgstr "認証(_T)" - --#: ../panels/network/wireless-security/ws-leap.c:63 -+#: panels/network/wireless-security/ws-leap.c:63 - msgid "missing leap-username" - msgstr "LEAPユーザー名が指定されていません" - --#: ../panels/network/wireless-security/ws-leap.c:74 -+#: panels/network/wireless-security/ws-leap.c:74 - msgid "missing leap-password" - msgstr "LEAPパスワードが指定されていません" - --#: ../panels/network/wireless-security/ws-wep-key.c:107 -+#: panels/network/wireless-security/ws-wep-key.c:107 - msgid "missing wep-key" - msgstr "WEPキーが指定されていません" - --#: ../panels/network/wireless-security/ws-wep-key.c:116 -+#: panels/network/wireless-security/ws-wep-key.c:116 - #, c-format - msgid "invalid wep-key: key with a length of %zu must contain only hex-digits" --msgstr "" --"無効なWEPキー: キーの長さが%zu文字の場合、十六進数字以外は使用できません" -+msgstr "無効なWEPキー: キーの長さが%zu文字の場合、十六進数字以外は使用できません" - --#: ../panels/network/wireless-security/ws-wep-key.c:124 -+#: panels/network/wireless-security/ws-wep-key.c:124 - #, c-format - msgid "" - "invalid wep-key: key with a length of %zu must contain only ascii characters" --msgstr "" --"無効なWEPキー: キーの長さが%zu文字の場合、アスキー文字以外は使用できません" -+msgstr "無効なWEPキー: キーの長さが%zu文字の場合、アスキー文字以外は使用できません" - --#: ../panels/network/wireless-security/ws-wep-key.c:130 -+#: panels/network/wireless-security/ws-wep-key.c:130 - #, c-format - msgid "" - "invalid wep-key: wrong key length %zu. A key must be either of length 5/13 " - "(ascii) or 10/26 (hex)" --msgstr "" --"無効なWEPキー: キーの長さ %zu は使用できません。WEPキーは長さ5文字か13文字の" --"アスキー文字、または10文字か26文字の十六進数字のどちらかでなければなりません" -+msgstr "無効なWEPキー: キーの長さ %zu は使用できません。WEPキーは長さ5文字か13文字のアスキー文字、または10文字か26文字の十六進数字のどちらかでなければなりません" - --#: ../panels/network/wireless-security/ws-wep-key.c:137 -+#: panels/network/wireless-security/ws-wep-key.c:137 - msgid "invalid wep-key: passphrase must be non-empty" - msgstr "無効なWEPキー: パスフレーズには必ず何か入力してください" - --#: ../panels/network/wireless-security/ws-wep-key.c:139 -+#: panels/network/wireless-security/ws-wep-key.c:139 - msgid "invalid wep-key: passphrase must be shorter than 64 characters" - msgstr "無効なWEPキー: パスフレーズは64文字未満でなければなりません" - --#: ../panels/network/wireless-security/ws-wep-key.ui.h:1 -+#: panels/network/wireless-security/ws-wep-key.ui:11 - msgid "1 (Default)" - msgstr "1 (デフォルト)" - --#: ../panels/network/wireless-security/ws-wep-key.ui.h:2 -+#: panels/network/wireless-security/ws-wep-key.ui:31 - msgid "Open System" - msgstr "オープンシステム" - --#: ../panels/network/wireless-security/ws-wep-key.ui.h:3 -+#: panels/network/wireless-security/ws-wep-key.ui:34 - msgid "Shared Key" - msgstr "共有鍵" - --#: ../panels/network/wireless-security/ws-wep-key.ui.h:4 -+#: panels/network/wireless-security/ws-wep-key.ui:56 - msgid "_Key" - msgstr "キー(_K)" - --#: ../panels/network/wireless-security/ws-wep-key.ui.h:5 -+#: panels/network/wireless-security/ws-wep-key.ui:94 - msgid "Sho_w key" - msgstr "キーを表示(_W)" - --#: ../panels/network/wireless-security/ws-wep-key.ui.h:7 -+#: panels/network/wireless-security/ws-wep-key.ui:152 - msgid "WEP inde_x" - msgstr "WEPインデックス(_X)" - --#: ../panels/network/wireless-security/ws-wpa-psk.c:70 -+#: panels/network/wireless-security/ws-wpa-psk.c:70 - #, c-format - msgid "" - "invalid wpa-psk: invalid key-length %zu. Must be [8,63] bytes or 64 hex " - "digits" --msgstr "" --"無効なWPA PSK: キーの長さ %zu は無効です。8文字以上〜63文字以下、もしくは十六" --"進数表記で64文字でなければなりません" -+msgstr "無効なWPA PSK: キーの長さ %zu は無効です。8文字以上〜63文字以下、もしくは十六進数表記で64文字でなければなりません" - --#: ../panels/network/wireless-security/ws-wpa-psk.c:79 -+#: panels/network/wireless-security/ws-wpa-psk.c:79 - msgid "invalid wpa-psk: cannot interpret key with 64 bytes as hex" - msgstr "無効なWPA PSK: キーが64文字の場合、十六進数字以外は使用できません" - --#: ../panels/network/wireless-security/ws-wpa-psk.ui.h:2 -+#: panels/network/wireless-security/ws-wpa-psk.ui:50 - msgid "_Type" - msgstr "種類(_T)" - - #. This is the per application switch for message tray usage. --#: ../panels/notifications/edit-dialog.ui.h:2 -+#: panels/notifications/edit-dialog.ui:64 - msgctxt "notifications" - msgid "_Notifications" - msgstr "通知(_N)" - - #. This is the setting to configure sounds associated with notifications. --#: ../panels/notifications/edit-dialog.ui.h:4 -+#: panels/notifications/edit-dialog.ui:116 - msgctxt "notifications" - msgid "Sound _Alerts" - msgstr "サウンドアラート(_A)" - --#: ../panels/notifications/edit-dialog.ui.h:5 -+#: panels/notifications/edit-dialog.ui:172 - msgctxt "notifications" - msgid "Notification _Popups" - msgstr "通知ポップアップ(_P)" - --#: ../panels/notifications/edit-dialog.ui.h:6 -+#: panels/notifications/edit-dialog.ui:188 - msgid "" - "Notifications will continue to appear in the notification list when popups " - "are disabled." - msgstr "ポップアップを無効にすると、通知リストに通知が表示され続けます。" - - #. Popups here refers to message tray notifications in the middle of the screen. --#: ../panels/notifications/edit-dialog.ui.h:8 -+#: panels/notifications/edit-dialog.ui:253 - msgctxt "notifications" - msgid "Show Message _Content in Popups" - msgstr "ポップアップにメッセージの内容を表示する(_C)" - --#: ../panels/notifications/edit-dialog.ui.h:9 -+#: panels/notifications/edit-dialog.ui:304 - msgctxt "notifications" - msgid "_Lock Screen Notifications" - msgstr "ロック画面での通知(_L)" - --#: ../panels/notifications/edit-dialog.ui.h:10 -+#: panels/notifications/edit-dialog.ui:355 - msgctxt "notifications" - msgid "Show Message C_ontent on Lock Screen" - msgstr "ロック画面にメッセージの内容を表示する(_O)" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/notifications/gnome-notifications-panel.desktop.in.in.h:2 --msgid "No­ti­fi­ca­tions" -+#: panels/notifications/gnome-notifications-panel.desktop.in.in:3 -+msgid "Notifications" - msgstr "通知" - --#: ../panels/notifications/gnome-notifications-panel.desktop.in.in.h:3 -+#: panels/notifications/gnome-notifications-panel.desktop.in.in:4 - msgid "Control which notifications are displayed and what they show" - msgstr "表示する通知およびその表示方法について設定します" - --#. Translators: those are keywords for the notifications control-center panel --#: ../panels/notifications/gnome-notifications-panel.desktop.in.in.h:5 -+#. 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: 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 "" --"Notifications;Banner;Message;Tray;Popup;通知;バナー;メッセージ;トレイ;ポップ" --"アップ;" -+msgstr "Notifications;Banner;Message;Tray;Popup;通知;バナー;メッセージ;トレイ;ポップアップ;" - --#: ../panels/notifications/notifications.ui.h:1 -+#: panels/notifications/notifications.ui:84 - msgid "Notification _Popups" - msgstr "通知ポップアップ(_P)" - --#: ../panels/notifications/notifications.ui.h:2 -+#: panels/notifications/notifications.ui:134 - msgid "_Lock Screen Notifications" - msgstr "ロック画面での通知(_L)" - - #. List of applications. --#: ../panels/notifications/notifications.ui.h:4 --#: ../panels/privacy/privacy.ui.h:45 ../panels/sound/gvc-mixer-dialog.c:1781 -+#: panels/notifications/notifications.ui:180 panels/privacy/privacy.ui:875 -+#: panels/sound/gvc-mixer-dialog.c:1768 - msgid "Applications" - msgstr "アプリケーション" - --#: ../panels/online-accounts/cc-online-accounts-panel.c:148 -+#: panels/online-accounts/cc-online-accounts-panel.c:148 - msgctxt "Online Account" - msgid "Other" - msgstr "その他" - - #. 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:603 -+#: panels/online-accounts/cc-online-accounts-panel.c:612 - #, c-format - msgid "%s Account" - msgstr "%s アカウント" - --#: ../panels/online-accounts/cc-online-accounts-panel.c:895 -+#: panels/online-accounts/cc-online-accounts-panel.c:904 - msgid "Error removing account" - msgstr "アカウント削除に失敗" - - #. Translators: The %s is the username (eg., debarshi.ray@gmail.com - #. * or rishi). - #. --#: ../panels/online-accounts/cc-online-accounts-panel.c:960 -+#: panels/online-accounts/cc-online-accounts-panel.c:969 - #, c-format - msgid "%s removed" - msgstr "%s 削除しました" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/online-accounts/gnome-online-accounts-panel.desktop.in.in.h:2 --msgid "On­line Accounts" -+#: panels/online-accounts/gnome-online-accounts-panel.desktop.in.in:3 -+msgid "Online Accounts" - msgstr "オンラインアカウント" - --#: ../panels/online-accounts/gnome-online-accounts-panel.desktop.in.in.h:3 -+#: panels/online-accounts/gnome-online-accounts-panel.desktop.in.in:4 - msgid "Connect to your online accounts and decide what to use them for" - msgstr "オンラインアカウントへの接続や利用方法を設定します。" - -+#. 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 "ゴアパネル" -+ -+#. 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.h:5 -+#: 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;" --msgstr "" --"Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;" --"Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤ" --"フー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;" --"OnlineAccounts;" -+msgstr "Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;グーグル;フェイスブック;ツイッター;ヤフー;ウェブ;オンライン;チャット;カレンダー;メール;連絡先;Flickr;OnlineAccounts;" - - #. Translators: This is the button which allows undoing the removal of the printer. --#: ../panels/online-accounts/online-accounts.ui.h:1 --#: ../panels/printers/printers.ui.h:4 -+#: panels/online-accounts/online-accounts.ui:38 panels/printers/printers.ui:71 - msgid "Undo" - msgstr "元に戻す" - --#: ../panels/online-accounts/online-accounts.ui.h:2 -+#: panels/online-accounts/online-accounts.ui:125 - msgid "Connect to your data in the cloud" - msgstr "クラウド上のあなたのデータと接続する" - --#: ../panels/online-accounts/online-accounts.ui.h:3 -+#: panels/online-accounts/online-accounts.ui:137 - msgid "No internet connection — connect to set up new online accounts" --msgstr "" --"インターネット接続がありません — 新しいオンラインアカウントのセットアップのた" --"めに接続" -+msgstr "インターネット接続がありません — 新しいオンラインアカウントのセットアップのために接続" - --#: ../panels/online-accounts/online-accounts.ui.h:4 -+#: panels/online-accounts/online-accounts.ui:159 - msgid "Add an account" - msgstr "アカウントの追加" - --#: ../panels/online-accounts/online-accounts.ui.h:5 -+#: panels/online-accounts/online-accounts.ui:264 - msgid "Remove Account" - msgstr "アカウントの削除" - --#: ../panels/power/cc-power-panel.c:253 -+#: panels/power/cc-power-panel.c:253 - msgid "Unknown time" - msgstr "不明" - --#: ../panels/power/cc-power-panel.c:259 -+#: panels/power/cc-power-panel.c:259 - #, c-format - msgid "%i minute" - msgid_plural "%i minutes" - msgstr[0] "%i 分" - --#: ../panels/power/cc-power-panel.c:271 -+#: panels/power/cc-power-panel.c:271 - #, c-format - msgid "%i hour" - msgid_plural "%i hours" -@@ -3869,1165 +4005,1218 @@ msgstr[0] "%i 時間" - - #. TRANSLATOR: "%i %s %i %s" are "%i hours %i minutes" - #. * Swap order with "%2$s %2$i %1$s %1$i if needed --#: ../panels/power/cc-power-panel.c:279 -+#: panels/power/cc-power-panel.c:279 - #, c-format - msgid "%i %s %i %s" - msgstr "%i %s %i %s" - --#: ../panels/power/cc-power-panel.c:280 -+#: panels/power/cc-power-panel.c:280 - msgid "hour" - msgid_plural "hours" - msgstr[0] "時間" - --#: ../panels/power/cc-power-panel.c:281 -+#: panels/power/cc-power-panel.c:281 - msgid "minute" - msgid_plural "minutes" - msgstr[0] "分" - - #. TRANSLATORS: %1 is a time string, e.g. "1 hour 5 minutes" --#: ../panels/power/cc-power-panel.c:300 -+#: panels/power/cc-power-panel.c:300 - #, c-format - msgid "%s until fully charged" - msgstr "フル充電まで %s" - - #. TRANSLATORS: %1 is a time string, e.g. "1 hour 5 minutes" --#: ../panels/power/cc-power-panel.c:307 -+#: panels/power/cc-power-panel.c:307 - #, c-format - msgid "Caution: %s remaining" - msgstr "注意: 残り %s" - - #. TRANSLATORS: %1 is a time string, e.g. "1 hour 5 minutes" --#: ../panels/power/cc-power-panel.c:312 -+#: panels/power/cc-power-panel.c:312 - #, c-format - msgid "%s remaining" - msgstr "残り %s" - - #. TRANSLATORS: primary battery --#: ../panels/power/cc-power-panel.c:317 ../panels/power/cc-power-panel.c:345 -+#: panels/power/cc-power-panel.c:317 panels/power/cc-power-panel.c:345 - msgid "Fully charged" - msgstr "フル充電" - - #. TRANSLATORS: primary battery --#: ../panels/power/cc-power-panel.c:321 ../panels/power/cc-power-panel.c:349 -+#: panels/power/cc-power-panel.c:321 panels/power/cc-power-panel.c:349 - msgid "Empty" - msgstr "空" - - #. TRANSLATORS: primary battery --#: ../panels/power/cc-power-panel.c:336 -+#: panels/power/cc-power-panel.c:336 - msgid "Charging" - msgstr "充電中" - - #. TRANSLATORS: primary battery --#: ../panels/power/cc-power-panel.c:341 -+#: panels/power/cc-power-panel.c:341 - msgid "Discharging" - msgstr "放電中" - --#: ../panels/power/cc-power-panel.c:464 -+#: panels/power/cc-power-panel.c:464 - msgctxt "Battery name" - msgid "Main" - msgstr "主" - --#: ../panels/power/cc-power-panel.c:466 -+#: panels/power/cc-power-panel.c:466 - msgctxt "Battery name" - msgid "Extra" - msgstr "予備" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:537 -+#: panels/power/cc-power-panel.c:537 - msgid "Wireless mouse" - msgstr "ワイヤレスマウス" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:540 -+#: panels/power/cc-power-panel.c:540 - msgid "Wireless keyboard" - msgstr "ワイヤレスキーボード" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:543 -+#: panels/power/cc-power-panel.c:543 - msgid "Uninterruptible power supply" - msgstr "無停電電源装置" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:546 -+#: panels/power/cc-power-panel.c:546 - msgid "Personal digital assistant" - msgstr "携帯情報端末" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:549 -+#: panels/power/cc-power-panel.c:549 - msgid "Cellphone" - msgstr "携帯電話" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:552 -+#: panels/power/cc-power-panel.c:552 - msgid "Media player" - msgstr "音楽プレイヤー" - - #. 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 "タブレット" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:558 -+#: panels/power/cc-power-panel.c:558 - msgid "Computer" - msgstr "コンピューター" - -+#. TRANSLATORS: secondary battery -+#: panels/power/cc-power-panel.c:561 -+msgid "Gaming input device" -+msgstr "ゲーミング入力装置" -+ - #. TRANSLATORS: secondary battery, misc --#: ../panels/power/cc-power-panel.c:561 ../panels/power/cc-power-panel.c:801 --#: ../panels/power/cc-power-panel.c:2356 -+#: panels/power/cc-power-panel.c:564 panels/power/cc-power-panel.c:804 -+#: panels/power/cc-power-panel.c:2380 - msgid "Battery" - msgstr "バッテリー" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:615 -+#: panels/power/cc-power-panel.c:618 - msgctxt "Battery power" - msgid "Charging" - msgstr "充電中" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:622 -+#: panels/power/cc-power-panel.c:625 - msgctxt "Battery power" - msgid "Caution" - msgstr "注意" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:627 -+#: panels/power/cc-power-panel.c:630 - msgctxt "Battery power" - msgid "Low" - msgstr "少ない" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:632 -+#: panels/power/cc-power-panel.c:635 - msgctxt "Battery power" - msgid "Good" - msgstr "充分" - - #. TRANSLATORS: primary battery --#: ../panels/power/cc-power-panel.c:637 -+#: panels/power/cc-power-panel.c:640 - msgctxt "Battery power" - msgid "Fully charged" - msgstr "フル充電" - - #. TRANSLATORS: primary battery --#: ../panels/power/cc-power-panel.c:641 -+#: panels/power/cc-power-panel.c:644 - msgctxt "Battery power" - msgid "Empty" - msgstr "空" - --#: ../panels/power/cc-power-panel.c:799 -+#: panels/power/cc-power-panel.c:802 - msgid "Batteries" - msgstr "バッテリー" - --#: ../panels/power/cc-power-panel.c:1227 -+#: panels/power/cc-power-panel.c:1242 - msgid "When _idle" - msgstr "アイドル時(_I)" - --#: ../panels/power/cc-power-panel.c:1681 -+#: panels/power/cc-power-panel.c:1696 - msgid "Power Saving" - msgstr "省電力" - --#: ../panels/power/cc-power-panel.c:1712 -+#: panels/power/cc-power-panel.c:1727 - msgid "_Screen brightness" - msgstr "画面の明るさ(_S)" - --#: ../panels/power/cc-power-panel.c:1731 -+#: panels/power/cc-power-panel.c:1746 - msgid "Automatic brightness" - msgstr "明るさ自動調整" - --#: ../panels/power/cc-power-panel.c:1751 -+#: panels/power/cc-power-panel.c:1766 - msgid "_Keyboard brightness" - msgstr "キーボードの明るさ(_K)" - --#: ../panels/power/cc-power-panel.c:1761 -+#: panels/power/cc-power-panel.c:1776 - msgid "_Dim screen when inactive" - msgstr "操作していないときに画面を暗くする(_D)" - --#: ../panels/power/cc-power-panel.c:1786 -+#: panels/power/cc-power-panel.c:1801 - msgid "_Blank screen" - msgstr "ブランクスクリーン(_B)" - --#: ../panels/power/cc-power-panel.c:1823 -+#: panels/power/cc-power-panel.c:1838 - msgid "_Wi-Fi" - msgstr "Wi-Fi(_W)" - --#: ../panels/power/cc-power-panel.c:1828 -+#: panels/power/cc-power-panel.c:1843 - msgid "Turn off Wi-Fi to save power." - msgstr "Wi-Fi をオフにして節電します。" - --#: ../panels/power/cc-power-panel.c:1853 -+#: panels/power/cc-power-panel.c:1868 - msgid "_Mobile broadband" - msgstr "モバイルブロードバンド(_M)" - --#: ../panels/power/cc-power-panel.c:1858 -+#: panels/power/cc-power-panel.c:1873 - msgid "Turn off mobile broadband (3G, 4G, LTE, etc.) to save power." - msgstr "モバイルブロードバンド (3G、4G、LTE など) をオフにして節電します。" - --#: ../panels/power/cc-power-panel.c:1903 -+#: panels/power/cc-power-panel.c:1926 - msgid "_Bluetooth" - msgstr "Bluetooth(_B)" - --#: ../panels/power/cc-power-panel.c:1966 -+#: panels/power/cc-power-panel.c:1931 -+msgid "Turn off Bluetooth to save power." -+msgstr "Bluetooth をオフにして節電します。" -+ -+#: panels/power/cc-power-panel.c:1990 - msgid "When on battery power" - msgstr "バッテリー動作時" - --#: ../panels/power/cc-power-panel.c:1968 -+#: panels/power/cc-power-panel.c:1992 - msgid "When plugged in" - msgstr "電源接続時" - --#: ../panels/power/cc-power-panel.c:2063 -+#: panels/power/cc-power-panel.c:2087 - msgid "Suspend" - msgstr "サスペンド" - --#: ../panels/power/cc-power-panel.c:2064 -+#: panels/power/cc-power-panel.c:2088 - msgid "Power Off" - msgstr "電源オフ" - --#: ../panels/power/cc-power-panel.c:2065 -+#: panels/power/cc-power-panel.c:2089 - msgid "Hibernate" - msgstr "ハイバーネート" - --#: ../panels/power/cc-power-panel.c:2066 -+#: panels/power/cc-power-panel.c:2090 - msgid "Nothing" - msgstr "なにもしない" - - #. Frame header --#: ../panels/power/cc-power-panel.c:2180 -+#: panels/power/cc-power-panel.c:2204 - msgid "Suspend & Power Button" - msgstr "サスペンド, 電源ボタン" - --#: ../panels/power/cc-power-panel.c:2219 -+#: panels/power/cc-power-panel.c:2243 - msgid "_Automatic suspend" - msgstr "自動サスペンド(_A)" - --#: ../panels/power/cc-power-panel.c:2220 -+#: panels/power/cc-power-panel.c:2244 - msgid "Automatic suspend" - msgstr "自動サスペンド" - --#: ../panels/power/cc-power-panel.c:2287 -+#: panels/power/cc-power-panel.c:2311 - msgid "_When the Power Button is pressed" - msgstr "電源ボタンを押した時の動作(_W)" - --#: ../panels/power/cc-power-panel.c:2406 ../shell/cc-window.c:247 --#: ../shell/panel-list.ui.h:1 -+#: panels/power/cc-power-panel.c:2430 shell/cc-window.c:216 -+#: shell/panel-list.ui:45 - msgid "Devices" - msgstr "デバイス" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/power/gnome-power-panel.desktop.in.in.h:2 --msgid "Po­wer" --msgstr "電源管理" -+#: panels/power/gnome-power-panel.desktop.in.in:3 -+msgid "Power" -+msgstr "電源" - --#: ../panels/power/gnome-power-panel.desktop.in.in.h:3 -+#: panels/power/gnome-power-panel.desktop.in.in:4 - msgid "View your battery status and change power saving settings" - msgstr "バッテリー状態の表示、省電力の設定をします" - --#. Translators: those are keywords for the power control-center panel --#: ../panels/power/gnome-power-panel.desktop.in.in.h:5 -+#. 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: 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 "" --"Power;Sleep;Suspend;Hibernate;Battery;Brightness;Dim;Blank;Monitor;DPMS;Idle;" --"電源;スリープ;サスペンド;ハイバネート;バッテリー;明るさ;ブランクスクリーン;モ" --"ニター;画面;ディスプレイ;アイドル;待機;" -+msgstr "Power;Sleep;Suspend;Hibernate;Battery;Brightness;Dim;Blank;Monitor;DPMS;Idle;電源;スリープ;サスペンド;ハイバネート;バッテリー;明るさ;ブランクスクリーン;モニター;画面;ディスプレイ;アイドル;待機;" -+ -+#: panels/power/power.ui:17 -+msgid "20 minutes" -+msgstr "20 分" -+ -+#: panels/power/power.ui:21 -+msgid "25 minutes" -+msgstr "25 分" - --#: ../panels/power/power.ui.h:3 -+#: panels/power/power.ui:29 - msgid "45 minutes" - msgstr "45 分" - --#: ../panels/power/power.ui.h:4 ../panels/privacy/privacy.ui.h:8 -+#: panels/power/power.ui:33 panels/privacy/privacy.ui:42 -+#: panels/privacy/privacy.ui:56 - msgid "1 hour" - msgstr "1 時間" - --#: ../panels/power/power.ui.h:5 -+#: panels/power/power.ui:37 - msgid "80 minutes" - msgstr "80 分" - --#: ../panels/power/power.ui.h:6 -+#: panels/power/power.ui:41 - msgid "90 minutes" - msgstr "90 分" - --#: ../panels/power/power.ui.h:7 -+#: panels/power/power.ui:45 - msgid "100 minutes" - msgstr "100 分" - --#: ../panels/power/power.ui.h:8 -+#: panels/power/power.ui:49 - msgid "2 hours" - msgstr "2 時間" - --#: ../panels/power/power.ui.h:9 ../panels/privacy/privacy.ui.h:3 -+#: panels/power/power.ui:63 panels/privacy/privacy.ui:22 - msgid "1 minute" - msgstr "1 分" - --#: ../panels/power/power.ui.h:10 ../panels/privacy/privacy.ui.h:4 -+#: panels/power/power.ui:67 panels/privacy/privacy.ui:26 - msgid "2 minutes" - msgstr "2 分" - --#: ../panels/power/power.ui.h:11 ../panels/privacy/privacy.ui.h:5 -+#: panels/power/power.ui:71 panels/privacy/privacy.ui:30 - msgid "3 minutes" - msgstr "3 分" - --#: ../panels/power/power.ui.h:12 -+#: panels/power/power.ui:75 - msgid "4 minutes" - msgstr "4 分" - --#: ../panels/power/power.ui.h:13 ../panels/privacy/privacy.ui.h:6 -+#: panels/power/power.ui:79 panels/privacy/privacy.ui:34 - msgid "5 minutes" - msgstr "5 分" - --#: ../panels/power/power.ui.h:14 -+#: panels/power/power.ui:83 - msgid "8 minutes" - msgstr "8 分" - --#: ../panels/power/power.ui.h:15 -+#: panels/power/power.ui:87 - msgid "10 minutes" - msgstr "10 分" - --#: ../panels/power/power.ui.h:16 -+#: panels/power/power.ui:91 - msgid "12 minutes" - msgstr "12 分" - --#: ../panels/power/power.ui.h:18 -+#: panels/power/power.ui:155 - msgid "Automatic Suspend" - msgstr "自動サスペンド" - --#: ../panels/power/power.ui.h:19 -+#: panels/power/power.ui:180 - msgid "_Plugged In" - msgstr "電源接続時(_P)" - --#: ../panels/power/power.ui.h:20 -+#: panels/power/power.ui:196 - msgid "On _Battery Power" - msgstr "バッテリー動作時(_B)" - --#: ../panels/power/power.ui.h:21 ../panels/universal-access/uap.ui.h:36 -+#: panels/power/power.ui:241 panels/power/power.ui:301 -+#: panels/universal-access/uap.ui:1501 - msgid "Delay" - msgstr "時間" - --#: ../panels/printers/authentication-dialog.ui.h:1 -+#: panels/printers/authentication-dialog.ui:11 - msgid " " - msgstr " " - --#: ../panels/printers/authentication-dialog.ui.h:3 -+#: panels/printers/authentication-dialog.ui:42 - msgid "Authenticate" - msgstr "認証" - --#: ../panels/printers/authentication-dialog.ui.h:4 --#: ../panels/printers/new-printer-dialog.ui.h:13 -+#. Translators: This is a username on a print server. -+#: panels/printers/authentication-dialog.ui:80 -+#: panels/printers/jobs-dialog.ui:57 panels/printers/new-printer-dialog.ui:361 - msgid "Username" - msgstr "ユーザー名" - --#: ../panels/printers/authentication-dialog.ui.h:6 --#: ../panels/printers/new-printer-dialog.ui.h:11 -+#. Translators: This is a password needed for printing. -+#: panels/printers/authentication-dialog.ui:96 -+#: panels/printers/jobs-dialog.ui:70 panels/printers/new-printer-dialog.ui:382 -+#: panels/user-accounts/data/account-dialog.ui:240 -+msgid "Password" -+msgstr "パスワード" -+ -+#: panels/printers/authentication-dialog.ui:139 -+#: panels/printers/new-printer-dialog.ui:336 - msgid "Authentication Required" - msgstr "認証が要求されました" - - #. Translators: %s is the printer name --#: ../panels/printers/cc-printers-panel.c:718 -+#: panels/printers/cc-printers-panel.c:842 - #, c-format - msgid "Printer “%s” has been deleted" - msgstr "プリンター“%s”を削除しました" - - #. Translators: Addition of the new printer failed. --#: ../panels/printers/cc-printers-panel.c:909 -+#: panels/printers/cc-printers-panel.c:1142 - msgid "Failed to add new printer." - msgstr "新しいプリンターを追加できませんでした。" - - #. Translators: The XML file containing user interface can not be loaded --#: ../panels/printers/cc-printers-panel.c:1221 -+#: panels/printers/cc-printers-panel.c:1514 - #, c-format - msgid "Could not load ui: %s" - msgstr "ui ファイルを読み込めませんでした: %s" - --#: ../panels/printers/details-dialog.ui.h:2 --#: ../panels/printers/printer-entry.ui.h:9 -+#: panels/printers/details-dialog.ui:63 panels/printers/printer-entry.ui:223 - msgid "Location" - msgstr "場所" - - #. Translators: Name of column showing printer drivers --#: ../panels/printers/details-dialog.ui.h:4 --#: ../panels/printers/pp-ppd-selection-dialog.c:250 -+#: panels/printers/details-dialog.ui:111 -+#: panels/printers/pp-ppd-selection-dialog.c:250 - msgid "Driver" - msgstr "ドライバー" - --#: ../panels/printers/details-dialog.ui.h:5 -+#: panels/printers/details-dialog.ui:147 - msgid "Searching for preferred drivers…" - msgstr "推奨ドライバーの検索中…" - --#: ../panels/printers/details-dialog.ui.h:6 -+#: panels/printers/details-dialog.ui:169 - msgid "Search for Drivers" - msgstr "ドライバーを検索する" - --#: ../panels/printers/details-dialog.ui.h:7 -+#: panels/printers/details-dialog.ui:177 - msgid "Select from Database…" - msgstr "データベースから選択…" - --#: ../panels/printers/details-dialog.ui.h:8 -+#: panels/printers/details-dialog.ui:185 - msgid "Install PPD File…" - msgstr "PPDファイルのインストール…" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/printers/gnome-printers-panel.desktop.in.in.h:2 --msgid "Prin­ters" -+#: panels/printers/gnome-printers-panel.desktop.in.in:3 -+msgid "Printers" - msgstr "プリンター" - --#: ../panels/printers/gnome-printers-panel.desktop.in.in.h:3 -+#: panels/printers/gnome-printers-panel.desktop.in.in:4 - msgid "Add printers, view printer jobs and decide how you want to print" - msgstr "プリンターの追加、プリンタージョブの表示、印刷方法の設定を行います。" - --#. Translators: those are keywords for the printing control-center panel --#: ../panels/printers/gnome-printers-panel.desktop.in.in.h:5 -+#. 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 "プリンター" -+ -+#. 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 "" --"Printer;Queue;Print;Paper;Ink;Toner;プリンター;キュー;印刷;紙;インク;トナー;" -+msgstr "Printer;Queue;Print;Paper;Ink;Toner;プリンター;キュー;印刷;紙;インク;トナー;" -+ -+#. Translators: This is a windows domain used with SMB protocol. -+#: panels/printers/jobs-dialog.ui:44 -+msgid "Domain" -+msgstr "ドメイン" -+ -+#. Translators: This button authenticates all print jobs and send them for printing. -+#: panels/printers/jobs-dialog.ui:123 -+msgid "A_uthenticate" -+msgstr "認証(_U)" - - #. Translators: this action removes (purges) all the listed jobs from the list. --#: ../panels/printers/jobs-dialog.ui.h:2 -+#: panels/printers/jobs-dialog.ui:163 - msgid "Clear All" - msgstr "すべてクリア" - -+#. Translators: This button pop up authentication dialog for print jobs which need credentials. -+#: panels/printers/jobs-dialog.ui:225 -+msgid "_Authenticate" -+msgstr "認証(_A)" -+ - #. Translators: this label describes the dialog empty state, with no jobs listed. --#: ../panels/printers/jobs-dialog.ui.h:4 -+#: panels/printers/jobs-dialog.ui:354 - msgid "No Active Printer Jobs" - msgstr "アクティブなジョブはありません" - - #. Translators: This is the title presented at top of the dialog. --#: ../panels/printers/new-printer-dialog.ui.h:2 --#: ../panels/printers/pp-new-printer-dialog.c:384 --#: ../panels/printers/pp-new-printer-dialog.c:456 -+#: panels/printers/new-printer-dialog.ui:29 -+#: panels/printers/pp-new-printer-dialog.c:384 -+#: panels/printers/pp-new-printer-dialog.c:456 - msgid "Add Printer" - msgstr "プリンターの追加" - -+#. Translators: This button opens authentication dialog for selected server. - #. Translators: This buttons submits the credentials for the selected server. --#: ../panels/printers/new-printer-dialog.ui.h:6 -+#: panels/printers/new-printer-dialog.ui:96 -+#: panels/printers/new-printer-dialog.ui:111 - msgid "_Unlock" - msgstr "アンロック(_U)" - - #. Translators: No printers were detected --#: ../panels/printers/new-printer-dialog.ui.h:8 -+#: panels/printers/new-printer-dialog.ui:210 - msgid "No Printers Found" - msgstr "プリンターが見つかりません" - - #. Translators: The entered text should contain network address of a printer or a text which will filter found devices (their names and locations) --#: ../panels/printers/new-printer-dialog.ui.h:10 -+#: panels/printers/new-printer-dialog.ui:283 - msgid "Enter a network address or search for a printer" - msgstr "ネットワークアドレスを入力するかプリンターを検索してください" - --#: ../panels/printers/new-printer-dialog.ui.h:12 -+#: panels/printers/new-printer-dialog.ui:352 - msgid "Enter username and password to view printers on Print Server." --msgstr "" --"プリンターサーバーで利用可能なプリンターを表示するにはユーザー名とパスワード" --"を入力してください。" -+msgstr "プリンターサーバーで利用可能なプリンターを表示するにはユーザー名とパスワードを入力してください。" - - #. Translators: This button triggers the printing of a test page. - #. Translators: Name of job which makes printer to print test page --#: ../panels/printers/options-dialog.ui.h:2 --#: ../panels/printers/pp-options-dialog.c:893 -+#: panels/printers/options-dialog.ui:22 panels/printers/pp-options-dialog.c:893 - msgid "Test Page" - msgstr "テストページ" - - #. Translators: This is the title of the dialog. %s is the printer name. --#: ../panels/printers/pp-details-dialog.c:123 --#: ../panels/printers/pp-details-dialog.c:415 -+#: panels/printers/pp-details-dialog.c:135 -+#: panels/printers/pp-details-dialog.c:435 - #, c-format - msgid "%s Details" - msgstr "%s の詳細" - --#: ../panels/printers/pp-details-dialog.c:172 -+#: panels/printers/pp-details-dialog.c:184 - msgid "No suitable driver found" - msgstr "適切なドライバーが見つかりませんでした" - --#: ../panels/printers/pp-details-dialog.c:316 -+#: panels/printers/pp-details-dialog.c:328 - msgid "Select PPD File" - msgstr "PPDファイルの選択" - --#: ../panels/printers/pp-details-dialog.c:325 -+#: panels/printers/pp-details-dialog.c:337 - msgid "" - "PostScript Printer Description files (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *." - "PPD.GZ)" --msgstr "" --"PostScript Printer Description ファイル(*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *." --"PPD.GZ)" -+msgstr "PostScript Printer Description ファイル(*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *.PPD.GZ)" - --#: ../panels/printers/ppd-selection-dialog.ui.h:1 -+#: panels/printers/ppd-selection-dialog.ui:10 - msgid "Select Printer Driver" - msgstr "プリンタードライバーの選択" - --#: ../panels/printers/ppd-selection-dialog.ui.h:3 --#: ../panels/user-accounts/um-photo-dialog.c:96 -+#: panels/printers/ppd-selection-dialog.ui:40 -+#: panels/user-accounts/um-photo-dialog.c:105 - msgid "Select" - msgstr "選択" - --#: ../panels/printers/ppd-selection-dialog.ui.h:4 -+#: panels/printers/ppd-selection-dialog.ui:73 - msgid "Loading drivers database…" - msgstr "ドライバーのデータベースをロード中..." - - #. Translators: The found device is a JetDirect printer --#: ../panels/printers/pp-host.c:539 -+#: panels/printers/pp-host.c:539 - msgid "JetDirect Printer" - msgstr "JetDirect プリンター" - - #. Translators: The found device is a Line Printer Daemon printer --#: ../panels/printers/pp-host.c:795 -+#: panels/printers/pp-host.c:795 - msgid "LPD Printer" - msgstr "LPD プリンター" - - #. Translators: this is an option of "Two Sided" --#: ../panels/printers/pp-ipp-option-widget.c:66 --#: ../panels/printers/pp-ppd-option-widget.c:70 -+#: panels/printers/pp-ipp-option-widget.c:66 -+#: panels/printers/pp-ppd-option-widget.c:70 - msgid "One Sided" - msgstr "片面" - - #. Translators: this is an option of "Two Sided" --#: ../panels/printers/pp-ipp-option-widget.c:68 --#: ../panels/printers/pp-ppd-option-widget.c:72 -+#: panels/printers/pp-ipp-option-widget.c:68 -+#: panels/printers/pp-ppd-option-widget.c:72 - msgid "Long Edge (Standard)" - msgstr "長辺とじ(標準)" - - #. Translators: this is an option of "Two Sided" --#: ../panels/printers/pp-ipp-option-widget.c:70 --#: ../panels/printers/pp-ppd-option-widget.c:74 -+#: panels/printers/pp-ipp-option-widget.c:70 -+#: panels/printers/pp-ppd-option-widget.c:74 - msgid "Short Edge (Flip)" - msgstr "短辺とじ(フリップ)" - - #. Translators: this is an option of "Orientation" --#: ../panels/printers/pp-ipp-option-widget.c:72 -+#: panels/printers/pp-ipp-option-widget.c:72 - msgid "Portrait" - msgstr "縦方向" - - #. Translators: this is an option of "Orientation" --#: ../panels/printers/pp-ipp-option-widget.c:74 -+#: panels/printers/pp-ipp-option-widget.c:74 - msgid "Landscape" - msgstr "横方向" - - #. Translators: this is an option of "Orientation" --#: ../panels/printers/pp-ipp-option-widget.c:76 -+#: panels/printers/pp-ipp-option-widget.c:76 - msgid "Reverse landscape" - msgstr "横方向(逆向き)" - - #. Translators: this is an option of "Orientation" --#: ../panels/printers/pp-ipp-option-widget.c:78 -+#: panels/printers/pp-ipp-option-widget.c:78 - msgid "Reverse portrait" - msgstr "縦方向(逆向き)" - - #. Translators: Job's state (job is waiting to be printed) --#: ../panels/printers/pp-jobs-dialog.c:104 -+#: panels/printers/pp-jobs-dialog.c:234 - msgctxt "print job" - msgid "Pending" - msgstr "待機中" - - #. Translators: Job's state (job is held for printing) --#: ../panels/printers/pp-jobs-dialog.c:108 -+#: panels/printers/pp-jobs-dialog.c:240 - msgctxt "print job" - msgid "Paused" - msgstr "一時停止" - -+#. Translators: Job's state (job needs authentication to proceed further) -+#: panels/printers/pp-jobs-dialog.c:245 -+msgctxt "print job" -+msgid "Authentication required" -+msgstr "認証が必要です" -+ - #. Translators: Job's state (job is currently printing) --#: ../panels/printers/pp-jobs-dialog.c:112 -+#: panels/printers/pp-jobs-dialog.c:250 - msgctxt "print job" - msgid "Processing" - msgstr "印刷中" - - #. Translators: Job's state (job has been stopped) --#: ../panels/printers/pp-jobs-dialog.c:116 -+#: panels/printers/pp-jobs-dialog.c:254 - msgctxt "print job" - msgid "Stopped" - msgstr "停止" - - #. Translators: Job's state (job has been canceled) --#: ../panels/printers/pp-jobs-dialog.c:120 -+#: panels/printers/pp-jobs-dialog.c:258 - msgctxt "print job" - msgid "Canceled" - msgstr "キャンセル" - - #. Translators: Job's state (job has aborted due to error) --#: ../panels/printers/pp-jobs-dialog.c:124 -+#: panels/printers/pp-jobs-dialog.c:262 - msgctxt "print job" - msgid "Aborted" - msgstr "中止" - - #. Translators: Job's state (job has completed successfully) --#: ../panels/printers/pp-jobs-dialog.c:128 -+#: panels/printers/pp-jobs-dialog.c:266 - msgctxt "print job" - msgid "Completed" - msgstr "完了" - -+#. Translators: This label shows how many jobs of this printer needs to be authenticated to be printed. -+#: panels/printers/pp-jobs-dialog.c:390 -+#, c-format -+msgid "%u Job Requires Authentication" -+msgid_plural "%u Jobs Require Authentication" -+msgstr[0] "%u ジョブには認証が必要です" -+ - #. Translators: This is the printer name for which we are showing the active jobs --#: ../panels/printers/pp-jobs-dialog.c:310 -+#: panels/printers/pp-jobs-dialog.c:620 - #, c-format - msgctxt "Printer jobs dialog title" - msgid "%s — Active Jobs" - msgstr "%s — アクティブなジョブ" - --#: ../panels/printers/pp-new-printer-dialog.c:402 -+#. Translators: The printer needs authentication info to print. -+#: panels/printers/pp-jobs-dialog.c:625 -+#, c-format -+msgid "Enter credentials to print from %s." -+msgstr "%s から印刷するために認証情報を入力します。" -+ -+#: panels/printers/pp-new-printer-dialog.c:402 - msgid "Unlock Print Server" - msgstr "プリンターサーバーのロックを解除" - - #. Translators: Samba server needs authentication of the user to show list of its printers. --#: ../panels/printers/pp-new-printer-dialog.c:406 -+#: panels/printers/pp-new-printer-dialog.c:406 - #, c-format - msgid "Unlock %s." - msgstr "ロック解除 %s" - - #. Translators: Samba server needs authentication of the user to show list of its printers. --#: ../panels/printers/pp-new-printer-dialog.c:411 -+#: panels/printers/pp-new-printer-dialog.c:411 - #, c-format - msgid "Enter username and password to view printers on %s." --msgstr "" --"%s で利用可能なプリンターを表示するにはユーザー名とパスワードを入力してくださ" --"い。" -+msgstr "%s で利用可能なプリンターを表示するにはユーザー名とパスワードを入力してください。" - --#: ../panels/printers/pp-new-printer-dialog.c:876 -+#: panels/printers/pp-new-printer-dialog.c:876 - msgid "Searching for Printers" - msgstr "プリンターの検索" - - #. Translators: The found device is a printer connected via USB --#: ../panels/printers/pp-new-printer-dialog.c:1799 -+#: panels/printers/pp-new-printer-dialog.c:1799 - msgid "USB" - msgstr "USB" - - #. Translators: The found device is a printer connected via serial port --#: ../panels/printers/pp-new-printer-dialog.c:1804 -+#: panels/printers/pp-new-printer-dialog.c:1804 - msgid "Serial Port" - msgstr "シリアルポート" - - #. Translators: The found device is a printer connected via parallel port --#: ../panels/printers/pp-new-printer-dialog.c:1811 -+#: panels/printers/pp-new-printer-dialog.c:1811 - msgid "Parallel Port" - msgstr "パラレルポート" - - #. Translators: Location of found network printer (e.g. Kitchen, Reception) --#: ../panels/printers/pp-new-printer-dialog.c:1853 -+#: panels/printers/pp-new-printer-dialog.c:1853 - #, c-format - msgid "Location: %s" - msgstr "場所: %s" - - #. Translators: Network address of found printer --#: ../panels/printers/pp-new-printer-dialog.c:1858 -+#: panels/printers/pp-new-printer-dialog.c:1858 - #, c-format - msgid "Address: %s" - msgstr "アドレス: %s" - - #. Translators: This item is a server which needs authentication to show its printers --#: ../panels/printers/pp-new-printer-dialog.c:1887 -+#: panels/printers/pp-new-printer-dialog.c:1887 - msgid "Server requires authentication" - msgstr "サーバーが認証を要求しています" - --#: ../panels/printers/pp-options-dialog.c:83 -+#: panels/printers/pp-options-dialog.c:83 - msgid "Two Sided" - msgstr "両面" - --#: ../panels/printers/pp-options-dialog.c:84 -+#: panels/printers/pp-options-dialog.c:84 - msgid "Paper Type" - msgstr "用紙の種類" - --#: ../panels/printers/pp-options-dialog.c:85 -+#: panels/printers/pp-options-dialog.c:85 - msgid "Paper Source" - msgstr "給紙元" - --#: ../panels/printers/pp-options-dialog.c:86 -+#: panels/printers/pp-options-dialog.c:86 - msgid "Output Tray" - msgstr "出力トレイ" - --#: ../panels/printers/pp-options-dialog.c:88 -+#: panels/printers/pp-options-dialog.c:88 - msgid "GhostScript pre-filtering" - msgstr "GhostScriptのプレフィルタリング" - - #. Translators: This option sets number of pages printed on one sheet --#: ../panels/printers/pp-options-dialog.c:534 -+#: panels/printers/pp-options-dialog.c:534 - msgid "Pages per side" - msgstr "片面のページ数" - - #. Translators: This option sets whether to print on both sides of paper --#: ../panels/printers/pp-options-dialog.c:546 -+#: panels/printers/pp-options-dialog.c:546 - msgid "Two-sided" - msgstr "両面" - - #. Translators: "General" tab contains general printer options --#: ../panels/printers/pp-options-dialog.c:655 -+#: panels/printers/pp-options-dialog.c:655 - msgctxt "Printer Option Group" - msgid "General" - msgstr "汎用" - - #. Translators: "Page Setup" tab contains settings related to pages (page size, paper source, etc.) --#: ../panels/printers/pp-options-dialog.c:658 -+#: panels/printers/pp-options-dialog.c:658 - msgctxt "Printer Option Group" - msgid "Page Setup" - msgstr "ページ設定" - - #. Translators: "Installable Options" tab contains settings of presence of installed options (amount of RAM, duplex unit, etc.) --#: ../panels/printers/pp-options-dialog.c:661 -+#: panels/printers/pp-options-dialog.c:661 - msgctxt "Printer Option Group" - msgid "Installable Options" - msgstr "インストール可能なオプション" - - #. Translators: "Job" tab contains settings for jobs --#: ../panels/printers/pp-options-dialog.c:664 -+#: panels/printers/pp-options-dialog.c:664 - msgctxt "Printer Option Group" - msgid "Job" - msgstr "ジョブ" - - #. Translators: "Image Quality" tab contains settings for quality of output print (e.g. resolution) --#: ../panels/printers/pp-options-dialog.c:667 -+#: panels/printers/pp-options-dialog.c:667 - msgctxt "Printer Option Group" - msgid "Image Quality" - msgstr "画質" - - #. Translators: "Color" tab contains color settings (e.g. color printing) --#: ../panels/printers/pp-options-dialog.c:670 -+#: panels/printers/pp-options-dialog.c:670 - msgctxt "Printer Option Group" - msgid "Color" - msgstr "色" - - #. Translators: "Finishing" tab contains finishing settings (e.g. booklet printing) --#: ../panels/printers/pp-options-dialog.c:673 -+#: panels/printers/pp-options-dialog.c:673 - msgctxt "Printer Option Group" - msgid "Finishing" - msgstr "表面処理" - - #. Translators: "Advanced" tab contains all others settings --#: ../panels/printers/pp-options-dialog.c:676 -+#: panels/printers/pp-options-dialog.c:676 - msgctxt "Printer Option Group" - msgid "Advanced" - msgstr "高度" - - #. Translators: Name of job which makes printer to print test page --#: ../panels/printers/pp-options-dialog.c:908 -+#: panels/printers/pp-options-dialog.c:908 - msgid "Test page" - msgstr "テストページ" - - #. Translators: this is an option of "Paper Source" --#: ../panels/printers/pp-ppd-option-widget.c:76 --#: ../panels/printers/pp-ppd-option-widget.c:78 --#: ../panels/printers/pp-ppd-option-widget.c:86 -+#: panels/printers/pp-ppd-option-widget.c:76 -+#: panels/printers/pp-ppd-option-widget.c:78 -+#: panels/printers/pp-ppd-option-widget.c:86 - msgid "Auto Select" - msgstr "自動選択" - - #. Translators: this is an option of "Paper Source" - #. Translators: this is an option of "Resolution" --#: ../panels/printers/pp-ppd-option-widget.c:80 --#: ../panels/printers/pp-ppd-option-widget.c:82 --#: ../panels/printers/pp-ppd-option-widget.c:84 --#: ../panels/printers/pp-ppd-option-widget.c:88 -+#: panels/printers/pp-ppd-option-widget.c:80 -+#: panels/printers/pp-ppd-option-widget.c:82 -+#: panels/printers/pp-ppd-option-widget.c:84 -+#: panels/printers/pp-ppd-option-widget.c:88 - msgid "Printer Default" - msgstr "プリンターのデフォルト" - - #. Translators: this is an option of "GhostScript" --#: ../panels/printers/pp-ppd-option-widget.c:90 -+#: panels/printers/pp-ppd-option-widget.c:90 - msgid "Embed GhostScript fonts only" - msgstr "内蔵GhostScriptフォントのみ" - - #. Translators: this is an option of "GhostScript" --#: ../panels/printers/pp-ppd-option-widget.c:92 -+#: panels/printers/pp-ppd-option-widget.c:92 - msgid "Convert to PS level 1" - msgstr "PSレベル1に変換" - - #. Translators: this is an option of "GhostScript" --#: ../panels/printers/pp-ppd-option-widget.c:94 -+#: panels/printers/pp-ppd-option-widget.c:94 - msgid "Convert to PS level 2" - msgstr "PSレベル2に変換" - - #. Translators: this is an option of "GhostScript" --#: ../panels/printers/pp-ppd-option-widget.c:96 -+#: panels/printers/pp-ppd-option-widget.c:96 - msgid "No pre-filtering" - msgstr "プレフィルタリングなし" - - #. Translators: Name of column showing printer manufacturers --#: ../panels/printers/pp-ppd-selection-dialog.c:233 -+#: panels/printers/pp-ppd-selection-dialog.c:233 - msgid "Manufacturer" - msgstr "製造元" - - #. Translators: This is the label of the button that opens the Jobs Dialog. --#: ../panels/printers/pp-printer-entry.c:577 -+#: panels/printers/pp-printer-entry.c:613 panels/printers/printer-entry.ui:166 - msgid "No Active Jobs" - msgstr "アクティブなジョブがありません" - - #. Translators: This is the label of the button that opens the Jobs Dialog. --#: ../panels/printers/pp-printer-entry.c:582 -+#: panels/printers/pp-printer-entry.c:618 - #, c-format - msgid "%u Job" - msgid_plural "%u Jobs" - msgstr[0] "%u ジョブ" - -+#. Translators: Name of job which makes printer to clean its heads -+#: panels/printers/pp-printer-entry.c:752 -+msgid "Clean print heads" -+msgstr "ヘッドクリーニング" -+ - #. Translators: The printer is low on toner --#: ../panels/printers/pp-printer-entry.c:730 -+#: panels/printers/pp-printer-entry.c:804 - msgid "Low on toner" - msgstr "トナーの残量が少ないです" - - #. Translators: The printer has no toner left --#: ../panels/printers/pp-printer-entry.c:732 -+#: panels/printers/pp-printer-entry.c:806 - msgid "Out of toner" - msgstr "トナーが空です" - - #. Translators: "Developer" is a chemical for photo development, - #. * http://en.wikipedia.org/wiki/Photographic_developer --#: ../panels/printers/pp-printer-entry.c:735 -+#: panels/printers/pp-printer-entry.c:809 - msgid "Low on developer" - msgstr "現像液が少ないです" - - #. Translators: "Developer" is a chemical for photo development, - #. * http://en.wikipedia.org/wiki/Photographic_developer --#: ../panels/printers/pp-printer-entry.c:738 -+#: panels/printers/pp-printer-entry.c:812 - msgid "Out of developer" - msgstr "現像液が空です" - - #. Translators: "marker" is one color bin of the printer --#: ../panels/printers/pp-printer-entry.c:740 -+#: panels/printers/pp-printer-entry.c:814 - msgid "Low on a marker supply" - msgstr "インクが少なくなっています" - - #. Translators: "marker" is one color bin of the printer --#: ../panels/printers/pp-printer-entry.c:742 -+#: panels/printers/pp-printer-entry.c:816 - msgid "Out of a marker supply" - msgstr "インクが切れています" - - #. Translators: One or more covers on the printer are open --#: ../panels/printers/pp-printer-entry.c:744 -+#: panels/printers/pp-printer-entry.c:818 - msgid "Open cover" - msgstr "カバーが開いています" - - #. Translators: One or more doors on the printer are open --#: ../panels/printers/pp-printer-entry.c:746 -+#: panels/printers/pp-printer-entry.c:820 - msgid "Open door" - msgstr "扉が開いています" - - #. Translators: At least one input tray is low on media --#: ../panels/printers/pp-printer-entry.c:748 -+#: panels/printers/pp-printer-entry.c:822 - msgid "Low on paper" - msgstr "紙が少なくなっています" - - #. Translators: At least one input tray is empty --#: ../panels/printers/pp-printer-entry.c:750 -+#: panels/printers/pp-printer-entry.c:824 - msgid "Out of paper" - msgstr "紙が空です" - - #. Translators: The printer is offline --#: ../panels/printers/pp-printer-entry.c:752 -+#: panels/printers/pp-printer-entry.c:826 - msgctxt "printer state" - msgid "Offline" - msgstr "オフライン" - - #. Translators: Someone has stopped the Printer - #. Translators: Printer's state (no jobs can be processed) --#: ../panels/printers/pp-printer-entry.c:754 --#: ../panels/printers/pp-printer-entry.c:884 -+#: panels/printers/pp-printer-entry.c:828 -+#: panels/printers/pp-printer-entry.c:971 - msgctxt "printer state" - msgid "Stopped" - msgstr "停止中" - - #. Translators: The printer marker supply waste receptacle is almost full --#: ../panels/printers/pp-printer-entry.c:756 -+#: panels/printers/pp-printer-entry.c:830 - msgid "Waste receptacle almost full" - msgstr "廃インクタンクがもう少しでいっぱいです" - - #. Translators: The printer marker supply waste receptacle is full --#: ../panels/printers/pp-printer-entry.c:758 -+#: panels/printers/pp-printer-entry.c:832 - msgid "Waste receptacle full" - msgstr "廃インクタンクがいっぱいです" - - #. Translators: Optical photo conductors are used in laser printers --#: ../panels/printers/pp-printer-entry.c:760 -+#: panels/printers/pp-printer-entry.c:834 - msgid "The optical photo conductor is near end of life" - msgstr "感光体の寿命が近づいています" - - #. Translators: Optical photo conductors are used in laser printers --#: ../panels/printers/pp-printer-entry.c:762 -+#: panels/printers/pp-printer-entry.c:836 - msgid "The optical photo conductor is no longer functioning" - msgstr "感光体の寿命です" - - #. Translators: Printer's state (can start new job without waiting) --#: ../panels/printers/pp-printer-entry.c:870 -+#: panels/printers/pp-printer-entry.c:957 - msgctxt "printer state" - msgid "Ready" - msgstr "準備完了" - - #. Translators: Printer's state (printer is ready but doesn't accept new jobs) --#: ../panels/printers/pp-printer-entry.c:875 -+#: panels/printers/pp-printer-entry.c:962 - msgctxt "printer state" - msgid "Does not accept jobs" - msgstr "ジョブ受付不可" - - #. Translators: Printer's state (jobs are processing) --#: ../panels/printers/pp-printer-entry.c:880 -+#: panels/printers/pp-printer-entry.c:967 - msgctxt "printer state" - msgid "Processing" - msgstr "処理中" - --#. Translators: Name of job which makes printer to clean its heads --#: ../panels/printers/pp-printer-entry.c:904 --msgid "Clean print heads" --msgstr "ヘッドクリーニング" -- --#: ../panels/printers/printer-entry.ui.h:1 -+#: panels/printers/printer-entry.ui:14 - msgid "Printing Options" - msgstr "プリンターのオプション" - --#: ../panels/printers/printer-entry.ui.h:2 -+#: panels/printers/printer-entry.ui:26 - msgid "Printer Details" - msgstr "プリンターの詳細" - - #. Set this printer as default --#: ../panels/printers/printer-entry.ui.h:4 -+#: panels/printers/printer-entry.ui:38 - msgid "Use Printer by Default" - msgstr "デフォルトプリンター" - - #. Translators: This button executes command which cleans print heads of the printer. --#: ../panels/printers/printer-entry.ui.h:6 -+#: panels/printers/printer-entry.ui:50 - msgid "Clean Print Heads" - msgstr "ヘッドクリーニング" - --#: ../panels/printers/printer-entry.ui.h:7 -+#: panels/printers/printer-entry.ui:61 - msgid "Remove Printer" - msgstr "プリンターの削除" - --#: ../panels/printers/printer-entry.ui.h:8 -+#: panels/printers/printer-entry.ui:193 - msgid "Model" - msgstr "型式" - --#: ../panels/printers/printer-entry.ui.h:10 -+#: panels/printers/printer-entry.ui:251 - msgid "Ink Level" - msgstr "インクの量" - - #. Translators: This is the message which follows the printer error. --#: ../panels/printers/printer-entry.ui.h:12 -+#: panels/printers/printer-entry.ui:312 - msgid "Please restart when the problem is resolved." - msgstr "問題が解決した場合、再起動してください。" - - #. Translators: This is the button which restarts the printer. --#: ../panels/printers/printer-entry.ui.h:14 -+#: panels/printers/printer-entry.ui:319 - msgid "Restart" - msgstr "再起動" - - #. Translators: This button adds new printer. --#: ../panels/printers/printers.ui.h:2 -+#: panels/printers/printers.ui:20 - msgid "Add…" - msgstr "追加…" - --#: ../panels/printers/printers.ui.h:5 -+#: panels/printers/printers.ui:186 - msgid "No printers" - msgstr "プリンターが見つかりません" - - #. Translators: This button adds new printer. --#: ../panels/printers/printers.ui.h:7 -+#: panels/printers/printers.ui:200 - msgid "Add a Printer…" - msgstr "プリンターの追加…" - - #. Translators: The CUPS server is not running (we can not connect to it). --#: ../panels/printers/printers.ui.h:9 -+#: panels/printers/printers.ui:232 - msgid "" - "Sorry! The system printing service\n" - "doesn’t seem to be available." --msgstr "" --"申し訳ありません! システムの印刷サービスは\n" -+msgstr "申し訳ありません! システムの印刷サービスは\n" - "現在、利用できないようです。" - --#: ../panels/privacy/cc-privacy-panel.c:387 ../panels/privacy/privacy.ui.h:24 -+#: panels/privacy/cc-privacy-panel.c:387 panels/privacy/privacy.ui:280 - msgid "Screen Lock" - msgstr "画面ロック" - --#: ../panels/privacy/cc-privacy-panel.c:438 -+#: panels/privacy/cc-privacy-panel.c:438 - msgid "In use" - msgstr "使用中" - --#: ../panels/privacy/cc-privacy-panel.c:443 -+#: panels/privacy/cc-privacy-panel.c:443 - msgctxt "Location services status" - msgid "On" - msgstr "オン" - --#: ../panels/privacy/cc-privacy-panel.c:444 -+#: panels/privacy/cc-privacy-panel.c:444 - msgctxt "Location services status" - msgid "Off" - msgstr "オフ" - --#: ../panels/privacy/cc-privacy-panel.c:823 ../panels/privacy/privacy.ui.h:42 -+#: panels/privacy/cc-privacy-panel.c:823 panels/privacy/privacy.ui:745 - msgid "Location Services" - msgstr "位置情報サービス" - --#: ../panels/privacy/cc-privacy-panel.c:942 ../panels/privacy/privacy.ui.h:19 -+#: panels/privacy/cc-privacy-panel.c:946 panels/privacy/privacy.ui:127 - msgid "Usage & History" - msgstr "使用と履歴" - --#: ../panels/privacy/cc-privacy-panel.c:1071 -+#: panels/privacy/cc-privacy-panel.c:1075 - msgid "Empty all items from Trash?" - msgstr "ゴミ箱からすべてのアイテムを削除してもよろしいですか?" - --#: ../panels/privacy/cc-privacy-panel.c:1072 -+#: panels/privacy/cc-privacy-panel.c:1076 - msgid "All items in the Trash will be permanently deleted." - msgstr "ここでアイテムを削除すると元に戻すことはできません。" - --#: ../panels/privacy/cc-privacy-panel.c:1073 -+#: panels/privacy/cc-privacy-panel.c:1077 - msgid "_Empty Trash" - msgstr "ゴミ箱を空にする(_E)" - --#: ../panels/privacy/cc-privacy-panel.c:1096 -+#: panels/privacy/cc-privacy-panel.c:1100 - msgid "Delete all the temporary files?" - msgstr "一時ファイルをすべて削除しますか?" - --#: ../panels/privacy/cc-privacy-panel.c:1097 -+#: panels/privacy/cc-privacy-panel.c:1101 - msgid "All the temporary files will be permanently deleted." - msgstr "一時ファイルは完全に削除されます。" - --#: ../panels/privacy/cc-privacy-panel.c:1098 -+#: panels/privacy/cc-privacy-panel.c:1102 - msgid "_Purge Temporary Files" - msgstr "一時ファイルを削除する(_P)" - --#: ../panels/privacy/cc-privacy-panel.c:1120 ../panels/privacy/privacy.ui.h:29 -+#: panels/privacy/cc-privacy-panel.c:1124 panels/privacy/privacy.ui:432 - msgid "Purge Trash & Temporary Files" - msgstr "ゴミ箱と一時ファイルの削除" - --#: ../panels/privacy/cc-privacy-panel.c:1160 ../panels/privacy/privacy.ui.h:36 -+#: panels/privacy/cc-privacy-panel.c:1164 panels/privacy/privacy.ui:637 - msgid "Software Usage" - msgstr "ソフトウェアの使用状況" - --#: ../panels/privacy/cc-privacy-panel.c:1201 ../panels/privacy/privacy.ui.h:46 -+#: panels/privacy/cc-privacy-panel.c:1205 panels/privacy/privacy.ui:959 - msgid "Problem Reporting" - msgstr "問題報告" - - #. translators: '%s' is the distributor's name, such as 'Fedora' --#: ../panels/privacy/cc-privacy-panel.c:1215 -+#: panels/privacy/cc-privacy-panel.c:1219 - #, c-format - msgid "" - "Sending reports of technical problems helps us improve %s. Reports are sent " - "anonymously and are scrubbed of personal data." --msgstr "" --"技術的な問題に遭遇した場合、問題に関するレポートを送信することで %s の改善に" --"役立てることができます。レポートは匿名で送信され、個人データは取り除かれま" --"す。" -+msgstr "技術的な問題に遭遇した場合、問題に関するレポートを送信することで %s の改善に役立てることができます。レポートは匿名で送信され、個人データは取り除かれます。" - --#: ../panels/privacy/cc-privacy-panel.c:1227 ../panels/privacy/privacy.ui.h:41 -+#: panels/privacy/cc-privacy-panel.c:1231 panels/privacy/privacy.ui:719 - msgid "Privacy Policy" - msgstr "プライバシーポリシー" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/privacy/gnome-privacy-panel.desktop.in.in.h:2 --msgid "Pri­va­cy" -+#: panels/privacy/gnome-privacy-panel.desktop.in.in:3 -+msgid "Privacy" - msgstr "プライバシー" - --#: ../panels/privacy/gnome-privacy-panel.desktop.in.in.h:3 -+#: panels/privacy/gnome-privacy-panel.desktop.in.in:4 - msgid "Protect your personal information and control what others might see" - msgstr "個人情報の保護と外部からの見え方を設定します" - --#. Translators: those are keywords for the privacy control-center panel --#: ../panels/privacy/gnome-privacy-panel.desktop.in.in.h:5 -+#. FIXME -+#. 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: 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;" --msgstr "" --"screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;" --"network;identity;画面;スクリーン;ロック;診断;クラッシュ;プライベート;最近;テ" --"ンポラリー;一時;インデックス;索引;名前;ネットワーク;Privacy;プライバシー;" -+msgstr "screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;network;identity;画面;スクリーン;ロック;診断;クラッシュ;プライベート;最近;テンポラリー;一時;インデックス;索引;名前;ネットワーク;Privacy;プライバシー;" - --#: ../panels/privacy/privacy.ui.h:1 -+#: panels/privacy/privacy.ui:14 - msgid "Screen Turns Off" - msgstr "画面オフのとき" - --#: ../panels/privacy/privacy.ui.h:2 -+#: panels/privacy/privacy.ui:18 - msgid "30 seconds" - msgstr "30 秒" - --#: ../panels/privacy/privacy.ui.h:9 -+#: panels/privacy/privacy.ui:60 panels/privacy/privacy.ui:106 - msgid "1 day" - msgstr "1 日" - --#: ../panels/privacy/privacy.ui.h:10 -+#: panels/privacy/privacy.ui:64 - msgid "2 days" - msgstr "2 日" - --#: ../panels/privacy/privacy.ui.h:11 -+#: panels/privacy/privacy.ui:68 - msgid "3 days" - msgstr "3 日" - --#: ../panels/privacy/privacy.ui.h:12 -+#: panels/privacy/privacy.ui:72 - msgid "4 days" - msgstr "4 日" - --#: ../panels/privacy/privacy.ui.h:13 -+#: panels/privacy/privacy.ui:76 - msgid "5 days" - msgstr "5 日" - --#: ../panels/privacy/privacy.ui.h:14 -+#: panels/privacy/privacy.ui:80 - msgid "6 days" - msgstr "6 日" - --#: ../panels/privacy/privacy.ui.h:15 -+#: panels/privacy/privacy.ui:84 panels/privacy/privacy.ui:110 - msgid "7 days" - msgstr "7 日" - --#: ../panels/privacy/privacy.ui.h:16 -+#: panels/privacy/privacy.ui:88 - msgid "14 days" - msgstr "14 日" - --#: ../panels/privacy/privacy.ui.h:17 -+#: panels/privacy/privacy.ui:92 panels/privacy/privacy.ui:114 - msgid "30 days" - msgstr "30 日" - --#: ../panels/privacy/privacy.ui.h:18 -+#: panels/privacy/privacy.ui:118 - msgid "Forever" - msgstr "無期限" - --#: ../panels/privacy/privacy.ui.h:20 -+#: panels/privacy/privacy.ui:148 - msgid "" - "Remembering your history makes things easier to find again. These items are " - "never shared over the network." --msgstr "" --"履歴を記憶しておくと、以前の作業を探し出すのが簡単になります。これらの項目は" --"ネットワークを越えて共有されることはありません。" -+msgstr "履歴を記憶しておくと、以前の作業を探し出すのが簡単になります。これらの項目はネットワークを越えて共有されることはありません。" - --#: ../panels/privacy/privacy.ui.h:21 -+#: panels/privacy/privacy.ui:176 - msgid "_Recently Used" - msgstr "最近使用したファイル(_R)" - --#: ../panels/privacy/privacy.ui.h:22 -+#: panels/privacy/privacy.ui:207 - msgid "Retain _History" - msgstr "記憶する期間(_H)" - --#: ../panels/privacy/privacy.ui.h:23 -+#: panels/privacy/privacy.ui:247 - msgid "Cl_ear Recent History" - msgstr "履歴をクリアする(_E)" - --#: ../panels/privacy/privacy.ui.h:25 -+#: panels/privacy/privacy.ui:301 - msgid "The Screen Lock protects your privacy when you are away." - msgstr "画面をロックして離席中もプライバシーを保護します。" - --#: ../panels/privacy/privacy.ui.h:26 -+#: panels/privacy/privacy.ui:328 - msgid "Automatic Screen _Lock" - msgstr "自動画面ロック(_L)" - --#: ../panels/privacy/privacy.ui.h:27 -+#: panels/privacy/privacy.ui:362 - msgid "Lock screen _after blank for" - msgstr "画面オフ後にロックするまでの時間(_A)" - --#: ../panels/privacy/privacy.ui.h:28 -+#: panels/privacy/privacy.ui:394 - msgid "Show _Notifications" - msgstr "ロック画面に通知を表示する(_N)" - --#: ../panels/privacy/privacy.ui.h:30 -+#: panels/privacy/privacy.ui:454 - msgid "" - "Automatically purge the Trash and temporary files to help keep your computer " - "free of unnecessary sensitive information." --msgstr "" --"ゴミ箱や一時ファイルを自動的に削除することで、不要になった機密情報が残ったま" --"まにならないようにします。" -+msgstr "ゴミ箱や一時ファイルを自動的に削除することで、不要になった機密情報が残ったままにならないようにします。" - --#: ../panels/privacy/privacy.ui.h:31 -+#: panels/privacy/privacy.ui:483 - msgid "Automatically empty _Trash" - msgstr "ゴミ箱を自動で空にする(_T)" - --#: ../panels/privacy/privacy.ui.h:32 -+#: panels/privacy/privacy.ui:515 - msgid "Automatically purge Temporary _Files" - msgstr "一時ファイルを自動で削除する(_F)" - --#: ../panels/privacy/privacy.ui.h:33 -+#: panels/privacy/privacy.ui:546 - msgid "Purge _After" - msgstr "次の時間経過後に削除する(_A)" - --#: ../panels/privacy/privacy.ui.h:34 -+#: panels/privacy/privacy.ui:590 - msgid "_Empty Trash…" - msgstr "ゴミ箱を空にする(_E)…" - --#: ../panels/privacy/privacy.ui.h:35 -+#: panels/privacy/privacy.ui:606 - msgid "_Purge Temporary Files…" - msgstr "一時ファイルを削除する(_P)v" - --#: ../panels/privacy/privacy.ui.h:37 -+#: panels/privacy/privacy.ui:654 - msgid "" - "Sending us information about which software you use helps us provide you " - "with more accurate recommendations. It also helps us to improve our " -@@ -5035,836 +5224,794 @@ msgid "" - "\n" - "All the information we collect is made anonymous, and we will never share " - "your data with third parties." --msgstr "" --"利用しているソフトウェアについての情報を私たちに送ることで、より適切な提案を" --"私たちができるようになります。また、ソフトウェアの改善にも役立てられます。\n" -+msgstr "利用しているソフトウェアについての情報を私たちに送ることで、より適切な提案を私たちができるようになります。また、ソフトウェアの改善にも役立てられます。\n" - "\n" --"私たちが収集する情報はすべて匿名であり、また収集したデータを第三者と共有する" --"ことはありません。" -+"私たちが収集する情報はすべて匿名であり、また収集したデータを第三者と共有することはありません。" - --#: ../panels/privacy/privacy.ui.h:40 -+#: panels/privacy/privacy.ui:681 - msgid "_Send software usage statistics" - msgstr "ソフトウェアの使用統計情報を送信する(_S)" - --#: ../panels/privacy/privacy.ui.h:43 -+#: panels/privacy/privacy.ui:764 - msgid "" - "Location services allow applications to know your location. Using Wi-Fi and " - "mobile broadband increases accuracy." --msgstr "" --"位置情報サービスを有効にすると、アプリケーションが現在の位置情報を取得できる" --"ようになります。Wi-Fi やモバイルブロードバンドを使用している場合、より正確な" --"位置を取得できます。" -+msgstr "位置情報サービスを有効にすると、アプリケーションが現在の位置情報を取得できるようになります。Wi-Fi やモバイルブロードバンドを使用している場合、より正確な位置を取得できます。" - --#: ../panels/privacy/privacy.ui.h:44 -+#: panels/privacy/privacy.ui:778 -+msgid "" -+"Uses Mozilla Location Service: Privacy Policy" -+msgstr "Mozilla Location Service を使用します。プライバシーポリシー" -+ -+#: panels/privacy/privacy.ui:828 - msgid "_Location Services" - msgstr "位置情報サービス(_L)" - --#: ../panels/privacy/privacy.ui.h:47 -+#: panels/privacy/privacy.ui:1026 - msgid "_Automatic Problem Reporting" - msgstr "問題のレポートを自動で送信する(_A)" - --#: ../panels/region/cc-format-chooser.c:118 -+#: panels/region/cc-format-chooser.c:118 - msgctxt "measurement format" - msgid "Imperial" - msgstr "ヤード・ポンド法" - --#: ../panels/region/cc-format-chooser.c:120 -+#: panels/region/cc-format-chooser.c:120 - msgctxt "measurement format" - msgid "Metric" - msgstr "メートル法" - --#: ../panels/region/cc-format-chooser.c:285 -+#: panels/region/cc-format-chooser.c:285 - msgid "No regions found" - msgstr "地域が見つかりません" - --#: ../panels/region/cc-input-chooser.c:182 -+#: panels/region/cc-input-chooser.c:182 - msgid "No input sources found" - msgstr "入力ソースが見つかりません" - --#: ../panels/region/cc-input-chooser.c:1012 -+#: panels/region/cc-input-chooser.c:1012 - msgctxt "Input Source" - msgid "Other" - msgstr "その他" - --#: ../panels/region/cc-region-panel.c:881 -+#: panels/region/cc-region-panel.c:881 - msgid "No input source selected" - msgstr "入力ソースが選択されていません" - --#: ../panels/region/cc-region-panel.c:1773 -+#: panels/region/cc-region-panel.c:1773 - msgid "Login _Screen" - msgstr "ログイン画面(_S)" - --#: ../panels/region/format-chooser.ui.h:1 -+#: panels/region/format-chooser.ui:7 - msgid "Formats" - msgstr "フォーマット" - --#: ../panels/region/format-chooser.ui.h:4 -+#: panels/region/format-chooser.ui:120 - msgid "Preview" - msgstr "プレビュー" - --#: ../panels/region/format-chooser.ui.h:5 -+#: panels/region/format-chooser.ui:137 - msgid "Dates" - msgstr "日付" - --#: ../panels/region/format-chooser.ui.h:6 -+#: panels/region/format-chooser.ui:168 - msgid "Times" - msgstr "時刻" - --#: ../panels/region/format-chooser.ui.h:7 -+#: panels/region/format-chooser.ui:199 - msgid "Dates & Times" - msgstr "日付と時刻" - --#: ../panels/region/format-chooser.ui.h:8 -+#: panels/region/format-chooser.ui:230 - msgid "Numbers" - msgstr "数字" - --#: ../panels/region/format-chooser.ui.h:9 -+#: panels/region/format-chooser.ui:247 - msgid "Measurement" - msgstr "計量単位" - --#: ../panels/region/format-chooser.ui.h:10 -+#: panels/region/format-chooser.ui:264 - msgid "Paper" - msgstr "用紙サイズ" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/region/gnome-region-panel.desktop.in.in.h:2 --msgid "Re­gion & Lan­guage" -+#: panels/region/gnome-region-panel.desktop.in.in:3 -+msgid "Region & Language" - msgstr "地域と言語" - --#: ../panels/region/gnome-region-panel.desktop.in.in.h:3 -+#: panels/region/gnome-region-panel.desktop.in.in:4 - msgid "" - "Select your display language, formats, keyboard layouts and input sources" - msgstr "表示言語、フォーマット、キーボードレイアウト、入力ソースを設定します" - --#. Translators: those are keywords for the region control-center panel --#: ../panels/region/gnome-region-panel.desktop.in.in.h:5 -+#. 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: 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 "" --"Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;" --"Region;地域;" -+msgstr "Language;Layout;Keyboard;Input;言語;レイアウト;キーボード;入力;インプット;Region;地域;" - --#: ../panels/region/input-chooser.ui.h:1 -+#: panels/region/input-chooser.ui:5 - msgid "Add an Input Source" - msgstr "入力ソースの追加" - --#: ../panels/region/input-chooser.ui.h:4 -+#: panels/region/input-chooser.ui:76 - msgid "Input methods can’t be used on the login screen" - msgstr "インプットメソッドはログイン画面で使用できません" - --#: ../panels/region/input-options.ui.h:1 -+#: panels/region/input-options.ui:7 - msgid "Input Source Options" - msgstr "入力ソースのオプション" - --#: ../panels/region/input-options.ui.h:2 -+#: panels/region/input-options.ui:27 - msgid "Use the _same source for all windows" - msgstr "すべてのウィンドウで同じソースを使う(_S)" - --#: ../panels/region/input-options.ui.h:3 -+#: panels/region/input-options.ui:45 - msgid "Allow _different sources for each window" - msgstr "ウィンドウ毎に別のソースを使用可能にする(_D)" - --#: ../panels/region/input-options.ui.h:5 -+#: panels/region/input-options.ui:85 - msgid "Switch to previous source" - msgstr "前のソースへ切り替える" - --#: ../panels/region/input-options.ui.h:6 -+#: panels/region/input-options.ui:102 - msgid "Super+Shift+Space" - msgstr "Super+Shift+Space" - --#: ../panels/region/input-options.ui.h:7 -+#: panels/region/input-options.ui:116 - msgid "Switch to next source" - msgstr "次のソースへ切り替える" - --#: ../panels/region/input-options.ui.h:8 -+#: panels/region/input-options.ui:133 - msgid "Super+Space" - msgstr "Super+Space" - --#: ../panels/region/input-options.ui.h:9 -+#: panels/region/input-options.ui:147 - msgid "You can change these shortcuts in the keyboard settings" - msgstr "キーボード設定でショートカットを変更できます" - --#: ../panels/region/input-options.ui.h:10 -+#: panels/region/input-options.ui:164 - msgid "Alternative switch to next source" - msgstr "次のソースへ切り替える (代替)" - --#: ../panels/region/input-options.ui.h:11 -+#: panels/region/input-options.ui:181 - msgid "Left+Right Alt" - msgstr "左Alt+右Alt" - --#: ../panels/region/region.ui.h:1 --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:11 -+#: panels/region/region.ui:67 -+#: panels/user-accounts/data/user-accounts-dialog.ui:348 - msgid "_Language" - msgstr "言語(_L)" - --#: ../panels/region/region.ui.h:2 -+#: panels/region/region.ui:85 - msgid "English (United Kingdom)" - msgstr "英語 (UK)" - --#: ../panels/region/region.ui.h:3 -+#: panels/region/region.ui:112 - msgid "Restart the session for changes to take effect" - msgstr "変更内容を反映させるにはログインしなおす必要があります" - --#: ../panels/region/region.ui.h:4 -+#: panels/region/region.ui:134 - msgid "Restart…" - msgstr "再起動…" - --#: ../panels/region/region.ui.h:5 -+#: panels/region/region.ui:169 - msgid "_Formats" - msgstr "フォーマット(_F)" - --#: ../panels/region/region.ui.h:6 -+#: panels/region/region.ui:187 - msgid "United Kingdom" - msgstr "UK" - --#: ../panels/region/region.ui.h:7 -+#: panels/region/region.ui:229 - msgid "Input Sources" - msgstr "入力ソース" - --#: ../panels/region/region.ui.h:8 -+#: panels/region/region.ui:245 - msgid "_Options" - msgstr "オプション(_O)" - --#: ../panels/region/region.ui.h:9 -+#: panels/region/region.ui:311 - msgid "Add input source" - msgstr "入力ソースを追加する" - --#: ../panels/region/region.ui.h:10 -+#: panels/region/region.ui:336 - msgid "Remove input source" - msgstr "入力ソースを削除する" - --#: ../panels/region/region.ui.h:11 -+#: panels/region/region.ui:386 - msgid "Move input source up" - msgstr "入力ソースを上に移動する" - --#: ../panels/region/region.ui.h:12 -+#: panels/region/region.ui:411 - msgid "Move input source down" - msgstr "入力ソースを下に移動する" - --#: ../panels/region/region.ui.h:13 -+#: panels/region/region.ui:461 - msgid "Configure input source" - msgstr "入力ソースの設定を行う" - --#: ../panels/region/region.ui.h:14 -+#: panels/region/region.ui:486 - msgid "Show input source keyboard layout" - msgstr "入力ソースのキーボードレイアウトを表示する" - --#: ../panels/region/region.ui.h:15 -+#: panels/region/region.ui:530 - msgid "Login settings are used by all users when logging into the system" - msgstr "ログイン画面の設定はすべてのユーザーがログイン時に使用します" - --#: ../panels/search/cc-search-locations-dialog.c:639 -+#: panels/search/cc-search-locations-dialog.c:639 - msgid "Select Location" - msgstr "場所の選択" - --#: ../panels/search/cc-search-locations-dialog.c:643 -+#: panels/search/cc-search-locations-dialog.c:643 - msgid "_OK" - msgstr "OK(_O)" - --#: ../panels/search/cc-search-panel.c:178 -+#: panels/search/cc-search-panel.c:178 - msgid "No applications found" - msgstr "アプリケーションが見つかりません" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/search/gnome-search-panel.desktop.in.in.h:2 --msgid "Search" --msgstr "検索" -- --#: ../panels/search/gnome-search-panel.desktop.in.in.h:3 -+#: panels/search/gnome-search-panel.desktop.in.in:4 - msgid "" - "Control which applications show search results in the Activities Overview" - msgstr "アクティビティ画面で検索結果を表示するアプリケーションを設定します" - --#. Translators: those are keywords for the search control-center panel --#: ../panels/search/gnome-search-panel.desktop.in.in.h:5 -+#. 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: 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 "" --"Search;Find;Index;Hide;Privacy;Results;サーチ;検索;インデックス;索引;非表示;" --"プライバシー;結果;" -+msgstr "Search;Find;Index;Hide;Privacy;Results;サーチ;検索;インデックス;索引;非表示;プライバシー;結果;" - --#: ../panels/search/search-locations-dialog.ui.h:1 -+#: panels/search/search-locations-dialog.ui:9 - msgid "Search Locations" - msgstr "検索する場所" - --#: ../panels/search/search-locations-dialog.ui.h:2 -+#: panels/search/search-locations-dialog.ui:43 - msgid "Places" - msgstr "場所" - --#: ../panels/search/search-locations-dialog.ui.h:3 -+#: panels/search/search-locations-dialog.ui:73 - msgid "Bookmarks" - msgstr "ブックマーク" - --#: ../panels/search/search-locations-dialog.ui.h:4 -+#: panels/search/search-locations-dialog.ui:130 - msgid "Other" - msgstr "その他" - --#: ../panels/search/search.ui.h:1 -+#: panels/search/search.ui:66 - msgid "Move Up" - msgstr "上へ" - --#: ../panels/search/search.ui.h:2 -+#: panels/search/search.ui:83 - msgid "Move Down" - msgstr "下へ" - --#: ../panels/search/search.ui.h:3 -+#: panels/search/search.ui:119 - msgid "Preferences" - msgstr "設定" - - #. Label --#: ../panels/sharing/cc-sharing-networks.c:303 -+#: panels/sharing/cc-sharing-networks.c:305 - msgid "No networks selected for sharing" - msgstr "共有するネットワークが選択されていません" - --#: ../panels/sharing/cc-sharing-panel.c:273 -+#: panels/sharing/cc-sharing-panel.c:283 - msgctxt "service is enabled" - msgid "On" - msgstr "オン" - --#: ../panels/sharing/cc-sharing-panel.c:275 --#: ../panels/sharing/cc-sharing-panel.c:302 -+#: panels/sharing/cc-sharing-panel.c:285 panels/sharing/cc-sharing-panel.c:312 - msgctxt "service is disabled" - msgid "Off" - msgstr "オフ" - --#: ../panels/sharing/cc-sharing-panel.c:305 -+#: panels/sharing/cc-sharing-panel.c:315 - msgctxt "service is enabled" - msgid "Enabled" - msgstr "有効" - --#: ../panels/sharing/cc-sharing-panel.c:308 -+#: panels/sharing/cc-sharing-panel.c:318 - msgctxt "service is active" - msgid "Active" - msgstr "アクティブ" - --#: ../panels/sharing/cc-sharing-panel.c:379 -+#: panels/sharing/cc-sharing-panel.c:389 - msgid "Choose a Folder" - msgstr "フォルダーの選択" - --#: ../panels/sharing/cc-sharing-panel.c:690 -+#: panels/sharing/cc-sharing-panel.c:701 - #, c-format - msgid "" --"Personal File Sharing allows you to share your Public folder with others on " --"your current network using: dav://%s" --msgstr "" --"パーソナルファイル共有を利用して、現在のネットワークの他ユーザーが次の URI に" --"接続し、あなたの公開フォルダーを共有できるようにします: dav://%s" -+"File Sharing allows you to share your Public folder with others on your " -+"current network using: dav://%s" -+msgstr "File Sharing では、dav://%s を使用して現在のネットワーク上の他のユーザーと Public フォルダーを共有できます。" - --#: ../panels/sharing/cc-sharing-panel.c:692 -+#: panels/sharing/cc-sharing-panel.c:703 - #, c-format - msgid "" - "When remote login is enabled, remote users can connect using the Secure " - "Shell command:\n" - "ssh %s" --msgstr "" --"リモートログインを有効化した場合、リモートユーザーによる Secure Shell コマン" --"ドを使用した接続を許可します:\n" -+msgstr "リモートログインを有効化した場合、リモートユーザーによる Secure Shell コマンドを使用した接続を許可します:\n" - "ssh %s" - --#: ../panels/sharing/cc-sharing-panel.c:694 -+#: panels/sharing/cc-sharing-panel.c:705 - #, c-format - msgid "" - "Screen sharing allows remote users to view or control your screen by " - "connecting to vnc://%s" --msgstr "" --"スクリーン共有を許可した場合、リモートユーザーが次の URI に接続して画面の表示" --"または操作を行うことを許可します: vnc://%s" -+msgstr "スクリーン共有を許可した場合、リモートユーザーが次の URI に接続して画面の表示または操作を行うことを許可します: vnc://%s" - --#: ../panels/sharing/cc-sharing-panel.c:806 -+#: panels/sharing/cc-sharing-panel.c:817 - msgid "Copy" - msgstr "コピー" - --#: ../panels/sharing/cc-sharing-panel.c:1233 -+#: panels/sharing/cc-sharing-panel.c:1294 -+#: panels/sharing/gnome-sharing-panel.desktop.in.in:3 - msgid "Sharing" - msgstr "共有" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/sharing/gnome-sharing-panel.desktop.in.in.h:2 --msgid "Sha­ring" --msgstr "共有" -- --#: ../panels/sharing/gnome-sharing-panel.desktop.in.in.h:3 -+#: panels/sharing/gnome-sharing-panel.desktop.in.in:4 - msgid "Control what you want to share with others" - msgstr "他のユーザーと共有するものを設定します" - --#. Translators: those are keywords for the sharing control-center panel --#: ../panels/sharing/gnome-sharing-panel.desktop.in.in.h:5 -+#. 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: 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;" --msgstr "" --"share;sharing;ssh;host;name;remote;desktop;bluetooth;obex;media;audio;video;" --"pictures;photos;movies;server;renderer;共有;シェアリング;セキュアシェル;ホス" --"ト;名前;リモート;遠隔;デスクトップ;ブルートゥース;メディア;コンテンツ;オー" --"ディオ;音声;音楽;楽曲;ミュージック;ビデオ;動画;映像;画像;静止画;写真;フォト;" --"ムービー;映画;サーバー;レンダラー;" -+msgstr "share;sharing;ssh;host;name;remote;desktop;bluetooth;obex;media;audio;video;pictures;photos;movies;server;renderer;共有;シェアリング;セキュアシェル;ホスト;名前;リモート;遠隔;デスクトップ;ブルートゥース;メディア;コンテンツ;オーディオ;音声;音楽;楽曲;ミュージック;ビデオ;動画;映像;画像;静止画;写真;フォト;ムービー;映画;サーバー;レンダラー;" - --#: ../panels/sharing/networks.ui.h:1 -+#: panels/sharing/networks.ui:19 - msgid "Networks" - msgstr "ネットワーク" - --#: ../panels/sharing/org.gnome.controlcenter.remote-login-helper.policy.in.in.h:1 -+#: panels/sharing/org.gnome.controlcenter.remote-login-helper.policy.in.in:11 - msgid "Enable or disable remote login" - msgstr "リモートログインの有効化/無効化" - --#: ../panels/sharing/org.gnome.controlcenter.remote-login-helper.policy.in.in.h:2 -+#: panels/sharing/org.gnome.controlcenter.remote-login-helper.policy.in.in:12 - msgid "Authentication is required to enable or disable remote login" - msgstr "リモートログインを有効化または無効化するには認証が必要になります" - --#: ../panels/sharing/sharing.ui.h:1 -+#: panels/sharing/sharing.ui:46 - msgid "_Computer Name" - msgstr "コンピューター名(_C)" - --#: ../panels/sharing/sharing.ui.h:2 -+#: panels/sharing/sharing.ui:104 - msgid "_File Sharing" - msgstr "ファイル共有(_F)" - --#: ../panels/sharing/sharing.ui.h:3 -+#: panels/sharing/sharing.ui:147 - msgid "_Screen Sharing" - msgstr "画面共有(_S)" - --#: ../panels/sharing/sharing.ui.h:4 -+#: panels/sharing/sharing.ui:190 - msgid "_Media Sharing" - msgstr "メディア共有(_M)" - --#: ../panels/sharing/sharing.ui.h:5 -+#: panels/sharing/sharing.ui:233 - msgid "_Remote Login" - msgstr "リモートログイン(_R)" - --#: ../panels/sharing/sharing.ui.h:6 -+#: panels/sharing/sharing.ui:272 - msgid "Some services are disabled because of no network access." - msgstr "ネットワークに接続していないため無効となっているサービスがあります。" - --#: ../panels/sharing/sharing.ui.h:7 -+#: panels/sharing/sharing.ui:286 panels/sharing/sharing.ui:413 - msgid "File Sharing" - msgstr "ファイル共有" - --#: ../panels/sharing/sharing.ui.h:8 -+#: panels/sharing/sharing.ui:333 - msgid "_Require Password" - msgstr "パスワードを要求する(_R)" - --#: ../panels/sharing/sharing.ui.h:10 -+#: panels/sharing/sharing.ui:424 panels/sharing/sharing.ui:496 - msgid "Remote Login" - msgstr "リモートログイン" - --#: ../panels/sharing/sharing.ui.h:11 -+#: panels/sharing/sharing.ui:519 panels/sharing/sharing.ui:765 - msgid "Screen Sharing" - msgstr "画面共有" - --#: ../panels/sharing/sharing.ui.h:12 -+#: panels/sharing/sharing.ui:577 - msgid "_Allow connections to control the screen" - msgstr "このスクリーンの操作する接続を許可する(_A)" - --#: ../panels/sharing/sharing.ui.h:13 -+#: panels/sharing/sharing.ui:622 - msgid "_Password:" - msgstr "パスワード(_P):" - --#: ../panels/sharing/sharing.ui.h:14 -+#: panels/sharing/sharing.ui:652 - msgid "_Show Password" - msgstr "パスワードを表示(_S)" - --#: ../panels/sharing/sharing.ui.h:15 -+#: panels/sharing/sharing.ui:683 - msgid "Access Options" - msgstr "アクセスオプション" - --#: ../panels/sharing/sharing.ui.h:16 -+#: panels/sharing/sharing.ui:697 - msgid "_New connections must ask for access" - msgstr "新規接続の場合アクセス要求を必要とする(_N)" - --#: ../panels/sharing/sharing.ui.h:17 -+#: panels/sharing/sharing.ui:715 - msgid "_Require a password" - msgstr "パスワードを要求する(_R)" - --#: ../panels/sharing/sharing.ui.h:18 -+#: panels/sharing/sharing.ui:776 panels/sharing/sharing.ui:870 - msgid "Media Sharing" - msgstr "メディア共有" - --#: ../panels/sharing/sharing.ui.h:19 -+#: panels/sharing/sharing.ui:809 - msgid "Share music, photos and videos over the network." - msgstr "音楽や写真、ビデオをネットワーク上で共有できます。" - --#: ../panels/sharing/sharing.ui.h:20 -+#: panels/sharing/sharing.ui:824 - msgid "Folders" - msgstr "フォルダー" - --#: ../panels/sound/data/gnome-sound-panel.desktop.in.in.h:1 -+#: panels/sound/data/gnome-sound-panel.desktop.in.in:3 - msgid "Sound" - msgstr "サウンド" - --#: ../panels/sound/data/gnome-sound-panel.desktop.in.in.h:2 -+#: panels/sound/data/gnome-sound-panel.desktop.in.in:4 - msgid "Change sound levels, inputs, outputs, and alert sounds" - msgstr "サウンドレベルや入力、出力、アラート音を設定します" - --#. Translators: those are keywords for the sound control-center panel --#: ../panels/sound/data/gnome-sound-panel.desktop.in.in.h:4 -+#. 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: 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 "" --"Card;Microphone;Volume;Fade;Balance;Bluetooth;Headset;Audio;カード;マイク;音" --"量;フェード;バランス;ブルートゥース;ヘッドセット;オーディオ;Sound;サウンド;" -+msgstr "Card;Microphone;Volume;Fade;Balance;Bluetooth;Headset;Audio;カード;マイク;音量;フェード;バランス;ブルートゥース;ヘッドセット;オーディオ;Sound;サウンド;" - - #. Translators: This is the name of an audio file that sounds like the bark of a dog. - #. You might want to translate it into the equivalent words of your language. --#: ../panels/sound/data/sounds/gnome-sounds-default.xml.in.in.h:3 -+#: panels/sound/data/sounds/gnome-sounds-default.xml.in.in:6 - msgid "Bark" - msgstr "犬が吠える音" - - #. Translators: This is the name of an audio file that sounds like a water drip. - #. You might want to translate it into the equivalent words of your language. --#: ../panels/sound/data/sounds/gnome-sounds-default.xml.in.in.h:6 -+#: panels/sound/data/sounds/gnome-sounds-default.xml.in.in:12 - msgid "Drip" - msgstr "水が滴る音" - - #. Translators: This is the name of an audio file that sounds like tapping glass. - #. You might want to translate it into the equivalent words of your language. --#: ../panels/sound/data/sounds/gnome-sounds-default.xml.in.in.h:9 -+#: panels/sound/data/sounds/gnome-sounds-default.xml.in.in:18 - msgid "Glass" - msgstr "ガラスを叩く音" - - #. Translators: This is the name of an audio file that sounds sort of like a submarine sonar ping. - #. You might want to translate it into the equivalent words of your language. --#: ../panels/sound/data/sounds/gnome-sounds-default.xml.in.in.h:12 -+#: panels/sound/data/sounds/gnome-sounds-default.xml.in.in:24 - msgid "Sonar" - msgstr "ソナーのピング音" - --#: ../panels/sound/gvc-balance-bar.c:105 -+#: panels/sound/gvc-balance-bar.c:104 - msgctxt "balance" - msgid "Left" - msgstr "左" - --#: ../panels/sound/gvc-balance-bar.c:106 -+#: panels/sound/gvc-balance-bar.c:105 - msgctxt "balance" - msgid "Right" - msgstr "右" - --#: ../panels/sound/gvc-balance-bar.c:109 -+#: panels/sound/gvc-balance-bar.c:108 - msgctxt "balance" - msgid "Rear" - msgstr "リア" - --#: ../panels/sound/gvc-balance-bar.c:110 -+#: panels/sound/gvc-balance-bar.c:109 - msgctxt "balance" - msgid "Front" - msgstr "フロント" - --#: ../panels/sound/gvc-balance-bar.c:113 -+#: panels/sound/gvc-balance-bar.c:112 - msgctxt "balance" - msgid "Minimum" - msgstr "最小" - --#: ../panels/sound/gvc-balance-bar.c:114 -+#: panels/sound/gvc-balance-bar.c:113 - msgctxt "balance" - msgid "Maximum" - msgstr "最大" - --#: ../panels/sound/gvc-balance-bar.c:289 -+#: panels/sound/gvc-balance-bar.c:288 - msgid "_Balance:" - msgstr "バランス(_B):" - --#: ../panels/sound/gvc-balance-bar.c:292 -+#: panels/sound/gvc-balance-bar.c:291 - msgid "_Fade:" - msgstr "フェード(_F):" - --#: ../panels/sound/gvc-balance-bar.c:295 -+#: panels/sound/gvc-balance-bar.c:294 - msgid "_Subwoofer:" - msgstr "サブウーファー(_S):" - --#: ../panels/sound/gvc-channel-bar.c:611 ../panels/sound/gvc-channel-bar.c:620 -+#: panels/sound/gvc-channel-bar.c:610 panels/sound/gvc-channel-bar.c:619 - msgctxt "volume" - msgid "100%" - msgstr "100%" - --#: ../panels/sound/gvc-channel-bar.c:615 -+#: panels/sound/gvc-channel-bar.c:614 - msgctxt "volume" - msgid "Unamplified" - msgstr "非増幅" - --#: ../panels/sound/gvc-combo-box.c:166 ../panels/sound/gvc-mixer-dialog.c:249 --#: ../panels/sound/gvc-mixer-dialog.c:515 -+#: panels/sound/gvc-combo-box.c:166 panels/sound/gvc-mixer-dialog.c:253 -+#: panels/sound/gvc-mixer-dialog.c:520 - msgid "_Profile:" - msgstr "プロファイル(_P):" - --#. translators: --#. * The number of sound outputs on a particular device --#: ../panels/sound/gvc/gvc-mixer-control.c:1873 --#, c-format --msgid "%u Output" --msgid_plural "%u Outputs" --msgstr[0] "%u 出力" -- --#. translators: --#. * The number of sound inputs on a particular device --#: ../panels/sound/gvc/gvc-mixer-control.c:1883 --#, c-format --msgid "%u Input" --msgid_plural "%u Inputs" --msgstr[0] "%u 入力" -- --#: ../panels/sound/gvc/gvc-mixer-control.c:2738 --msgid "System Sounds" --msgstr "システムのサウンド" -- --#: ../panels/sound/gvc-mixer-dialog.c:251 -+#: panels/sound/gvc-mixer-dialog.c:255 - msgid "_Test Speakers" - msgstr "スピーカーのテスト(_T)" - --#: ../panels/sound/gvc-mixer-dialog.c:420 -+#: panels/sound/gvc-mixer-dialog.c:424 - msgid "Peak detect" - msgstr "ピークの検出" - --#: ../panels/sound/gvc-mixer-dialog.c:1512 -+#: panels/sound/gvc-mixer-dialog.c:1499 - msgid "Device" - msgstr "デバイス" - --#: ../panels/sound/gvc-mixer-dialog.c:1575 -+#: panels/sound/gvc-mixer-dialog.c:1562 - #, c-format - msgid "Speaker Testing for %s" - msgstr "%s のスピーカーテスト" - --#: ../panels/sound/gvc-mixer-dialog.c:1631 -+#: panels/sound/gvc-mixer-dialog.c:1617 - msgid "_Output volume:" - msgstr "出力の音量(_O):" - --#: ../panels/sound/gvc-mixer-dialog.c:1645 -+#: panels/sound/gvc-mixer-dialog.c:1631 - msgid "Output" - msgstr "出力" - --#: ../panels/sound/gvc-mixer-dialog.c:1650 -+#: panels/sound/gvc-mixer-dialog.c:1636 - msgid "C_hoose a device for sound output:" - msgstr "サウンド出力デバイスの選択(_H):" - --#: ../panels/sound/gvc-mixer-dialog.c:1672 -+#: panels/sound/gvc-mixer-dialog.c:1658 - msgid "Settings for the selected device:" - msgstr "選択したデバイスの設定:" - --#: ../panels/sound/gvc-mixer-dialog.c:1683 -+#: panels/sound/gvc-mixer-dialog.c:1669 - msgid "Input" - msgstr "入力" - --#: ../panels/sound/gvc-mixer-dialog.c:1690 -+#: panels/sound/gvc-mixer-dialog.c:1676 - msgid "_Input volume:" - msgstr "入力の音量(_I):" - --#: ../panels/sound/gvc-mixer-dialog.c:1711 -+#: panels/sound/gvc-mixer-dialog.c:1697 - msgid "Input level:" - msgstr "入力レベル:" - --#: ../panels/sound/gvc-mixer-dialog.c:1737 -+#: panels/sound/gvc-mixer-dialog.c:1723 - msgid "C_hoose a device for sound input:" - msgstr "サウンド入力デバイスの選択(_H):" - --#: ../panels/sound/gvc-mixer-dialog.c:1761 -+#: panels/sound/gvc-mixer-dialog.c:1747 - msgid "Sound Effects" - msgstr "音響効果" - --#: ../panels/sound/gvc-mixer-dialog.c:1768 -+#: panels/sound/gvc-mixer-dialog.c:1754 - msgid "_Alert volume:" - msgstr "警告音の音量(_A):" - --#: ../panels/sound/gvc-mixer-dialog.c:1785 -+#: panels/sound/gvc-mixer-dialog.c:1775 - msgid "No application is currently playing or recording audio." - msgstr "音声の再生または録音を実行しているアプリケーションはありません。" - --#: ../panels/sound/gvc-sound-theme-chooser.c:188 -+#: panels/sound/gvc-sound-theme-chooser.c:187 - msgid "Built-in" - msgstr "組み込み" - --#: ../panels/sound/gvc-sound-theme-chooser.c:454 --#: ../panels/sound/gvc-sound-theme-chooser.c:466 --#: ../panels/sound/gvc-sound-theme-chooser.c:478 -+#: panels/sound/gvc-sound-theme-chooser.c:446 -+#: panels/sound/gvc-sound-theme-chooser.c:458 -+#: panels/sound/gvc-sound-theme-chooser.c:470 - msgid "Sound Preferences" - msgstr "サウンドの設定" - --#: ../panels/sound/gvc-sound-theme-chooser.c:457 --#: ../panels/sound/gvc-sound-theme-chooser.c:468 --#: ../panels/sound/gvc-sound-theme-chooser.c:480 -+#: panels/sound/gvc-sound-theme-chooser.c:449 -+#: panels/sound/gvc-sound-theme-chooser.c:460 -+#: panels/sound/gvc-sound-theme-chooser.c:472 - msgid "Testing event sound" - msgstr "イベント音のテスト中" - --#: ../panels/sound/gvc-sound-theme-chooser.c:554 --#: ../panels/wacom/wacom-stylus-page.ui.h:1 -+#: panels/sound/gvc-sound-theme-chooser.c:544 -+#: panels/wacom/wacom-stylus-page.ui:25 - msgid "Default" - msgstr "デフォルト" - --#: ../panels/sound/gvc-sound-theme-chooser.c:555 -+#: panels/sound/gvc-sound-theme-chooser.c:545 - msgid "From theme" - msgstr "テーマから" - --#: ../panels/sound/gvc-sound-theme-chooser.c:740 -+#: panels/sound/gvc-sound-theme-chooser.c:720 - msgid "C_hoose an alert sound:" - msgstr "警告音の選択(_H):" - --#: ../panels/sound/gvc-speaker-test.c:231 -+#: panels/sound/gvc-speaker-test.c:229 - msgid "Stop" - msgstr "停止" - --#: ../panels/sound/gvc-speaker-test.c:231 --#: ../panels/sound/gvc-speaker-test.c:343 -+#: panels/sound/gvc-speaker-test.c:229 panels/sound/gvc-speaker-test.c:341 - msgid "Test" - msgstr "テスト" - --#: ../panels/sound/gvc-speaker-test.c:239 -+#: panels/sound/gvc-speaker-test.c:237 - msgid "Subwoofer" - msgstr "サブウーファー" - --#: ../panels/sound/sound-theme-file-utils.c:304 -+#: panels/sound/sound-theme-file-utils.c:288 - msgid "Custom" - msgstr "その他" - - #. translators: the labels will read: - #. * Cursor Size: Default --#: ../panels/universal-access/cc-ua-panel.c:351 -+#: panels/universal-access/cc-ua-panel.c:353 - msgctxt "cursor size" - msgid "Default" - msgstr "デフォルト" - --#: ../panels/universal-access/cc-ua-panel.c:354 -+#: panels/universal-access/cc-ua-panel.c:356 - msgctxt "cursor size" - msgid "Medium" - msgstr "中" - --#: ../panels/universal-access/cc-ua-panel.c:357 -+#: panels/universal-access/cc-ua-panel.c:359 - msgctxt "cursor size" - msgid "Large" - msgstr "大" - --#: ../panels/universal-access/cc-ua-panel.c:360 -+#: panels/universal-access/cc-ua-panel.c:362 - msgctxt "cursor size" - msgid "Larger" - msgstr "特大" - --#: ../panels/universal-access/cc-ua-panel.c:363 -+#: panels/universal-access/cc-ua-panel.c:365 - msgctxt "cursor size" - msgid "Largest" - msgstr "最大" - --#: ../panels/universal-access/cc-ua-panel.c:367 -+#: panels/universal-access/cc-ua-panel.c:369 - #, c-format - msgid "%d pixel" - msgid_plural "%d pixels" - msgstr[0] "%d ピクセル" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/universal-access/gnome-universal-access-panel.desktop.in.in.h:2 --msgid "Uni­ver­sal Access" --msgstr "ユニバーサルアクセス" -- --#: ../panels/universal-access/gnome-universal-access-panel.desktop.in.in.h:3 -+#: panels/universal-access/gnome-universal-access-panel.desktop.in.in:4 - msgid "Make it easier to see, hear, type, point and click" --msgstr "" --"見る、聞く、タイピング、クリック操作など、コンピューターを簡単に使えるように" --"します" -+msgstr "見る、聞く、タイピング、クリック操作など、コンピューターを簡単に使えるようにします" - --#. Translators: those are keywords for the universal access control-center panel --#: ../panels/universal-access/gnome-universal-access-panel.desktop.in.in.h:5 -+#. 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: 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;" --msgstr "" --"Keyboard;Mouse;a11y;Accessibility;Contrast;Zoom;Screen;Reader;text;font;size;" --"AccessX;Sticky;Keys;Slow;Bounce;Mouse;Double;click;Delay;Assist;Repeat;Blink;" --"キーボード;マウス;アクセシビリティ;コントラスト;ズーム;拡大鏡;スクリーンリー" --"ダー;テキスト;文字;フォント;サイズ;大きさ;固定;キー;スロー;バウンス;マウス;ダ" --"ブルクリック;ディレイ;ユーザー支援;リピート;点滅;Universal;ユニバーサルアクセ" --"ス;" -+msgstr "Keyboard;Mouse;a11y;Accessibility;Contrast;Zoom;Screen;Reader;text;font;size;AccessX;Sticky;Keys;Slow;Bounce;Mouse;Double;click;Delay;Assist;Repeat;Blink;キーボード;マウス;アクセシビリティ;コントラスト;ズーム;拡大鏡;スクリーンリーダー;テキスト;文字;フォント;サイズ;大きさ;固定;キー;スロー;バウンス;マウス;ダブルクリック;ディレイ;ユーザー支援;リピート;点滅;Universal;ユニバーサルアクセス;" - --#: ../panels/universal-access/uap.ui.h:1 -+#: panels/universal-access/uap.ui:89 - msgid "_Always Show Universal Access Menu" - msgstr "ユニバーサルアクセスメニューを常に表示する(_A)" - --#: ../panels/universal-access/uap.ui.h:2 -+#: panels/universal-access/uap.ui:131 - msgid "Seeing" - msgstr "見る" - --#: ../panels/universal-access/uap.ui.h:3 -+#: panels/universal-access/uap.ui:177 - msgid "_High Contrast" - msgstr "ハイコントラスト(_H)" - --#: ../panels/universal-access/uap.ui.h:4 -+#: panels/universal-access/uap.ui:224 - msgid "_Large Text" - msgstr "大きな文字(_L)" - --#: ../panels/universal-access/uap.ui.h:5 -+#: panels/universal-access/uap.ui:269 - msgid "C_ursor Size" - msgstr "カーソルの大きさ(_U)" - --#: ../panels/universal-access/uap.ui.h:6 --#: ../panels/universal-access/zoom-options.ui.h:7 -+#: panels/universal-access/uap.ui:316 -+#: panels/universal-access/zoom-options.ui:98 - msgid "_Zoom" - msgstr "ズーム(_Z)" - --#: ../panels/universal-access/uap.ui.h:8 -+#: panels/universal-access/uap.ui:362 - msgid "Screen _Reader" - msgstr "スクリーンリーダー(_R)" - --#: ../panels/universal-access/uap.ui.h:9 -+#: panels/universal-access/uap.ui:408 panels/universal-access/uap.ui:1237 - msgid "_Sound Keys" - msgstr "切り替えキー(_S)" - --#: ../panels/universal-access/uap.ui.h:10 -+#: panels/universal-access/uap.ui:470 - msgid "Hearing" - msgstr "聞く" - --#: ../panels/universal-access/uap.ui.h:11 -+#: panels/universal-access/uap.ui:514 panels/universal-access/uap.ui:1340 - msgid "_Visual Alerts" - msgstr "視覚警告(_V)" - --#: ../panels/universal-access/uap.ui.h:13 -+#: panels/universal-access/uap.ui:622 - msgid "Screen _Keyboard" - msgstr "スクリーンキーボード(_K)" - --#: ../panels/universal-access/uap.ui.h:14 -+#: panels/universal-access/uap.ui:667 - msgid "R_epeat Keys" - msgstr "リピートキー(_E)" - --#: ../panels/universal-access/uap.ui.h:15 -+#: panels/universal-access/uap.ui:713 - msgid "Cursor _Blinking" - msgstr "カーソルの点滅(_B)" - --#: ../panels/universal-access/uap.ui.h:16 -+#: panels/universal-access/uap.ui:759 - msgid "_Typing Assist (AccessX)" - msgstr "タイピング支援 [AccessX](_T)" - --#: ../panels/universal-access/uap.ui.h:17 -+#: panels/universal-access/uap.ui:820 - msgid "Pointing & Clicking" - msgstr "ポインター操作とクリック" - --#: ../panels/universal-access/uap.ui.h:18 -+#: panels/universal-access/uap.ui:866 - msgid "_Mouse Keys" - msgstr "マウスキー(_M)" - --#: ../panels/universal-access/uap.ui.h:19 -+#: panels/universal-access/uap.ui:911 - msgid "_Click Assist" - msgstr "クリック支援(_C)" - --#: ../panels/universal-access/uap.ui.h:20 -+#: panels/universal-access/uap.ui:957 - msgid "_Double-Click Delay" - msgstr "ダブルクリックと認識する間隔(_D)" - --#: ../panels/universal-access/uap.ui.h:21 -+#: panels/universal-access/uap.ui:977 - msgid "Double-Click Delay" - msgstr "ダブルクリックと認識する間隔" - --#: ../panels/universal-access/uap.ui.h:22 -+#: panels/universal-access/uap.ui:1042 - msgid "Cursor Size" - msgstr "カーソルの大きさ" - --#: ../panels/universal-access/uap.ui.h:23 -+#: panels/universal-access/uap.ui:1069 - msgid "" - "Cursor size can be combined with zoom to make it easier to see the cursor." --msgstr "" --"ズーム機能と組み合わせてカーソルの大きさを設定することでカーソルがより見やす" --"くなります。" -+msgstr "ズーム機能と組み合わせてカーソルの大きさを設定することでカーソルがより見やすくなります。" - --#: ../panels/universal-access/uap.ui.h:24 -+#: panels/universal-access/uap.ui:1105 - msgid "Screen Reader" - msgstr "スクリーンリーダー" - --#: ../panels/universal-access/uap.ui.h:25 -+#: panels/universal-access/uap.ui:1122 - msgid "The screen reader reads displayed text as you move the focus." --msgstr "" --"スクリーンリーダーを有効にすると、フォーカスのある画面のテキストを音声で読み" --"上げます。" -+msgstr "スクリーンリーダーを有効にすると、フォーカスのある画面のテキストを音声で読み上げます。" - --#: ../panels/universal-access/uap.ui.h:26 -+#: panels/universal-access/uap.ui:1155 - msgid "_Screen Reader" - msgstr "スクリーンリーダー(_S)" - -@@ -5873,886 +6020,890 @@ msgstr "スクリーンリーダー(_S)" - # 「切り替えキー」もわかりやすいとは言いづらいが、Windows側の機能を知っているユーザーには類推できること、またWeb検索などで機能を特定しやすいこと、「サウンドキー」よりかは幾分ましであること、などを考慮し「切り替えキー」を採用する。 - # [1] http://windows.microsoft.com/en-us/Windows7/Make-the-keyboard-easier-to-use - # [2] http://windows.microsoft.com/ja-JP/Windows7/Make-the-keyboard-easier-to-use --#: ../panels/universal-access/uap.ui.h:27 -+#: panels/universal-access/uap.ui:1194 - msgid "Sound Keys" - msgstr "切り替えキー" - --#: ../panels/universal-access/uap.ui.h:28 -+#: panels/universal-access/uap.ui:1212 - msgid "Beep when Num Lock or Caps Lock are turned on or off." - msgstr "Caps Lock と Num Lock のON/OFFが切り替わるとビープ音を鳴らします。" - --#: ../panels/universal-access/uap.ui.h:29 -+#: panels/universal-access/uap.ui:1282 - msgid "Visual Alerts" - msgstr "視覚警告" - --#: ../panels/universal-access/uap.ui.h:30 -+#: panels/universal-access/uap.ui:1286 - msgid "_Test flash" - msgstr "動作確認(_T)" - --#: ../panels/universal-access/uap.ui.h:31 -+#: panels/universal-access/uap.ui:1315 - msgid "Use a visual indication when an alert sound occurs." - msgstr "警告音が鳴った場合に視覚的に警告を表示します。" - --#: ../panels/universal-access/uap.ui.h:32 -+#: panels/universal-access/uap.ui:1366 - msgid "Flash the _window title" - msgstr "ウィンドウのタイトルバーをひらめかせる(_W)" - --#: ../panels/universal-access/uap.ui.h:33 -+#: panels/universal-access/uap.ui:1384 - msgid "Flash the entire _screen" - msgstr "画面全体をひらめかせる(_S)" - --#: ../panels/universal-access/uap.ui.h:34 -+#: panels/universal-access/uap.ui:1429 - msgid "Repeat Keys" - msgstr "リピートキー" - --#: ../panels/universal-access/uap.ui.h:35 -+#: panels/universal-access/uap.ui:1459 - msgid "Key presses repeat when key is held down." - msgstr "キーを長押しすると繰り返しキー入力を行う" - --#: ../panels/universal-access/uap.ui.h:37 -+#: panels/universal-access/uap.ui:1538 - msgid "Repeat keys delay" - msgstr "リピートキーが行われるまでの時間です" - --#: ../panels/universal-access/uap.ui.h:38 -+#: panels/universal-access/uap.ui:1586 panels/universal-access/uap.ui:1719 - msgid "Speed" - msgstr "速度" - --#: ../panels/universal-access/uap.ui.h:39 -+#: panels/universal-access/uap.ui:1623 - msgid "Repeat keys speed" - msgstr "押したキーをリピートする際の速さです" - --#: ../panels/universal-access/uap.ui.h:40 -+#: panels/universal-access/uap.ui:1647 - msgid "Cursor Blinking" - msgstr "カーソルの点滅" - --#: ../panels/universal-access/uap.ui.h:41 -+#: panels/universal-access/uap.ui:1677 - msgid "Cursor blinks in text fields." - msgstr "テキストフィールドでカーソルを点滅させる" - --#: ../panels/universal-access/uap.ui.h:42 -+#: panels/universal-access/uap.ui:1756 - msgid "Cursor blinking speed" - msgstr "カーソルが点滅する速さです" - --#: ../panels/universal-access/uap.ui.h:43 -+#: panels/universal-access/uap.ui:1792 - msgid "Typing Assist" - msgstr "タイピング支援" - --#: ../panels/universal-access/uap.ui.h:44 -+#: panels/universal-access/uap.ui:1831 - msgid "_Sticky Keys" - msgstr "固定キー(_S)" - --#: ../panels/universal-access/uap.ui.h:45 -+#: panels/universal-access/uap.ui:1848 - msgid "Treats a sequence of modifier keys as a key combination" --msgstr "" --"修飾キーに続いてキーを押したらそのキーと修飾キーを同時に押したものと扱う" -+msgstr "修飾キーに続いてキーを押したらそのキーと修飾キーを同時に押したものと扱う" - --#: ../panels/universal-access/uap.ui.h:46 -+#: panels/universal-access/uap.ui:1872 - msgid "_Disable if two keys are pressed together" - msgstr "同時に 2 つのキーを押したら無効にする(_D)" - --#: ../panels/universal-access/uap.ui.h:47 -+#: panels/universal-access/uap.ui:1890 - msgid "Beep when a _modifier key is pressed" - msgstr "修飾キーを押したらビープ音を鳴らす(_M)" - --#: ../panels/universal-access/uap.ui.h:48 -+#: panels/universal-access/uap.ui:1938 - msgid "S_low Keys" - msgstr "スローキー(_L)" - --#: ../panels/universal-access/uap.ui.h:49 -+#: panels/universal-access/uap.ui:1955 - msgid "Puts a delay between when a key is pressed and when it is accepted" - msgstr "キーを押下してから入力と認識されるまでに一定の間隔を設定する" - --#: ../panels/universal-access/uap.ui.h:50 -+#: panels/universal-access/uap.ui:1988 panels/universal-access/uap.ui:2201 -+#: panels/universal-access/uap.ui:2538 - msgid "A_cceptance delay:" - msgstr "認識するまでの間隔(_C):" - --#: ../panels/universal-access/uap.ui.h:51 -+#: panels/universal-access/uap.ui:2010 - msgctxt "slow keys delay" - msgid "Short" - msgstr "短い" - --#: ../panels/universal-access/uap.ui.h:52 -+#: panels/universal-access/uap.ui:2029 - msgid "Slow keys typing delay" - msgstr "スローキーの入力間隔" - --#: ../panels/universal-access/uap.ui.h:53 -+#: panels/universal-access/uap.ui:2044 - msgctxt "slow keys delay" - msgid "Long" - msgstr "長い" - --#: ../panels/universal-access/uap.ui.h:54 -+#: panels/universal-access/uap.ui:2071 - msgid "Beep when a key is pr_essed" - msgstr "キーが押されたらビープ音を鳴らす(_E)" - --#: ../panels/universal-access/uap.ui.h:55 -+#: panels/universal-access/uap.ui:2088 - msgid "Beep when a key is _accepted" - msgstr "キー入力が受け付けられたらビープ音を鳴らす(_A)" - --#: ../panels/universal-access/uap.ui.h:56 -+#: panels/universal-access/uap.ui:2105 panels/universal-access/uap.ui:2284 - msgid "Beep when a key is _rejected" - msgstr "キー入力が拒否されたらビープ音を鳴らす(_R)" - --#: ../panels/universal-access/uap.ui.h:57 -+#: panels/universal-access/uap.ui:2151 - msgid "_Bounce Keys" - msgstr "バウンスキー(_B)" - --#: ../panels/universal-access/uap.ui.h:58 -+#: panels/universal-access/uap.ui:2168 - msgid "Ignores fast duplicate keypresses" - msgstr "同じキーを繰り返し押した場合は無視する" - --#: ../panels/universal-access/uap.ui.h:59 -+#: panels/universal-access/uap.ui:2223 - msgctxt "bounce keys delay" - msgid "Short" - msgstr "短い" - --#: ../panels/universal-access/uap.ui.h:60 -+#: panels/universal-access/uap.ui:2242 - msgid "Bounce keys typing delay" - msgstr "バウンスキーの入力間隔" - --#: ../panels/universal-access/uap.ui.h:61 -+#: panels/universal-access/uap.ui:2257 - msgctxt "bounce keys delay" - msgid "Long" - msgstr "長い" - --#: ../panels/universal-access/uap.ui.h:62 -+#: panels/universal-access/uap.ui:2370 - msgid "_Enable by Keyboard" - msgstr "キーボードから有効化できるようにする(_E)" - --#: ../panels/universal-access/uap.ui.h:63 -+#: panels/universal-access/uap.ui:2387 - msgid "Turn accessibility features on and off using the keyboard" - msgstr "アクセシビリティ機能のオン/オフをキーボードで切り替える" - --#: ../panels/universal-access/uap.ui.h:64 -+#: panels/universal-access/uap.ui:2451 - msgid "Click Assist" - msgstr "クリック支援" - --#: ../panels/universal-access/uap.ui.h:65 -+#: panels/universal-access/uap.ui:2487 - msgid "_Simulated Secondary Click" - msgstr "副ボタンのクリックの代替(_S)" - --#: ../panels/universal-access/uap.ui.h:66 -+#: panels/universal-access/uap.ui:2505 - msgid "Trigger a secondary click by holding down the primary button" - msgstr "主ボタンを押したままにすると副ボタンのクリックとみなす" - --#: ../panels/universal-access/uap.ui.h:67 -+#: panels/universal-access/uap.ui:2559 - msgctxt "secondary click" - msgid "Short" - msgstr "短い" - --#: ../panels/universal-access/uap.ui.h:68 -+#: panels/universal-access/uap.ui:2578 - msgid "Secondary click delay" - msgstr "副ボタンのクリックの間隔" - --#: ../panels/universal-access/uap.ui.h:69 -+#: panels/universal-access/uap.ui:2593 - msgctxt "secondary click delay" - msgid "Long" - msgstr "長い" - - # See also ja.po of mousetweak --#: ../panels/universal-access/uap.ui.h:70 -+#: panels/universal-access/uap.ui:2650 - msgid "_Hover Click" - msgstr "ホバークリック(_H)" - --#: ../panels/universal-access/uap.ui.h:71 -+#: panels/universal-access/uap.ui:2668 - msgid "Trigger a click when the pointer hovers" - msgstr "ポインターの移動を停止したらクリック動作を行う" - --#: ../panels/universal-access/uap.ui.h:72 -+#: panels/universal-access/uap.ui:2701 - msgid "D_elay:" - msgstr "認識するまでの間隔(_E):" - --#: ../panels/universal-access/uap.ui.h:73 -+#: panels/universal-access/uap.ui:2723 - msgctxt "dwell click delay" - msgid "Short" - msgstr "短い" - --#: ../panels/universal-access/uap.ui.h:74 -+#: panels/universal-access/uap.ui:2754 - msgctxt "dwell click delay" - msgid "Long" - msgstr "長い" - --#: ../panels/universal-access/uap.ui.h:75 -+#: panels/universal-access/uap.ui:2790 - msgid "Motion _threshold:" - msgstr "ジェスチャーのしきい値(_T):" - --#: ../panels/universal-access/uap.ui.h:76 -+#: panels/universal-access/uap.ui:2812 - msgctxt "dwell click threshold" - msgid "Small" - msgstr "小" - --#: ../panels/universal-access/uap.ui.h:77 -+#: panels/universal-access/uap.ui:2843 - msgctxt "dwell click threshold" - msgid "Large" - msgstr "大" - --#: ../panels/universal-access/zoom-options.c:333 -+#: panels/universal-access/zoom-options.c:333 - msgctxt "Distance" - msgid "Short" - msgstr "短い" - --#: ../panels/universal-access/zoom-options.c:334 -+#: panels/universal-access/zoom-options.c:334 - msgctxt "Distance" - msgid "¼ Screen" - msgstr "画面の¼" - --#: ../panels/universal-access/zoom-options.c:335 -+#: panels/universal-access/zoom-options.c:335 - msgctxt "Distance" - msgid "½ Screen" - msgstr "画面の½" - --#: ../panels/universal-access/zoom-options.c:336 -+#: panels/universal-access/zoom-options.c:336 - msgctxt "Distance" - msgid "¾ Screen" - msgstr "画面の¾" - --#: ../panels/universal-access/zoom-options.c:337 -+#: panels/universal-access/zoom-options.c:337 - msgctxt "Distance" - msgid "Long" - msgstr "長い" - --#: ../panels/universal-access/zoom-options.ui.h:1 -+#: panels/universal-access/zoom-options.ui:48 - msgid "Full Screen" - msgstr "フルスクリーン" - --#: ../panels/universal-access/zoom-options.ui.h:2 -+#: panels/universal-access/zoom-options.ui:53 - msgid "Top Half" - msgstr "上半分" - --#: ../panels/universal-access/zoom-options.ui.h:3 -+#: panels/universal-access/zoom-options.ui:58 - msgid "Bottom Half" - msgstr "下半分" - --#: ../panels/universal-access/zoom-options.ui.h:4 -+#: panels/universal-access/zoom-options.ui:63 - msgid "Left Half" - msgstr "左半分" - --#: ../panels/universal-access/zoom-options.ui.h:5 -+#: panels/universal-access/zoom-options.ui:68 - msgid "Right Half" - msgstr "右半分" - --#: ../panels/universal-access/zoom-options.ui.h:6 -+#: panels/universal-access/zoom-options.ui:77 - msgid "Zoom Options" - msgstr "ズームオプション" - --#: ../panels/universal-access/zoom-options.ui.h:8 -+#: panels/universal-access/zoom-options.ui:186 - msgid "_Magnification:" - msgstr "拡大率(_M):" - --#: ../panels/universal-access/zoom-options.ui.h:9 -+#: panels/universal-access/zoom-options.ui:250 - msgid "_Follow mouse cursor" - msgstr "マウスカーソルの動きを追う(_F)" - --#: ../panels/universal-access/zoom-options.ui.h:10 -+#: panels/universal-access/zoom-options.ui:270 - msgid "_Screen part:" - msgstr "拡大部分(_S):" - --#: ../panels/universal-access/zoom-options.ui.h:11 -+#: panels/universal-access/zoom-options.ui:332 - msgid "Magnifier _extends outside of screen" - msgstr "画面の外側も表示する(_E)" - - # 旧来のユーザーのために旧Orcaでの名称を括弧内に併記 --#: ../panels/universal-access/zoom-options.ui.h:12 -+#: panels/universal-access/zoom-options.ui:351 - msgid "_Keep magnifier cursor centered" - msgstr "カーソルを画面中央にキープする(中央)(_K)" - - # 旧来のユーザーのために旧Orcaでの名称を括弧内に併記 --#: ../panels/universal-access/zoom-options.ui.h:13 -+#: panels/universal-access/zoom-options.ui:370 - msgid "Magnifier cursor _pushes contents around" - msgstr "拡大領域を押し出すように移動する(プッシュ)(_P)" - - # 旧来のユーザーのために旧Orcaでの名称を括弧内に併記 --#: ../panels/universal-access/zoom-options.ui.h:14 -+#: panels/universal-access/zoom-options.ui:389 - msgid "Magnifier cursor moves with _contents" - msgstr "カーソルの動きに拡大領域を移動する (プロポーショナル)(_C)" - --#: ../panels/universal-access/zoom-options.ui.h:15 -+#: panels/universal-access/zoom-options.ui:423 - msgid "Magnifier Position:" - msgstr "拡大領域の位置:" - --#: ../panels/universal-access/zoom-options.ui.h:16 -+#: panels/universal-access/zoom-options.ui:444 - msgid "Magnifier" - msgstr "拡大鏡" - --#: ../panels/universal-access/zoom-options.ui.h:17 -+#: panels/universal-access/zoom-options.ui:490 - msgid "_Thickness:" - msgstr "太さ(_T):" - --#: ../panels/universal-access/zoom-options.ui.h:18 -+#: panels/universal-access/zoom-options.ui:516 - msgctxt "universal access, thickness" - msgid "Thin" - msgstr "細い" - --#: ../panels/universal-access/zoom-options.ui.h:19 -+#: panels/universal-access/zoom-options.ui:548 - msgctxt "universal access, thickness" - msgid "Thick" - msgstr "太い" - --#: ../panels/universal-access/zoom-options.ui.h:20 -+#: panels/universal-access/zoom-options.ui:574 - msgid "_Length:" - msgstr "長さ(_L):" - - #. The color of the accessibility crosshair --#: ../panels/universal-access/zoom-options.ui.h:22 -+#: panels/universal-access/zoom-options.ui:626 - msgid "Co_lor:" - msgstr "色(_L):" - --#: ../panels/universal-access/zoom-options.ui.h:23 -+#: panels/universal-access/zoom-options.ui:690 - msgid "_Crosshairs:" - msgstr "照準線(_C):" - --#: ../panels/universal-access/zoom-options.ui.h:24 -+#: panels/universal-access/zoom-options.ui:741 - msgid "_Overlaps mouse cursor" - msgstr "マウスカーソルに重ねる(_O)" - --#: ../panels/universal-access/zoom-options.ui.h:25 -+#: panels/universal-access/zoom-options.ui:779 - msgid "Crosshairs" - msgstr "照準線" - --#: ../panels/universal-access/zoom-options.ui.h:26 -+#: panels/universal-access/zoom-options.ui:827 - msgid "_White on black:" - msgstr "反転(_W):" - --#: ../panels/universal-access/zoom-options.ui.h:27 -+#: panels/universal-access/zoom-options.ui:850 - msgid "_Brightness:" - msgstr "明るさ(_B):" - --#: ../panels/universal-access/zoom-options.ui.h:28 -+#: panels/universal-access/zoom-options.ui:874 - msgid "_Contrast:" - msgstr "コントラスト(_C):" - - #. The contrast scale goes from Color to None (grayscale) --#: ../panels/universal-access/zoom-options.ui.h:30 -+#: panels/universal-access/zoom-options.ui:897 - msgctxt "universal access, contrast" - msgid "Co_lor" - msgstr "色(_L)" - --#: ../panels/universal-access/zoom-options.ui.h:31 -+#: panels/universal-access/zoom-options.ui:925 - msgctxt "universal access, color" - msgid "None" - msgstr "白黒" - --#: ../panels/universal-access/zoom-options.ui.h:32 -+#: panels/universal-access/zoom-options.ui:957 - msgctxt "universal access, color" - msgid "Full" - msgstr "カラー" - --#: ../panels/universal-access/zoom-options.ui.h:33 -+#: panels/universal-access/zoom-options.ui:1023 - msgctxt "universal access, brightness" - msgid "Low" - msgstr "暗い" - --#: ../panels/universal-access/zoom-options.ui.h:34 -+#: panels/universal-access/zoom-options.ui:1056 - msgctxt "universal access, brightness" - msgid "High" - msgstr "明るい" - --#: ../panels/universal-access/zoom-options.ui.h:35 -+#: panels/universal-access/zoom-options.ui:1087 - msgctxt "universal access, contrast" - msgid "Low" - msgstr "低い" - --#: ../panels/universal-access/zoom-options.ui.h:36 -+#: panels/universal-access/zoom-options.ui:1120 - msgctxt "universal access, contrast" - msgid "High" - msgstr "高い" - --#: ../panels/universal-access/zoom-options.ui.h:37 -+#: panels/universal-access/zoom-options.ui:1156 - msgid "Color Effects:" - msgstr "色の設定:" - --#: ../panels/universal-access/zoom-options.ui.h:38 -+#: panels/universal-access/zoom-options.ui:1181 - msgid "Color Effects" - msgstr "色の設定" - --#: ../panels/user-accounts/data/account-dialog.ui.h:1 --#: ../panels/user-accounts/data/join-dialog.ui.h:1 -+#: panels/user-accounts/data/account-dialog.ui:18 -+#: panels/user-accounts/data/join-dialog.ui:11 - msgid "Add User" - msgstr "ユーザーの追加" - --#: ../panels/user-accounts/data/account-dialog.ui.h:5 -+#: panels/user-accounts/data/account-dialog.ui:171 - msgid "_Full Name" - msgstr "フルネーム(_F)" - --#: ../panels/user-accounts/data/account-dialog.ui.h:6 --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:4 -+#: panels/user-accounts/data/account-dialog.ui:197 -+#: panels/user-accounts/data/user-accounts-dialog.ui:146 - msgid "Standard" - msgstr "標準" - --#: ../panels/user-accounts/data/account-dialog.ui.h:7 --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:5 -+#: panels/user-accounts/data/account-dialog.ui:207 -+#: panels/user-accounts/data/user-accounts-dialog.ui:155 - msgid "Administrator" - msgstr "管理者" - --#: ../panels/user-accounts/data/account-dialog.ui.h:8 --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:6 -+#: panels/user-accounts/data/account-dialog.ui:223 -+#: panels/user-accounts/data/user-accounts-dialog.ui:173 - msgid "Account _Type" - msgstr "アカウントの種類(_T)" - --#: ../panels/user-accounts/data/account-dialog.ui.h:10 -+#: panels/user-accounts/data/account-dialog.ui:260 - msgid "Allow user to set a password when they next _login" - msgstr "次回ログイン時にユーザー自身でパスワードを設定させる(_L)" - --#: ../panels/user-accounts/data/account-dialog.ui.h:11 -+#: panels/user-accounts/data/account-dialog.ui:274 - msgid "Set a password _now" - msgstr "いまパスワードを設定する(_N)" - --#: ../panels/user-accounts/data/account-dialog.ui.h:13 -+#: panels/user-accounts/data/account-dialog.ui:387 - msgid "_Confirm" - msgstr "確認(_C)" - --#: ../panels/user-accounts/data/account-dialog.ui.h:14 -+#: panels/user-accounts/data/account-dialog.ui:463 -+#: panels/user-accounts/data/account-dialog.ui:667 - msgid "" - "Enterprise login allows an existing centrally managed user account to be " - "used on this device. You can also use this account to access company " - "resources on the internet." --msgstr "" --"エンタープライズログインでは、中央管理された既存のユーザーアカウントをこのデ" --"バイスで使用できます。このアカウントを使用して、インターネット上の企業内の各" --"種リソースにアクセスすることができます。" -+msgstr "エンタープライズログインでは、中央管理された既存のユーザーアカウントをこのデバイスで使用できます。このアカウントを使用して、インターネット上の企業内の各種リソースにアクセスすることができます。" - --#: ../panels/user-accounts/data/account-dialog.ui.h:15 --#: ../panels/user-accounts/data/join-dialog.ui.h:9 -+#: panels/user-accounts/data/account-dialog.ui:485 -+#: panels/user-accounts/data/join-dialog.ui:116 - msgid "_Domain" - msgstr "ドメイン(_D)" - --#: ../panels/user-accounts/data/account-dialog.ui.h:16 -+#: panels/user-accounts/data/account-dialog.ui:707 - msgid "You are Offline" - msgstr "現在オフラインです" - --#: ../panels/user-accounts/data/account-dialog.ui.h:17 -+#: panels/user-accounts/data/account-dialog.ui:726 - msgid "You must be online in order to add enterprise users." --msgstr "" --"エンタープライズユーザーを追加するには、システムをオンラインにする必要があり" --"ます。" -+msgstr "エンタープライズユーザーを追加するには、システムをオンラインにする必要があります。" - --#: ../panels/user-accounts/data/account-dialog.ui.h:18 -+#: panels/user-accounts/data/account-dialog.ui:760 - msgid "_Enterprise Login" - msgstr "エンタープライズのログイン(_E)" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:1 -+#: panels/user-accounts/data/account-fingerprint.ui:12 - msgid "Left thumb" - msgstr "左の親指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:2 -+#: panels/user-accounts/data/account-fingerprint.ui:15 - msgid "Left middle finger" - msgstr "左の中指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:3 -+#: panels/user-accounts/data/account-fingerprint.ui:18 - msgid "Left ring finger" - msgstr "左の薬指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:4 -+#: panels/user-accounts/data/account-fingerprint.ui:21 - msgid "Left little finger" - msgstr "左の小指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:5 -+#: panels/user-accounts/data/account-fingerprint.ui:24 - msgid "Right thumb" - msgstr "右の親指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:6 -+#: panels/user-accounts/data/account-fingerprint.ui:27 - msgid "Right middle finger" - msgstr "右の中指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:7 -+#: panels/user-accounts/data/account-fingerprint.ui:30 - msgid "Right ring finger" - msgstr "右の薬指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:8 -+#: panels/user-accounts/data/account-fingerprint.ui:33 - msgid "Right little finger" - msgstr "右の小指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:9 --#: ../panels/user-accounts/um-fingerprint-dialog.c:680 -+#: panels/user-accounts/data/account-fingerprint.ui:39 -+#: panels/user-accounts/um-fingerprint-dialog.c:677 - msgid "Enable Fingerprint Login" - msgstr "指紋認証を有効にする" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:10 -+#: panels/user-accounts/data/account-fingerprint.ui:89 - msgid "_Right index finger" - msgstr "右の人差し指(_R)" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:11 -+#: panels/user-accounts/data/account-fingerprint.ui:105 - msgid "_Left index finger" - msgstr "左の人差し指(_L)" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:12 -+#: panels/user-accounts/data/account-fingerprint.ui:126 - msgid "_Other finger:" - msgstr "別の指(_O):" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:13 -+#: 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." --msgstr "" --"指紋を登録しました。今から指紋リーダーを使ってログインできるようになりまし" --"た。" -+msgstr "指紋を登録しました。今から指紋リーダーを使ってログインできるようになりました。" -+ -+#: panels/user-accounts/data/avatar-chooser.ui:27 -+msgid "Take a Picture…" -+msgstr "写真の撮影..." - --#: ../panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in.h:1 -+#: panels/user-accounts/data/avatar-chooser.ui:34 -+msgid "Select a File…" -+msgstr "ファイルの選択..." -+ -+#: panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in:3 - msgid "Users" - msgstr "ユーザー" - --#: ../panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in.h:2 -+#: panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in:4 - msgid "Add or remove users and change your password" - msgstr "ユーザーの追加と削除、パスワードの変更を行います" - --#. Translators: those are keywords for the user accounts control-center panel --#: ../panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in.h:4 -+#. 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: 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 "" --"Login;Name;Fingerprint;Avatar;Logo;Face;Password;ログイン;名前;指紋;アバター;" --"ロゴ;顔;パスワード;Users;ユーザー;" -+msgstr "Login;Name;Fingerprint;Avatar;Logo;Face;Password;ログイン;名前;指紋;アバター;ロゴ;顔;パスワード;Users;ユーザー;" - - #. Translators: This button enrolls the computer in the domain in order to use enterprise logins. --#: ../panels/user-accounts/data/join-dialog.ui.h:4 -+#: panels/user-accounts/data/join-dialog.ui:39 - msgid "_Enroll" - msgstr "登録(_E)" - --#: ../panels/user-accounts/data/join-dialog.ui.h:5 -+#: panels/user-accounts/data/join-dialog.ui:75 - msgid "Domain Administrator Login" - msgstr "ドメイン管理者のログイン" - --#: ../panels/user-accounts/data/join-dialog.ui.h:6 -+#: panels/user-accounts/data/join-dialog.ui:93 - msgid "" - "In order to use enterprise logins, this computer needs to be\n" - "enrolled in the domain. Please have your network administrator\n" - "type their domain password here." --msgstr "" --"エンタープライズのログインを使用するには、 このコンピューターを\n" -+msgstr "エンタープライズのログインを使用するには、 このコンピューターを\n" - "ドメインに登録する必要があります。ネットワーク管理者にドメインの\n" - "パスワード入力を行ってもらってください。" - --#: ../panels/user-accounts/data/join-dialog.ui.h:10 -+#: panels/user-accounts/data/join-dialog.ui:150 - msgid "Administrator _Name" - msgstr "管理者名(_N)" - --#: ../panels/user-accounts/data/join-dialog.ui.h:11 -+#: panels/user-accounts/data/join-dialog.ui:185 - msgid "Administrator Password" - msgstr "管理者のパスワード" - --#: ../panels/user-accounts/data/password-dialog.ui.h:1 -+#: panels/user-accounts/data/password-dialog.ui:7 - msgid "Change Password" - msgstr "パスワードの変更" - --#: ../panels/user-accounts/data/password-dialog.ui.h:3 -+#: panels/user-accounts/data/password-dialog.ui:38 - msgid "Ch_ange" - msgstr "変更(_A)" - --#: ../panels/user-accounts/data/password-dialog.ui.h:4 -+#: panels/user-accounts/data/password-dialog.ui:142 - msgid "_Verify New Password" - msgstr "新しいパスワードの確認(_V)" - --#: ../panels/user-accounts/data/password-dialog.ui.h:5 -+#: panels/user-accounts/data/password-dialog.ui:159 - msgid "_New Password" - msgstr "新しいパスワード(_N)" - --#: ../panels/user-accounts/data/password-dialog.ui.h:6 -+#: panels/user-accounts/data/password-dialog.ui:208 - msgid "Current _Password" - msgstr "現在のパスワード(_P)" - --#: ../panels/user-accounts/data/password-dialog.ui.h:7 -+#: panels/user-accounts/data/password-dialog.ui:243 - msgid "Allow user to change their password on next login" - msgstr "次回ログイン時にユーザー自身でパスワードを設定させる" - --#: ../panels/user-accounts/data/password-dialog.ui.h:8 -+#: panels/user-accounts/data/password-dialog.ui:256 - msgid "Set a password now" - msgstr "いまパスワードを設定する" - --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:1 -+#: panels/user-accounts/data/user-accounts-dialog.ui:20 - msgid "_Add User…" - msgstr "ユーザーの追加(_A)" - --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:2 -+#: panels/user-accounts/data/user-accounts-dialog.ui:69 - msgid "Your session needs to be restarted for changes to take effect" - msgstr "変更内容を反映させるにはログインしなおす必要があります" - --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:3 -+#: panels/user-accounts/data/user-accounts-dialog.ui:77 - msgid "Restart Now" - msgstr "ログアウト" - --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:8 -+#: panels/user-accounts/data/user-accounts-dialog.ui:244 - msgid "A_utomatic Login" - msgstr "自動ログイン(_U)" - --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:9 -+#: panels/user-accounts/data/user-accounts-dialog.ui:285 - msgid "_Fingerprint Login" - msgstr "指紋認証ログイン(_F)" - --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:10 -+#: panels/user-accounts/data/user-accounts-dialog.ui:311 -+#: panels/user-accounts/data/user-accounts-dialog.ui:324 - msgid "User Icon" - msgstr "ユーザーアイコン" - --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:12 -+#: panels/user-accounts/data/user-accounts-dialog.ui:387 - msgid "Last Login" - msgstr "最終ログイン" - --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:13 -+#: panels/user-accounts/data/user-accounts-dialog.ui:434 - msgid "Remove User…" - msgstr "ユーザーの削除…" - --#: ../panels/user-accounts/org.gnome.controlcenter.user-accounts.policy.in.h:1 -+#. Translators: This is the empty state page label which states that there are no users to show in the panel. -+#: panels/user-accounts/data/user-accounts-dialog.ui:466 -+msgid "No Users Found" -+msgstr "ユーザーが見つかりません" -+ -+#: panels/user-accounts/data/user-accounts-dialog.ui:476 -+msgid "Unlock to add a user account." -+msgstr "ユーザーアカウントの追加を解除します。" -+ -+#: panels/user-accounts/org.gnome.controlcenter.user-accounts.policy.in:11 - msgid "Manage user accounts" - msgstr "ユーザーアカウントの管理" - --#: ../panels/user-accounts/org.gnome.controlcenter.user-accounts.policy.in.h:2 -+#: panels/user-accounts/org.gnome.controlcenter.user-accounts.policy.in:12 - msgid "Authentication is required to change user data" - msgstr "ユーザーのデータを変更するには認証が必要になります" - --#: ../panels/user-accounts/pw-utils.c:81 -+#: panels/user-accounts/pw-utils.c:81 - msgctxt "Password hint" - msgid "The new password needs to be different from the old one." --msgstr "" --"新しいパスワードは、現在のパスワードとは異なるものを指定する必要があります。" -+msgstr "新しいパスワードは、現在のパスワードとは異なるものを指定する必要があります。" - --#: ../panels/user-accounts/pw-utils.c:83 -+#: panels/user-accounts/pw-utils.c:83 - msgctxt "Password hint" - msgid "Try changing some letters and numbers." - msgstr "いくつかの文字や数字を変更してください。" - --#: ../panels/user-accounts/pw-utils.c:85 ../panels/user-accounts/pw-utils.c:93 -+#: panels/user-accounts/pw-utils.c:85 panels/user-accounts/pw-utils.c:93 - msgctxt "Password hint" - msgid "Try changing the password a bit more." --msgstr "" --"新しいパスワードが現在のものと似すぎています。もう少し異なるものを使用してく" --"ださい。" -+msgstr "新しいパスワードが現在のものと似すぎています。もう少し異なるものを使用してください。" - --#: ../panels/user-accounts/pw-utils.c:87 -+#: panels/user-accounts/pw-utils.c:87 - msgctxt "Password hint" - msgid "A password without your user name would be stronger." - msgstr "パスワードからユーザー名を取り除くともっと強くなるでしょう。" - --#: ../panels/user-accounts/pw-utils.c:89 -+#: panels/user-accounts/pw-utils.c:89 - msgctxt "Password hint" - msgid "Try to avoid using your name in the password." - msgstr "パスワード中にユーザーの氏名を使うのは避けるようにしてください。" - --#: ../panels/user-accounts/pw-utils.c:91 -+#: panels/user-accounts/pw-utils.c:91 - msgctxt "Password hint" - msgid "Try to avoid some of the words included in the password." - msgstr "パスワードにある一部の単語を使わないようにしてください。" - --#: ../panels/user-accounts/pw-utils.c:95 -+#: panels/user-accounts/pw-utils.c:95 - msgctxt "Password hint" - msgid "Try to avoid common words." - msgstr "一般的な単語は避けるようにしてください。" - --#: ../panels/user-accounts/pw-utils.c:97 -+#: panels/user-accounts/pw-utils.c:97 - msgctxt "Password hint" - msgid "Try to avoid reordering existing words." - msgstr "既存の単語の文字を並べ替えたものは使わないようにしてください。" - --#: ../panels/user-accounts/pw-utils.c:99 -+#: panels/user-accounts/pw-utils.c:99 - msgctxt "Password hint" - msgid "Try to use more numbers." - msgstr "数字をもっと使うようにしてください。" - --#: ../panels/user-accounts/pw-utils.c:101 -+#: panels/user-accounts/pw-utils.c:101 - msgctxt "Password hint" - msgid "Try to use more uppercase letters." - msgstr "大文字をもっと使うようにしてください。" - --#: ../panels/user-accounts/pw-utils.c:103 -+#: panels/user-accounts/pw-utils.c:103 - msgctxt "Password hint" - msgid "Try to use more lowercase letters." - msgstr "小文字をもっと使うようにください。" - --#: ../panels/user-accounts/pw-utils.c:105 -+#: panels/user-accounts/pw-utils.c:105 - msgctxt "Password hint" - msgid "Try to use more special characters, like punctuation." - msgstr "記号など特殊文字をもっと使うようにしてください。" - --#: ../panels/user-accounts/pw-utils.c:107 -+#: panels/user-accounts/pw-utils.c:107 - msgctxt "Password hint" - msgid "Try to use a mixture of letters, numbers and punctuation." - msgstr "アルファベット、数字、記号を混在させるようにしてください。" - --#: ../panels/user-accounts/pw-utils.c:109 -+#: panels/user-accounts/pw-utils.c:109 - msgctxt "Password hint" - msgid "Try to avoid repeating the same character." - msgstr "同じ文字を連続して使わないようにしてください。" - --#: ../panels/user-accounts/pw-utils.c:111 -+#: panels/user-accounts/pw-utils.c:111 - msgctxt "Password hint" - msgid "" - "Try to avoid repeating the same type of character: you need to mix up " - "letters, numbers and punctuation." --msgstr "" --"同じ種類の文字を繰り返しは避けるようにしてください。アルファベット、数字、記" --"号を混ぜてください。" -+msgstr "同じ種類の文字を繰り返しは避けるようにしてください。アルファベット、数字、記号を混ぜてください。" - --#: ../panels/user-accounts/pw-utils.c:113 -+#: panels/user-accounts/pw-utils.c:113 - msgctxt "Password hint" - msgid "Try to avoid sequences like 1234 or abcd." - msgstr "1234 や abcd などの連続した並びは避けるようにしてください。" - --#: ../panels/user-accounts/pw-utils.c:115 -+#: panels/user-accounts/pw-utils.c:115 - msgctxt "Password hint" - msgid "" - "Password needs to be longer. Try to add more letters, numbers and " - "punctuation." --msgstr "" --"パスワードが短すぎます。アルファベット、数字、記号をもっと追加するようにして" --"ください。" -+msgstr "パスワードが短すぎます。アルファベット、数字、記号をもっと追加するようにしてください。" - --#: ../panels/user-accounts/pw-utils.c:117 -+#: panels/user-accounts/pw-utils.c:117 - msgctxt "Password hint" - msgid "Mix uppercase and lowercase and try to use a number or two." - msgstr "大文字、小文字を混在させ、さらに数字を 1 つか 2 つは使用してください。" - --#: ../panels/user-accounts/pw-utils.c:119 -+#: panels/user-accounts/pw-utils.c:119 - msgctxt "Password hint" - msgid "" - "Adding more letters, numbers and punctuation will make the password stronger." - msgstr "さらに文字や数字、記号を追加するともっと強くなります。" - --#: ../panels/user-accounts/run-passwd.c:422 -+#: panels/user-accounts/run-passwd.c:422 - msgid "Authentication failed" - msgstr "認証に失敗しました" - --#: ../panels/user-accounts/run-passwd.c:502 -+#: panels/user-accounts/run-passwd.c:502 - #, c-format - msgid "The new password is too short" - msgstr "新しいパスワードは短すぎます" - --#: ../panels/user-accounts/run-passwd.c:508 -+#: panels/user-accounts/run-passwd.c:508 - #, c-format - msgid "The new password is too simple" - msgstr "新しいパスワードは単純すぎます" - --#: ../panels/user-accounts/run-passwd.c:514 -+#: panels/user-accounts/run-passwd.c:514 - #, c-format - msgid "The old and new passwords are too similar" - msgstr "新旧のパスワードが酷似しています" - --#: ../panels/user-accounts/run-passwd.c:517 -+#: panels/user-accounts/run-passwd.c:517 - #, c-format - msgid "The new password has already been used recently." - msgstr "新しいパスワードは最近使用したものです。" - --#: ../panels/user-accounts/run-passwd.c:520 -+#: panels/user-accounts/run-passwd.c:520 - #, c-format - msgid "The new password must contain numeric or special characters" - msgstr "新しいパスワードには数字または特殊文字を含めてください" - --#: ../panels/user-accounts/run-passwd.c:524 -+#: panels/user-accounts/run-passwd.c:524 - #, c-format - msgid "The old and new passwords are the same" - msgstr "新旧のパスワードが同じです" - --#: ../panels/user-accounts/run-passwd.c:528 -+#: panels/user-accounts/run-passwd.c:528 - #, c-format - msgid "Your password has been changed since you initially authenticated!" - msgstr "最初に認証を行った以降にパスワードが変更されています!" - --#: ../panels/user-accounts/run-passwd.c:532 -+#: panels/user-accounts/run-passwd.c:532 - #, c-format - msgid "The new password does not contain enough different characters" - msgstr "新しいパスワードには十分な種類の文字が含まれていません" - --#: ../panels/user-accounts/run-passwd.c:536 -+#: panels/user-accounts/run-passwd.c:536 - #, c-format - msgid "Unknown error" - msgstr "原因不明のエラー" - --#: ../panels/user-accounts/um-account-dialog.c:34 -+#: panels/user-accounts/um-account-dialog.c:34 - msgid "Should match the web address of your login provider." - msgstr "ログイン提供者のウェブアドレスと一致させる必要があります。" - --#: ../panels/user-accounts/um-account-dialog.c:229 -+#: panels/user-accounts/um-account-dialog.c:229 - msgid "Failed to add account" - msgstr "アカウントの追加に失敗しました" - --#: ../panels/user-accounts/um-account-dialog.c:462 -+#: panels/user-accounts/um-account-dialog.c:462 - msgid "Passwords do not match." - msgstr "パスワードが一致しません。" - --#: ../panels/user-accounts/um-account-dialog.c:717 --#: ../panels/user-accounts/um-account-dialog.c:763 --#: ../panels/user-accounts/um-account-dialog.c:784 -+#: panels/user-accounts/um-account-dialog.c:717 -+#: panels/user-accounts/um-account-dialog.c:763 -+#: panels/user-accounts/um-account-dialog.c:784 - msgid "Failed to register account" - msgstr "アカウントの登録に失敗しました" - --#: ../panels/user-accounts/um-account-dialog.c:907 -+#: panels/user-accounts/um-account-dialog.c:907 - msgid "No supported way to authenticate with this domain" - msgstr "このドメインで認証を行う方法はサポートされていません" - --#: ../panels/user-accounts/um-account-dialog.c:980 -+#: panels/user-accounts/um-account-dialog.c:980 - msgid "Failed to join domain" - msgstr "ドメインの参加に失敗しました" - --#: ../panels/user-accounts/um-account-dialog.c:1041 -+#: panels/user-accounts/um-account-dialog.c:1041 - msgid "" - "That login name didn’t work.\n" - "Please try again." --msgstr "" --"ログイン名に問題がありました。\n" -+msgstr "ログイン名に問題がありました。\n" - "やり直してください。" - --#: ../panels/user-accounts/um-account-dialog.c:1048 -+#: panels/user-accounts/um-account-dialog.c:1048 - msgid "" - "That login password didn’t work.\n" - "Please try again." --msgstr "" --"パスワードに問題がありました。\n" -+msgstr "パスワードに問題がありました。\n" - "やり直してください。" - --#: ../panels/user-accounts/um-account-dialog.c:1056 -+#: panels/user-accounts/um-account-dialog.c:1056 - msgid "Failed to log into domain" - msgstr "ドメインへのログインに失敗しました" - --#: ../panels/user-accounts/um-account-dialog.c:1114 -+#: panels/user-accounts/um-account-dialog.c:1114 - msgid "Unable to find the domain. Maybe you misspelled it?" - msgstr "ドメインを見つけられません。スペルミスがないか確認してください。" - --#: ../panels/user-accounts/um-account-type.c:34 -+#: panels/user-accounts/um-account-type.c:34 - msgctxt "Account type" - msgid "Standard" - msgstr "標準" - --#: ../panels/user-accounts/um-account-type.c:36 -+#: panels/user-accounts/um-account-type.c:36 - msgctxt "Account type" - msgid "Administrator" - msgstr "管理者" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:142 -+#: panels/user-accounts/um-fingerprint-dialog.c:139 - msgid "" - "You are not allowed to access the device. Contact your system administrator." --msgstr "" --"デバイスへのアクセスが許可されていません。システム管理者に連絡してください。" -+msgstr "デバイスへのアクセスが許可されていません。システム管理者に連絡してください。" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:144 -+#: panels/user-accounts/um-fingerprint-dialog.c:141 - msgid "The device is already in use." - msgstr "そのデバイスは使用中です。" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:146 -+#: panels/user-accounts/um-fingerprint-dialog.c:143 - msgid "An internal error occurred." - msgstr "システム内部のエラーが発生しました。" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:217 -+#: panels/user-accounts/um-fingerprint-dialog.c:214 - msgid "Enabled" - msgstr "有効" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:263 -+#: panels/user-accounts/um-fingerprint-dialog.c:260 - msgid "Delete registered fingerprints?" - msgstr "登録した指紋情報を削除しますか?" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:267 -+#: panels/user-accounts/um-fingerprint-dialog.c:264 - msgid "_Delete Fingerprints" - msgstr "削除する(_D)" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:273 -+#: panels/user-accounts/um-fingerprint-dialog.c:270 - msgid "" - "Do you want to delete your registered fingerprints so fingerprint login is " - "disabled?" - msgstr "登録済みの指紋情報を削除して指紋認証を無効にしますか?" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:443 -+#: panels/user-accounts/um-fingerprint-dialog.c:440 - msgid "Done!" - msgstr "完了です!" - - #. translators: - #. * The variable is the name of the device, for example: - #. * "Could you not access "Digital Persona U.are.U 4000/4000B" device --#: ../panels/user-accounts/um-fingerprint-dialog.c:504 --#: ../panels/user-accounts/um-fingerprint-dialog.c:546 -+#: panels/user-accounts/um-fingerprint-dialog.c:501 -+#: panels/user-accounts/um-fingerprint-dialog.c:543 - #, c-format - msgid "Could not access “%s” device" - msgstr "“%s” というデバイスにアクセスできません" -@@ -6760,16 +6911,16 @@ msgstr "“%s” というデバイスにアクセスできません" - #. translators: - #. * The variable is the name of the device, for example: - #. * "Could you not access "Digital Persona U.are.U 4000/4000B" device --#: ../panels/user-accounts/um-fingerprint-dialog.c:587 -+#: panels/user-accounts/um-fingerprint-dialog.c:584 - #, c-format - msgid "Could not start finger capture on “%s” device" - msgstr "“%s” デバイスで指紋を読み取れませんでした" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:631 -+#: panels/user-accounts/um-fingerprint-dialog.c:628 - msgid "Could not access any fingerprint readers" - msgstr "指紋リーダーにアクセスできませんでした" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:632 -+#: panels/user-accounts/um-fingerprint-dialog.c:629 - msgid "Please contact your system administrator for help." - msgstr "システム管理者に連絡してください。" - -@@ -6778,28 +6929,26 @@ msgstr "システム管理者に連絡してください。" - #. * "To enable fingerprint login, you need to save one of your fingerprints, using the - #. * 'Digital Persona U.are.U 4000/4000B' device." - #. --#: ../panels/user-accounts/um-fingerprint-dialog.c:714 -+#: panels/user-accounts/um-fingerprint-dialog.c:711 - #, c-format - msgid "" - "To enable fingerprint login, you need to save one of your fingerprints, " - "using the “%s” device." --msgstr "" --"指紋認証を有効にするには、“%s” のデバイスを使って、指紋を登録する必要がありま" --"す。" -+msgstr "指紋認証を有効にするには、“%s” のデバイスを使って、指紋を登録する必要があります。" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:721 -+#: panels/user-accounts/um-fingerprint-dialog.c:718 - msgid "Selecting finger" - msgstr "指の選択" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:722 -+#: panels/user-accounts/um-fingerprint-dialog.c:719 - msgid "Enrolling fingerprints" - msgstr "指紋の登録" - --#: ../panels/user-accounts/um-history-dialog.c:70 -+#: panels/user-accounts/um-history-dialog.c:70 - msgid "This Week" - msgstr "今週" - --#: ../panels/user-accounts/um-history-dialog.c:73 -+#: panels/user-accounts/um-history-dialog.c:73 - msgid "Last Week" - msgstr "先週" - -@@ -6807,22 +6956,22 @@ msgstr "先週" - #. shown as the first day of a week on login history dialog. - #. Translators: This is a date format string in the style of "Feb 24", - #. shown as the last day of a week on login history dialog. --#: ../panels/user-accounts/um-history-dialog.c:79 --#: ../panels/user-accounts/um-history-dialog.c:83 -+#: panels/user-accounts/um-history-dialog.c:79 -+#: panels/user-accounts/um-history-dialog.c:83 - msgctxt "login history week label" - msgid "%b %e" - msgstr "%m月%d日" - - #. Translators: This is a date format string in the style of "Feb 24, 2013", - #. shown as the last day of a week on login history dialog. --#: ../panels/user-accounts/um-history-dialog.c:88 -+#: panels/user-accounts/um-history-dialog.c:88 - msgctxt "login history week label" - msgid "%b %e, %Y" - msgstr "%Y年%m月%d日" - - #. Translators: This indicates a week label on a login history. - #. The first %s is the first day of a week, and the second %s the last day. --#: ../panels/user-accounts/um-history-dialog.c:93 -+#: panels/user-accounts/um-history-dialog.c:93 - #, c-format - msgctxt "login history week label" - msgid "%s — %s" -@@ -6830,596 +6979,660 @@ 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:776 -+#: panels/user-accounts/um-history-dialog.c:177 -+#: panels/user-accounts/um-user-panel.c:766 - msgctxt "login date-time" - msgid "%k:%M" - msgstr "%H:%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:780 -+#: panels/user-accounts/um-history-dialog.c:180 -+#: panels/user-accounts/um-user-panel.c:770 - #, c-format - msgctxt "login date-time" - msgid "%s, %s" - msgstr "%s %s" - --#: ../panels/user-accounts/um-history-dialog.c:250 -+#: panels/user-accounts/um-history-dialog.c:250 - msgid "Session Ended" - msgstr "セッション終了" - --#: ../panels/user-accounts/um-history-dialog.c:256 -+#: panels/user-accounts/um-history-dialog.c:256 - msgid "Session Started" - msgstr "セッション開始" - - #. Translators: This is the title of the "Account Activity" dialog. - #. The %s is the user real name. --#: ../panels/user-accounts/um-history-dialog.c:299 -+#: panels/user-accounts/um-history-dialog.c:299 - #, c-format - msgid "%s — Account Activity" - msgstr "%s — アカウントのアクティビティ" - --#: ../panels/user-accounts/um-password-dialog.c:144 -+#: panels/user-accounts/um-password-dialog.c:144 - msgid "Please choose another password." - msgstr "別のパスワードを選択してください。" - --#: ../panels/user-accounts/um-password-dialog.c:153 -+#: panels/user-accounts/um-password-dialog.c:153 - msgid "Please type your current password again." - msgstr "現在のパスワードを再度入力してください。" - --#: ../panels/user-accounts/um-password-dialog.c:159 -+#: panels/user-accounts/um-password-dialog.c:159 - msgid "Password could not be changed" - msgstr "パスワードが変更できません" - --#: ../panels/user-accounts/um-password-dialog.c:285 -+#: panels/user-accounts/um-password-dialog.c:285 - msgid "The passwords do not match." - msgstr "パスワードが一致しません。" - --#: ../panels/user-accounts/um-photo-dialog.c:218 -+#: panels/user-accounts/um-photo-dialog.c:227 - msgid "Browse for more pictures" - msgstr "他の画像も参照" - --#: ../panels/user-accounts/um-photo-dialog.c:452 --msgid "Disable image" --msgstr "画像を無効にする" -- --#: ../panels/user-accounts/um-photo-dialog.c:470 --msgid "Take a photo…" --msgstr "写真を撮る…" -- --#: ../panels/user-accounts/um-photo-dialog.c:488 --msgid "Browse for more pictures…" --msgstr "他の画像も参照…" -- --#: ../panels/user-accounts/um-photo-dialog.c:714 --#, c-format --msgid "Used by %s" --msgstr "%s に使用されています" -- --#: ../panels/user-accounts/um-realm-manager.c:350 -+#: panels/user-accounts/um-realm-manager.c:350 - msgid "Cannot automatically join this type of domain" - msgstr "このタイプのドメインは自動で参加できません" - --#: ../panels/user-accounts/um-realm-manager.c:413 -+#: panels/user-accounts/um-realm-manager.c:413 - #, c-format - msgid "No such domain or realm found" - msgstr "そのようなドメインやレルムは見つかりませんでした" - --#: ../panels/user-accounts/um-realm-manager.c:815 --#: ../panels/user-accounts/um-realm-manager.c:829 -+#: panels/user-accounts/um-realm-manager.c:815 -+#: panels/user-accounts/um-realm-manager.c:829 - #, c-format - msgid "Cannot log in as %s at the %s domain" - msgstr "%2$s ドメインに %1$s としてログインできません" - --#: ../panels/user-accounts/um-realm-manager.c:821 -+#: panels/user-accounts/um-realm-manager.c:821 - msgid "Invalid password, please try again" - msgstr "無効なパスワードです、やり直してください" - --#: ../panels/user-accounts/um-realm-manager.c:834 -+#: panels/user-accounts/um-realm-manager.c:834 - #, c-format - msgid "Couldn’t connect to the %s domain: %s" - msgstr "%sドメインに接続できませんでした: %s" - --#: ../panels/user-accounts/um-user-panel.c:195 -+#: panels/user-accounts/um-user-panel.c:200 - msgid "Your account" - msgstr "あなたのアカウント" - --#: ../panels/user-accounts/um-user-panel.c:390 -+#: panels/user-accounts/um-user-panel.c:380 - msgid "Failed to delete user" - msgstr "ユーザーの削除に失敗しました" - --#: ../panels/user-accounts/um-user-panel.c:448 --#: ../panels/user-accounts/um-user-panel.c:507 --#: ../panels/user-accounts/um-user-panel.c:559 -+#: 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 "リモート管理ユーザーの削除に失敗しました" - --#: ../panels/user-accounts/um-user-panel.c:613 -+#: panels/user-accounts/um-user-panel.c:603 - msgid "You cannot delete your own account." - msgstr "自分自身のアカウントは削除できません。" - --#: ../panels/user-accounts/um-user-panel.c:622 -+#: panels/user-accounts/um-user-panel.c:612 - #, c-format - msgid "%s is still logged in" - msgstr "%s はまだログインしています" - --#: ../panels/user-accounts/um-user-panel.c:626 -+#: 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." --msgstr "" --"ログイン中のユーザーを削除すると、システムが不整合な状態になることがありま" --"す。" -+msgstr "ログイン中のユーザーを削除すると、システムが不整合な状態になることがあります。" - --#: ../panels/user-accounts/um-user-panel.c:635 -+#: panels/user-accounts/um-user-panel.c:625 - #, c-format - msgid "Do you want to keep %s’s files?" - msgstr "%s のファイルを残しますか?" - --#: ../panels/user-accounts/um-user-panel.c:639 -+#: 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." --msgstr "" --"ユーザーアカウントを削除するときに、ユーザーのホームディレクトリ、メールス" --"プールおよび一時ファイルを残しておくことができます。" -+msgstr "ユーザーアカウントを削除するときに、ユーザーのホームディレクトリ、メールスプールおよび一時ファイルを残しておくことができます。" - --#: ../panels/user-accounts/um-user-panel.c:642 -+#: panels/user-accounts/um-user-panel.c:632 - msgid "_Delete Files" - msgstr "ファイルを削除(_D)" - --#: ../panels/user-accounts/um-user-panel.c:643 -+#: panels/user-accounts/um-user-panel.c:633 - msgid "_Keep Files" - msgstr "ファイルを残す(_K)" - --#: ../panels/user-accounts/um-user-panel.c:657 -+#: panels/user-accounts/um-user-panel.c:647 - #, c-format - msgid "Are you sure you want to revoke remotely managed %s’s account?" - msgstr "リモート管理の %s のアカウントを削除してもよろしいですか?" - --#: ../panels/user-accounts/um-user-panel.c:661 -+#: panels/user-accounts/um-user-panel.c:651 - msgid "_Delete" - msgstr "削除(_D)" - --#: ../panels/user-accounts/um-user-panel.c:711 -+#: panels/user-accounts/um-user-panel.c:701 - msgctxt "Password mode" - msgid "Account disabled" - msgstr "無効アカウント" - --#: ../panels/user-accounts/um-user-panel.c:719 -+#: panels/user-accounts/um-user-panel.c:709 - msgctxt "Password mode" - msgid "To be set at next login" - msgstr "次のログイン時に設定" - --#: ../panels/user-accounts/um-user-panel.c:722 -+#: panels/user-accounts/um-user-panel.c:712 - msgctxt "Password mode" - msgid "None" - msgstr "なし" - --#: ../panels/user-accounts/um-user-panel.c:769 -+#: panels/user-accounts/um-user-panel.c:759 - msgid "Logged in" - msgstr "ログイン中" - --#: ../panels/user-accounts/um-user-panel.c:1117 -+#: panels/user-accounts/um-user-panel.c:1106 - msgid "Failed to contact the accounts service" - msgstr "アカウントサービスの接続に失敗しました" - --#: ../panels/user-accounts/um-user-panel.c:1119 -+#: panels/user-accounts/um-user-panel.c:1108 - msgid "Please make sure that the AccountService is installed and enabled." --msgstr "" --"AccountService がインストールされ、有効になっているか確認してください。" -+msgstr "AccountService がインストールされ、有効になっているか確認してください。" - - #. Translator comments: - #. * 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:1155 -+#: panels/user-accounts/um-user-panel.c:1140 - msgid "" - "To make changes,\n" - "click the * icon first" --msgstr "変更するには、まず * アイコンをクリックしてください" -+msgstr "変更するには、\n" -+"まず * アイコンをクリックしてください" - --#: ../panels/user-accounts/um-user-panel.c:1195 -+#: panels/user-accounts/um-user-panel.c:1180 - msgid "Create a user account" - msgstr "ユーザーアカウントを作成します" - --#: ../panels/user-accounts/um-user-panel.c:1206 --#: ../panels/user-accounts/um-user-panel.c:1385 -+#: 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" --msgstr "" --"ユーザーアカウントを作成するには、\n" -+msgstr "ユーザーアカウントを作成するには、\n" - "まず * アイコンをクリックしてください" - --#: ../panels/user-accounts/um-user-panel.c:1216 -+#: panels/user-accounts/um-user-panel.c:1201 - msgid "Delete the selected user account" - msgstr "選択したユーザーアカウントを削除します" - --#: ../panels/user-accounts/um-user-panel.c:1228 --#: ../panels/user-accounts/um-user-panel.c:1390 -+#: 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" --msgstr "" --"選択したユーザーアカウントを削除するには、\n" -+msgstr "選択したユーザーアカウントを削除するには、\n" - "まず * アイコンをクリックしてください" - --#: ../panels/user-accounts/um-utils.c:507 -+#: panels/user-accounts/um-utils.c:496 - msgid "Sorry, that user name isn’t available. Please try another." --msgstr "" --"申し訳ありませんが、そのユーザー名は使用できません。 もう一度お試しください。" -+msgstr "申し訳ありませんが、そのユーザー名は使用できません。 もう一度お試しください。" - --#: ../panels/user-accounts/um-utils.c:510 -+#: panels/user-accounts/um-utils.c:499 - #, c-format - msgid "The username is too long." - msgstr "ユーザー名が長すぎます。" - --#: ../panels/user-accounts/um-utils.c:513 -+#: panels/user-accounts/um-utils.c:502 - msgid "The username cannot start with a “-”." - msgstr "ユーザー名の先頭文字に “-” は使えません。" - --#: ../panels/user-accounts/um-utils.c:516 -+#: panels/user-accounts/um-utils.c:505 - msgid "" - "The username should only consist of upper and lower case letters from a-z, " - "digits and the following characters: . - _" --msgstr "" --"ユーザー名には次の文字だけを使用してください。a から z の大文字・小文字、数" --"字、'.'、'-'、および '_'。" -+msgstr "ユーザー名には次の文字だけを使用してください。a から z の大文字・小文字、数字、'.'、'-'、および '_'。" - --#: ../panels/user-accounts/um-utils.c:520 -+#: panels/user-accounts/um-utils.c:509 - msgid "This will be used to name your home folder and can’t be changed." --msgstr "" --"ユーザー名はホームフォルダーの名前に使用されます。これは変更できません。" -+msgstr "ユーザー名はホームフォルダーの名前に使用されます。これは変更できません。" - --#: ../panels/wacom/button-mapping.ui.h:1 -+#: panels/wacom/button-mapping.ui:9 - msgid "Map Buttons" - msgstr "ボタン割り当て" - --#: ../panels/wacom/button-mapping.ui.h:2 ../panels/wacom/cc-wacom-page.c:547 --#: ../panels/wacom/gnome-wacom-properties.ui.h:5 -+#: panels/wacom/button-mapping.ui:37 panels/wacom/cc-wacom-page.c:547 -+#: panels/wacom/gnome-wacom-properties.ui:60 - msgid "_Close" - msgstr "閉じる(_C)" - --#: ../panels/wacom/button-mapping.ui.h:3 -+#: panels/wacom/button-mapping.ui:71 - msgid "Map buttons to functions" - msgstr "ボタンへ機能を割り当て" - --#: ../panels/wacom/button-mapping.ui.h:4 -+#: panels/wacom/button-mapping.ui:119 - msgid "" - "To edit a shortcut, choose the “Send Keystroke” action, press the keyboard " - "shortcut button and hold down the new keys or press Backspace to clear." --msgstr "" --"ショートカットを編集するには、“キー入力の送信”を選択し、キーボードショート" --"カットボタンを押して、新しいキー組み合わせを入力するか、[BS] キーで取り消して" --"ください。" -+msgstr "ショートカットを編集するには、“キー入力の送信”を選択し、キーボードショートカットボタンを押して、新しいキー組み合わせを入力するか、[BS] キーで取り消してください。" - --#: ../panels/wacom/calibrator/calibrator-gui.c:83 -+#: panels/wacom/calibrator/calibrator-gui.c:83 - msgid "" - "Please tap the target markers as they appear on screen to calibrate the " - "tablet." --msgstr "" --"タブレットの位置調整を行いますので、画面に出現するマーカーをタップしてくださ" --"い。" -+msgstr "タブレットの位置調整を行いますので、画面に出現するマーカーをタップしてください。" - --#: ../panels/wacom/calibrator/calibrator-gui.c:87 -+#: panels/wacom/calibrator/calibrator-gui.c:87 - msgid "Mis-click detected, restarting…" - msgstr "誤クリックを検出しました。再起動します..." - --#: ../panels/wacom/cc-wacom-button-row.c:266 -+#: panels/wacom/cc-wacom-button-row.c:266 - #, c-format - msgid "Button %d" - msgstr "ボタン %d" - --#: ../panels/wacom/cc-wacom-button-row.h:53 -+#: panels/wacom/cc-wacom-button-row.h:53 - msgctxt "Wacom action-type" - msgid "Application defined" - msgstr "アプリケーション定義" - --#: ../panels/wacom/cc-wacom-button-row.h:54 -+#: panels/wacom/cc-wacom-button-row.h:54 - msgctxt "Wacom action-type" - msgid "Send Keystroke" - msgstr "キー入力の送信" - --#: ../panels/wacom/cc-wacom-button-row.h:55 -+#: panels/wacom/cc-wacom-button-row.h:55 - msgctxt "Wacom action-type" - msgid "Switch Monitor" - msgstr "モニターの切り替え" - --#: ../panels/wacom/cc-wacom-button-row.h:56 -+#: panels/wacom/cc-wacom-button-row.h:56 - msgctxt "Wacom action-type" - msgid "Show On-Screen Help" - msgstr "オンスクリーンヘルプの表示" - --#: ../panels/wacom/cc-wacom-mapping-panel.c:260 -+#: panels/wacom/cc-wacom-mapping-panel.c:260 - msgid "Output:" - msgstr "出力:" - - #. Keep ratio switch --#: ../panels/wacom/cc-wacom-mapping-panel.c:272 -+#: panels/wacom/cc-wacom-mapping-panel.c:272 - msgid "Keep aspect ratio (letterbox):" - msgstr "縦横比を保持 (レターボックス):" - - # 参考: intuos 5 のマニュアル p.57 - #. Whole-desktop checkbox --#: ../panels/wacom/cc-wacom-mapping-panel.c:283 -+#: panels/wacom/cc-wacom-mapping-panel.c:283 - msgid "Map to single monitor" - msgstr "単一画面にマッピング" - --#: ../panels/wacom/cc-wacom-nav-button.c:86 -+#: panels/wacom/cc-wacom-nav-button.c:86 - #, c-format - msgid "%d of %d" - msgstr "%d / %d" - --#: ../panels/wacom/cc-wacom-page.c:544 -+#: panels/wacom/cc-wacom-page.c:544 - msgid "Display Mapping" - msgstr "画面のマッピング" - --#: ../panels/wacom/cc-wacom-panel.c:790 --#: ../panels/wacom/wacom-stylus-page.ui.h:9 -+#: panels/wacom/cc-wacom-panel.c:834 panels/wacom/wacom-stylus-page.ui:127 - msgid "Stylus" - msgstr "ペン" - --#: ../panels/wacom/cc-wacom-stylus-page.c:347 -+#: panels/wacom/cc-wacom-stylus-page.c:362 - msgid "Button" - msgstr "ボタン" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/wacom/gnome-wacom-panel.desktop.in.in.h:2 --msgid "Wa­com Tab­let" -+#: panels/wacom/gnome-wacom-panel.desktop.in.in:3 -+#: panels/wacom/gnome-wacom-properties.ui:198 -+msgid "Wacom Tablet" - msgstr "ワコムタブレット" - --#: ../panels/wacom/gnome-wacom-panel.desktop.in.in.h:3 -+#: panels/wacom/gnome-wacom-panel.desktop.in.in:4 - msgid "Set button mappings and adjust stylus sensitivity for graphics tablets" --msgstr "" --"グラフィックスタブレットのボタン割り当てやスタイラスの感度の設定をします。" -+msgstr "グラフィックスタブレットのボタン割り当てやスタイラスの感度の設定をします。" - --#. Translators: those are keywords for the wacom tablet control-center panel --#: ../panels/wacom/gnome-wacom-panel.desktop.in.in.h:5 -+#. 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: 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;Stylus;Eraser;Mouse;タブレット;スタイラスペン;ペン;消しゴム;マウ" --"ス;" -+msgstr "Tablet;Wacom;Stylus;Eraser;Mouse;タブレット;スタイラスペン;ペン;消しゴム;マウス;" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:1 -+#: panels/wacom/gnome-wacom-properties.ui:15 - msgid "Tablet (absolute)" - msgstr "タブレット(絶対座標)" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:2 -+#: panels/wacom/gnome-wacom-properties.ui:19 - msgid "Touchpad (relative)" - msgstr "タッチパッド(相対座標)" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:3 -+#: panels/wacom/gnome-wacom-properties.ui:27 - msgid "Tablet Preferences" - msgstr "タブレット設定" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:4 -+#: panels/wacom/gnome-wacom-properties.ui:44 - msgid "_Help" - msgstr "ヘルプ(_H)" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:6 -+#: panels/wacom/gnome-wacom-properties.ui:123 - msgid "No tablet detected" - msgstr "タブレットを検出できません" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:7 -+#: panels/wacom/gnome-wacom-properties.ui:139 - msgid "Please plug in or turn on your Wacom tablet" - msgstr "ワコムタブレットを接続するか、電源を入れてください" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:8 -+#: panels/wacom/gnome-wacom-properties.ui:159 - msgid "Bluetooth Settings" - msgstr "Bluetooth の設定" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:9 --msgid "Wacom Tablet" --msgstr "ワコムタブレット" -- - # 参考: intuos 5 のマニュアル p.57 --#: ../panels/wacom/gnome-wacom-properties.ui.h:10 -+#: panels/wacom/gnome-wacom-properties.ui:231 - msgid "Map to Monitor…" - msgstr "画面にマッピング…" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:11 -+#: panels/wacom/gnome-wacom-properties.ui:247 - msgid "Map Buttons…" - msgstr "ボタン割り当て…" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:12 -+#: panels/wacom/gnome-wacom-properties.ui:263 - msgid "Calibrate…" - msgstr "キャリブレート…" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:13 -+#: panels/wacom/gnome-wacom-properties.ui:284 - msgid "Adjust display resolution" - msgstr "ディスプレイの解像度を調整" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:14 -+#: panels/wacom/gnome-wacom-properties.ui:300 - msgid "Adjust mouse settings" - msgstr "マウス設定の調整" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:15 -+#: panels/wacom/gnome-wacom-properties.ui:328 - msgid "Tracking Mode" - msgstr "検出モード" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:16 -+#: panels/wacom/gnome-wacom-properties.ui:356 - msgid "Left-Handed Orientation" - msgstr "左手用" - --#: ../panels/wacom/gsd-wacom-key-shortcut-button.c:263 -+#: panels/wacom/gsd-wacom-key-shortcut-button.c:263 - msgid "New shortcut…" - msgstr "新しいショートカット…" - --#: ../panels/wacom/wacom-stylus-page.ui.h:2 -+#: panels/wacom/wacom-stylus-page.ui:29 - msgid "Middle Mouse Button Click" - msgstr "マウスの中ボタンクリック" - --#: ../panels/wacom/wacom-stylus-page.ui.h:3 -+#: panels/wacom/wacom-stylus-page.ui:33 - msgid "Right Mouse Button Click" - msgstr "マウスの右ボタンクリック" - --#: ../panels/wacom/wacom-stylus-page.ui.h:4 -+#: panels/wacom/wacom-stylus-page.ui:37 - msgid "Back" - msgstr "戻る" - --#: ../panels/wacom/wacom-stylus-page.ui.h:5 -+#: panels/wacom/wacom-stylus-page.ui:41 - msgid "Forward" - msgstr "進む" - --#: ../panels/wacom/wacom-stylus-page.ui.h:6 -+#: panels/wacom/wacom-stylus-page.ui:77 - msgid "No stylus found" - msgstr "スタイラスペンが見つかりません" - --#: ../panels/wacom/wacom-stylus-page.ui.h:7 -+#: panels/wacom/wacom-stylus-page.ui:91 - msgid "Please move your stylus to the proximity of the tablet to configure it" - msgstr "スタイラスペンをタブレットの近くに移動して設定を行ってください" - --#: ../panels/wacom/wacom-stylus-page.ui.h:10 -+#: panels/wacom/wacom-stylus-page.ui:167 - msgid "Eraser Pressure Feel" - msgstr "消しゴムの感触" - --#: ../panels/wacom/wacom-stylus-page.ui.h:11 -+#: panels/wacom/wacom-stylus-page.ui:188 panels/wacom/wacom-stylus-page.ui:348 - msgid "Soft" - msgstr "柔らかい" - --#: ../panels/wacom/wacom-stylus-page.ui.h:12 -+#: panels/wacom/wacom-stylus-page.ui:218 panels/wacom/wacom-stylus-page.ui:378 - msgid "Firm" - msgstr "硬い" - --#: ../panels/wacom/wacom-stylus-page.ui.h:13 -+#: panels/wacom/wacom-stylus-page.ui:241 - msgid "Top Button" - msgstr "上のサイドスイッチ" - --#: ../panels/wacom/wacom-stylus-page.ui.h:14 -+#: panels/wacom/wacom-stylus-page.ui:270 - msgid "Lower Button" - msgstr "下のサイドスイッチ" - --#: ../panels/wacom/wacom-stylus-page.ui.h:15 -+#: panels/wacom/wacom-stylus-page.ui:299 -+msgid "Lowest Button" -+msgstr "下のサイドスイッチ" -+ -+#: panels/wacom/wacom-stylus-page.ui:328 - msgid "Tip Pressure Feel" - msgstr "ペン先の感触" - --#: ../panels/wacom/wacom-stylus-page.ui.h:17 -+#: panels/wacom/wacom-stylus-page.ui:440 - msgid "page 3" - msgstr "ページ3" - --#: ../shell/alt/cc-window.c:53 ../shell/alt/cc-window.c:1484 --#: ../shell/cc-window.c:730 --msgid "All Settings" --msgstr "すべての設定" -- --#. Add categories --#: ../shell/alt/cc-window.c:875 --msgctxt "category" --msgid "Personal" --msgstr "パーソナル" -- --#: ../shell/alt/cc-window.c:876 --msgctxt "category" --msgid "Hardware" --msgstr "ハードウェア" -- --#: ../shell/alt/cc-window.c:877 --msgctxt "category" --msgid "System" --msgstr "システム" -- --#: ../shell/appdata/gnome-control-center.appdata.xml.in.h:1 -+#: shell/appdata/gnome-control-center.appdata.xml.in:7 - msgid "GNOME Control Center" - msgstr "GNOME コントロールセンター" - --#: ../shell/appdata/gnome-control-center.appdata.xml.in.h:2 -+#: shell/appdata/gnome-control-center.appdata.xml.in:8 - msgid "Utilities to configure the GNOME desktop" - msgstr "GNOME デスクトップの設定ユーティリティー" - --#: ../shell/appdata/gnome-control-center.appdata.xml.in.h:3 -+#: shell/appdata/gnome-control-center.appdata.xml.in:10 - msgid "" - "The control center is GNOME’s main interface for configuration of various " - "aspects of your desktop." --msgstr "" --"コントロールセンターは、デスクトップの各種設定を行う GNOME のメインインター" --"フェースです。" -+msgstr "コントロールセンターは、デスクトップの各種設定を行う GNOME のメインインターフェースです。" - --#: ../shell/cc-application.c:45 -+#: shell/cc-application.c:47 - msgid "Display version number" - msgstr "バージョン番号を表示する" - --#: ../shell/cc-application.c:46 -+#: shell/cc-application.c:48 - msgid "Enable verbose mode" - msgstr "冗長モードを有効にする" - --#: ../shell/cc-application.c:47 -+#: shell/cc-application.c:49 - msgid "Show the overview" - msgstr "全体を表示する" - --#: ../shell/cc-application.c:48 -+#: shell/cc-application.c:50 - msgid "Search for the string" - msgstr "キーワードで検索する" - --#: ../shell/cc-application.c:49 -+#: shell/cc-application.c:51 - msgid "List possible panel names and exit" - msgstr "利用可能なパネル名をリスト表示して終了する" - --#: ../shell/cc-application.c:50 -+#: shell/cc-application.c:52 - msgid "Panel to display" - msgstr "表示するパネル" - --#: ../shell/cc-application.c:50 -+#: shell/cc-application.c:52 - msgid "[PANEL] [ARGUMENT…]" - msgstr "[PANEL] [ARGUMENT…]" - --#: ../shell/cc-application.c:113 -+#: shell/cc-application.c:117 - msgid "Available panels:" - msgstr "利用可能なパネル:" - --#: ../shell/cc-application.c:252 -+#: shell/cc-application.c:256 - msgid "Help" - msgstr "ヘルプ" - --#: ../shell/cc-application.c:253 -+#: shell/cc-application.c:257 - msgid "Quit" - msgstr "終了" - --#: ../shell/gnome-control-center.desktop.in.in.h:2 -+#. 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" -+ -+#. 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 "Preferences;Settings;設定;" - --#: ../shell/help-overlay.ui.h:1 -+#: shell/help-overlay.ui:15 - msgctxt "shortcut window" - msgid "General" - msgstr "全般" - --#: ../shell/help-overlay.ui.h:2 -+#: shell/help-overlay.ui:20 - msgctxt "shortcut window" - msgid "Quit" - msgstr "終了" - --#: ../shell/help-overlay.ui.h:3 -+#: shell/help-overlay.ui:27 shell/help-overlay.ui:48 - msgctxt "shortcut window" - msgid "Search" - msgstr "検索" - --#: ../shell/help-overlay.ui.h:4 -+#: shell/help-overlay.ui:35 - msgctxt "shortcut window" - msgid "Panels" - msgstr "パネル" - --#: ../shell/help-overlay.ui.h:5 -+#: shell/help-overlay.ui:40 - msgctxt "shortcut window" - msgid "Go back to the overview" - msgstr "一覧画面に戻る" - --#: ../shell/help-overlay.ui.h:6 -+#: shell/help-overlay.ui:53 - msgctxt "shortcut window" - msgid "Cancel search" - msgstr "検索をキャンセルする" - - #. translators: This is the default hotspot name, need to be less than 32-bytes --#: ../shell/hostname-helper.c:189 -+#: shell/hostname-helper.c:189 - msgctxt "hotspot" - msgid "Hotspot" - msgstr "ホットスポット" - --#: ../shell/panel-list.ui.h:3 -+#: shell/org.gnome.ControlCenter.gschema.xml:5 -+msgid "The identifier for the last Settings panel to be opened" -+msgstr "最後に開く設定パネルの識別子" -+ -+#: shell/org.gnome.ControlCenter.gschema.xml:6 -+msgid "" -+"The identifier for the last Settings panel to be opened. Unrecognised values " -+"will be ignored and the first panel in the list selected." -+msgstr "最後に開く設定パネルの識別子。認識されていない値は無視され、リストの最初のパネルが選択されます。" -+ -+#: shell/panel-list.ui:195 - msgid "No results found" - msgstr "結果がありません" - -+#: shell/window.ui:141 -+msgid "All Settings" -+msgstr "すべての設定" -+ -+#. translators: -+#. * The number of sound outputs on a particular device -+#: subprojects/gvc/gvc-mixer-control.c:1873 -+#, c-format -+msgid "%u Output" -+msgid_plural "%u Outputs" -+msgstr[0] "%u 出力" -+ -+#. translators: -+#. * The number of sound inputs on a particular device -+#: subprojects/gvc/gvc-mixer-control.c:1883 -+#, c-format -+msgid "%u Input" -+msgid_plural "%u Inputs" -+msgstr[0] "%u 入力" -+ -+#: subprojects/gvc/gvc-mixer-control.c:2738 -+msgid "System Sounds" -+msgstr "システムのサウンド" -+ -+#~ msgid "Back­ground" -+#~ msgstr "背景" -+ -+#~ msgid "Blue­tooth" -+#~ msgstr "Blue­tooth" -+ -+#~ msgid "Co­lor" -+#~ msgstr "色管理" -+ -+#~ msgid "Section" -+#~ msgstr "セクション" -+ -+#~ msgid "Overview" -+#~ msgstr "概要" -+ -+#~ msgid "Defa­ult Applications" -+#~ msgstr "既定のアプリケーション" -+ -+#~ msgid "Ab­out" -+#~ msgstr "情報" -+ -+#~ msgid "De­tails" -+#~ msgstr "詳細" -+ -+#~ msgid "Remo­vable Media" -+#~ msgstr "リムーバブルメディア" -+ -+#~ msgid "OS name" -+#~ msgstr "OS 名" -+ -+#~ msgid "Check for updates" -+#~ msgstr "更新の確認" -+ -+#~ msgid "Net­work" -+#~ msgstr "ネットワーク" -+ -+#~ msgid "invalid EAP-TLS password: missing" -+#~ msgstr "無効なEAP-TLSパスワード: 見つかりません" -+ -+#~ msgid "No­ti­fi­ca­tions" -+#~ msgstr "通知" -+ -+#~ msgid "Po­wer" -+#~ msgstr "電源管理" -+ -+#~ msgid "Pri­va­cy" -+#~ msgstr "プライバシー" -+ -+#~ msgid "Sha­ring" -+#~ msgstr "共有" -+ -+#~ msgid "Uni­ver­sal Access" -+#~ msgstr "ユニバーサルアクセス" -+ -+#~ msgid "Disable image" -+#~ msgstr "画像を無効にする" -+ -+#~ msgid "Browse for more pictures…" -+#~ msgstr "他の画像も参照…" -+ -+#~ msgid "Used by %s" -+#~ msgstr "%s に使用されています" -+ -+#~ msgid "Wa­com Tab­let" -+#~ msgstr "ワコムタブレット" -+ -+#~ msgctxt "category" -+#~ msgid "Personal" -+#~ msgstr "パーソナル" -+ -+#~ msgctxt "category" -+#~ msgid "Hardware" -+#~ msgstr "ハードウェア" -+ -+#~ msgctxt "category" -+#~ msgid "System" -+#~ msgstr "システム" -+ - #~ msgid "Lid Closed" - #~ msgstr "蓋が閉じています" - -@@ -7519,9 +7732,6 @@ msgstr "結果がありません" - #~ msgid "VPN Type" - #~ msgstr "VPN の種類" - --#~ msgid "Group Name" --#~ msgstr "グループ名" -- - #~ msgid "Group Password" - #~ msgstr "グループのパスワード" - -@@ -7625,9 +7835,6 @@ msgstr "結果がありません" - #~ msgid "Your account" - #~ msgstr "あなたのアカウント" - --#~ msgid "Color" --#~ msgstr "色" -- - #~ msgid "Wayland" - #~ msgstr "Wayland" - -@@ -7756,9 +7963,6 @@ msgstr "結果がありません" - #~ msgid "Notification _Banners" - #~ msgstr "通知バナー(_B)" - --#~ msgid "Add Account" --#~ msgstr "アカウントの追加" -- - #~ msgid "Mail" - #~ msgstr "メール" - -@@ -7820,12 +8024,6 @@ msgstr "結果がありません" - #~ msgid "Add a New Printer" - #~ msgstr "新しいプリンターの追加" - --#~ msgid "A_uthenticate" --#~ msgstr "認証(_U)" -- --#~ msgid "No printers detected." --#~ msgstr "プリンターを検出できません" -- - #~ msgid "Supply" - #~ msgstr "サプライ" - -@@ -7847,9 +8045,6 @@ msgstr "結果がありません" - #~ msgid "Print _Test Page" - #~ msgstr "テストページを印刷(_T)" - --#~ msgid "Privacy" --#~ msgstr "プライバシー" -- - #~ msgctxt "Search Location" - #~ msgid "Other" - #~ msgstr "その他" -@@ -7964,5 +8159,3 @@ msgstr "結果がありません" - #~ msgid "Scroll Right" - #~ msgstr "右にスクロール" - --#~ 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 -+++ b/po/zh_CN.po -@@ -30,9 +30,8 @@ - msgid "" - msgstr "" - "Project-Id-Version: gnome-control-center 3.22\n" --"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" --"control-center&keywords=I18N+L10N&component=general\n" --"POT-Creation-Date: 2016-10-27 16:38+0000\n" -+"Report-Msgid-Bugs-To: \n" -+"POT-Creation-Date: 2021-02-12 14:19+0100\n" - "PO-Revision-Date: 2016-10-30 20:32+0800\n" - "Last-Translator: Dingzhong Chen \n" - "Language-Team: Chinese (China) \n" -@@ -43,378 +42,386 @@ msgstr "" - "Plural-Forms: nplurals=1; plural=0;\n" - "X-Generator: Poedit 1.8.11\n" - --#: ../panels/background/background.ui.h:1 -+#: panels/background/background.ui:49 - msgid "_Background" --msgstr "背景(_B)" -+msgstr "(_B)背景" - - #. This refers to a slideshow background --#: ../panels/background/background.ui.h:3 -+#: panels/background/background.ui:99 panels/background/background.ui:212 - msgid "Changes throughout the day" - msgstr "在一天内按时切换" - - #. To translators: This is a noun, not a verb --#: ../panels/background/background.ui.h:5 -+#: panels/background/background.ui:162 - msgid "_Lock Screen" --msgstr "锁定屏幕(_L)" -+msgstr "(_L)锁定屏幕" - --#: ../panels/background/background.ui.h:6 -+#: panels/background/background.ui:268 - msgctxt "background, style" - msgid "Tile" - msgstr "平铺" - --#: ../panels/background/background.ui.h:7 -+#: panels/background/background.ui:272 - msgctxt "background, style" - msgid "Zoom" - msgstr "缩放" - --#: ../panels/background/background.ui.h:8 -+#: panels/background/background.ui:276 - msgctxt "background, style" - msgid "Center" - msgstr "居中" - --#: ../panels/background/background.ui.h:9 -+#: panels/background/background.ui:280 - msgctxt "background, style" - msgid "Scale" - msgstr "比例放大" - --#: ../panels/background/background.ui.h:10 -+#: panels/background/background.ui:284 - msgctxt "background, style" - msgid "Fill" - msgstr "填充" - --#: ../panels/background/background.ui.h:11 -+#: panels/background/background.ui:288 - msgctxt "background, style" - msgid "Span" - msgstr "适合宽度" - --#: ../panels/background/cc-background-chooser-dialog.c:437 -+#: panels/background/cc-background-chooser-dialog.c:424 - msgid "Wallpapers" - msgstr "壁纸" - --#: ../panels/background/cc-background-chooser-dialog.c:446 -+#: panels/background/cc-background-chooser-dialog.c:433 - msgid "Colors" - msgstr "色彩" - - #. translators: This is the title of the wallpaper chooser dialog. --#: ../panels/background/cc-background-chooser-dialog.c:483 -+#: panels/background/cc-background-chooser-dialog.c:468 - msgid "Select Background" - msgstr "选择背景" - --#: ../panels/background/cc-background-chooser-dialog.c:511 -+#: panels/background/cc-background-chooser-dialog.c:496 - msgid "Pictures" - msgstr "图片" - - #. translators: No pictures were found --#: ../panels/background/cc-background-chooser-dialog.c:543 -+#: panels/background/cc-background-chooser-dialog.c:528 - msgid "No Pictures Found" - msgstr "无图片" - - #. translators: "Home" is used in place of the Pictures - #. * directory in the string below when XDG_PICTURES_DIR is - #. * undefined --#: ../panels/background/cc-background-chooser-dialog.c:561 --#: ../panels/search/cc-search-locations-dialog.c:302 -+#: panels/background/cc-background-chooser-dialog.c:545 -+#: panels/search/cc-search-locations-dialog.c:302 - msgid "Home" - msgstr "主目录" - - #. translators: %s here is the name of the Pictures directory, the string should be translated in - #. * the context "You can add images to your Pictures folder and they will show up here" --#: ../panels/background/cc-background-chooser-dialog.c:573 -+#: panels/background/cc-background-chooser-dialog.c:555 - #, c-format - msgid "You can add images to your %s folder and they will show up here" - msgstr "您添加到 %s 文件夹的图片将在此显示" - --#: ../panels/background/cc-background-chooser-dialog.c:580 --#: ../panels/color/cc-color-panel.c:225 ../panels/color/cc-color-panel.c:963 --#: ../panels/color/color-calibrate.ui.h:2 ../panels/color/color.ui.h:30 --#: ../panels/common/language-chooser.ui.h:3 --#: ../panels/display/cc-display-panel.c:1561 --#: ../panels/display/cc-display-panel.c:2207 --#: ../panels/network/connection-editor/connection-editor.ui.h:1 --#: ../panels/network/connection-editor/vpn-helpers.c:181 --#: ../panels/network/connection-editor/vpn-helpers.c:310 --#: ../panels/network/net-device-wifi.c:1298 --#: ../panels/network/net-device-wifi.c:1535 --#: ../panels/network/network-wifi.ui.h:1 --#: ../panels/printers/cc-printers-panel.c:2077 --#: ../panels/printers/new-printer-dialog.ui.h:2 --#: ../panels/privacy/cc-privacy-panel.c:1048 --#: ../panels/region/format-chooser.ui.h:3 ../panels/region/input-chooser.ui.h:2 --#: ../panels/search/cc-search-locations-dialog.c:637 --#: ../panels/sharing/cc-sharing-panel.c:372 --#: ../panels/user-accounts/data/account-dialog.ui.h:2 --#: ../panels/user-accounts/data/join-dialog.ui.h:2 --#: ../panels/user-accounts/data/password-dialog.ui.h:2 --#: ../panels/user-accounts/um-fingerprint-dialog.c:265 --#: ../panels/user-accounts/um-photo-dialog.c:94 --#: ../panels/user-accounts/um-photo-dialog.c:217 --#: ../panels/user-accounts/um-user-panel.c:705 --#: ../panels/user-accounts/um-user-panel.c:723 -+#: 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: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: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: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: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 "取消(_C)" -+msgstr "(_C)取消" - --#: ../panels/background/cc-background-chooser-dialog.c:581 -+#: panels/background/cc-background-chooser-dialog.c:561 - msgid "_Select" --msgstr "选择(_S)" -+msgstr "(_S)选择" - --#: ../panels/background/cc-background-item.c:203 -+#: panels/background/cc-background-item.c:192 - msgid "multiple sizes" - msgstr "多个尺寸" - - #. translators: 100 × 100px - #. * Note that this is not an "x", but U+00D7 MULTIPLICATION SIGN --#: ../panels/background/cc-background-item.c:207 -+#: panels/background/cc-background-item.c:196 - #, c-format - msgid "%d × %d" - msgstr "%d × %d" - --#: ../panels/background/cc-background-item.c:333 -+#: panels/background/cc-background-item.c:321 - msgid "No Desktop Background" - msgstr "无桌面背景" - --#: ../panels/background/cc-background-panel.c:493 -+#: panels/background/cc-background-panel.c:291 - msgid "Current background" - msgstr "当前背景" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/background/gnome-background-panel.desktop.in.in.h:2 --msgid "Back­ground" -+#: panels/background/gnome-background-panel.desktop.in.in:3 -+msgid "Background" - msgstr "背景" - --#: ../panels/background/gnome-background-panel.desktop.in.in.h:3 -+#: panels/background/gnome-background-panel.desktop.in.in:4 - msgid "Change your background image to a wallpaper or photo" - msgstr "将背景图片改为一张壁纸或照片" - --#. Translators: those are keywords for the background control-center panel --#: ../panels/background/gnome-background-panel.desktop.in.in.h:5 -+#. 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: 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 "Wallpaper;Screen;Desktop;壁纸;墙纸;屏幕;桌面;背景;" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:264 -+#: panels/bluetooth/cc-bluetooth-panel.c:265 - msgid "Turn Off Airplane Mode" - msgstr "关闭飞行模式" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:330 -+#: panels/bluetooth/cc-bluetooth-panel.c:330 - msgid "No Bluetooth Found" - msgstr "未找到蓝牙" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:330 -+#: panels/bluetooth/cc-bluetooth-panel.c:330 - msgid "Plug in a dongle to use Bluetooth." - msgstr "插入蓝牙适配器以使用蓝牙。" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:331 -+#: panels/bluetooth/cc-bluetooth-panel.c:331 - msgid "Bluetooth Turned Off" - msgstr "蓝牙已经关闭" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:331 -+#: panels/bluetooth/cc-bluetooth-panel.c:331 - msgid "Turn on to connect devices and receive file transfers." - msgstr "打开以连接设备和接收文件传送。" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:332 -+#: panels/bluetooth/cc-bluetooth-panel.c:332 - msgid "Airplane Mode is on" - msgstr "飞行模式已打开" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:332 -+#: panels/bluetooth/cc-bluetooth-panel.c:332 - msgid "Bluetooth is disabled when airplane mode is on." - msgstr "蓝牙已禁用当开启飞行模式时。" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:333 -+#: panels/bluetooth/cc-bluetooth-panel.c:333 - msgid "Hardware Airplane Mode is on" - msgstr "硬件飞行模式已打开" - --#: ../panels/bluetooth/cc-bluetooth-panel.c:333 -+#: panels/bluetooth/cc-bluetooth-panel.c:333 - msgid "Turn off the Airplane mode switch to enable Bluetooth." - msgstr "关闭飞行模式开关以开启蓝牙。" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/bluetooth/gnome-bluetooth-panel.desktop.in.in.h:2 --msgid "Blue­tooth" -+#. Translators: The found device is a printer connected via Bluetooth -+#: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:3 -+#: panels/printers/pp-new-printer-dialog.c:1816 -+msgid "Bluetooth" - msgstr "蓝牙" - --#: ../panels/bluetooth/gnome-bluetooth-panel.desktop.in.in.h:3 -+#: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "开关蓝牙及连接您的设备" - --#. Translators: those are keywords for the bluetooth control-center panel --#: ../panels/bluetooth/gnome-bluetooth-panel.desktop.in.in.h: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 "蓝牙" -+ -+#. 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 "share;sharing;bluetooth;obex;分享;共享;蓝牙;" - - #. TRANSLATORS: The user has to attach the sensor to the screen --#: ../panels/color/cc-color-calibrate.c:361 --msgid "Place your calibration device over the square and press 'Start'" -+#: panels/color/cc-color-calibrate.c:361 -+msgid "Place your calibration device over the square and press “Start”" - msgstr "将您的校准设备放在方块上并按“开始”" - - #. TRANSLATORS: Some calibration devices need the user to move a - #. * dial or switch manually. We also show a picture showing them - #. * what to do... --#: ../panels/color/cc-color-calibrate.c:367 -+#: panels/color/cc-color-calibrate.c:367 - msgid "" --"Move your calibration device to the calibrate position and press 'Continue'" -+"Move your calibration device to the calibrate position and press “Continue”" - msgstr "将您的校准器移动到校准位置并按“继续”" - - #. TRANSLATORS: Some calibration devices need the user to move a - #. * dial or switch manually. We also show a picture showing them - #. * what to do... --#: ../panels/color/cc-color-calibrate.c:373 -+#: panels/color/cc-color-calibrate.c:373 - msgid "" --"Move your calibration device to the surface position and press 'Continue'" -+"Move your calibration device to the surface position and press “Continue”" - msgstr "将您的校准器移动到表面位置并按“继续”" - - #. TRANSLATORS: on some hardware e.g. Lenovo W700 the sensor - #. * is built into the palmrest and we need to fullscreen the - #. * sample widget and shut the lid. --#: ../panels/color/cc-color-calibrate.c:379 -+#: panels/color/cc-color-calibrate.c:379 - msgid "Shut the laptop lid" - msgstr "合上笔记本盖子" - - #. TRANSLATORS: We suck, the calibation failed and we have no - #. * good idea why or any suggestions --#: ../panels/color/cc-color-calibrate.c:410 -+#: panels/color/cc-color-calibrate.c:410 - msgid "An internal error occurred that could not be recovered." - msgstr "发生了一个无法恢复的内部错误。" - - #. TRANSLATORS: Some required-at-runtime tools were not - #. * installed, which should only affect insane distros --#: ../panels/color/cc-color-calibrate.c:415 -+#: panels/color/cc-color-calibrate.c:415 - msgid "Tools required for calibration are not installed." - msgstr "未安装校准所需的工具。" - - #. TRANSLATORS: The profile failed for some reason --#: ../panels/color/cc-color-calibrate.c:421 -+#: panels/color/cc-color-calibrate.c:421 - msgid "The profile could not be generated." - msgstr "无法生成配置。" - - #. TRANSLATORS: The user specified a whitepoint that was - #. * unobtainable with the hardware they've got -- see - #. * https://en.wikipedia.org/wiki/White_point for details --#: ../panels/color/cc-color-calibrate.c:427 -+#: panels/color/cc-color-calibrate.c:427 - msgid "The target whitepoint was not obtainable." - msgstr "无法获取目标白点。" - - #. TRANSLATORS: the display calibration process is finished --#: ../panels/color/cc-color-calibrate.c:467 -+#: panels/color/cc-color-calibrate.c:467 - msgid "Complete!" - msgstr "完成!" - - #. TRANSLATORS: the display calibration failed, and we also show - #. * the translated (or untranslated) error string after this --#: ../panels/color/cc-color-calibrate.c:475 -+#: panels/color/cc-color-calibrate.c:475 - msgid "Calibration failed!" - msgstr "校准失败!" - - #. TRANSLATORS: The user can now remove the sensor from the screen --#: ../panels/color/cc-color-calibrate.c:482 -+#: panels/color/cc-color-calibrate.c:482 - msgid "You can remove the calibration device." - msgstr "您现在可以移除校准设备。" - - #. TRANSLATORS: The user has to be careful not to knock the - #. * display off the screen (although we do cope if this is - #. * detected early enough) --#: ../panels/color/cc-color-calibrate.c:553 -+#: panels/color/cc-color-calibrate.c:553 - msgid "Do not disturb the calibration device while in progress" - msgstr "校准过程中不要干扰校准设备" - - #. TRANSLATORS: This refers to the TFT display on a laptop --#: ../panels/color/cc-color-common.c:41 -+#: panels/color/cc-color-common.c:41 - msgid "Laptop Screen" - msgstr "笔记本屏幕" - - #. TRANSLATORS: This refers to the embedded webcam on a laptop --#: ../panels/color/cc-color-common.c:50 -+#: panels/color/cc-color-common.c:50 - msgid "Built-in Webcam" - msgstr "内置摄像头" - - #. TRANSLATORS: an externally connected display, where %s is either the - #. * model, vendor or ID, e.g. 'LP2480zx Monitor' --#: ../panels/color/cc-color-common.c:65 -+#: panels/color/cc-color-common.c:65 - #, c-format - msgid "%s Monitor" - msgstr "%s 显示器" - - #. TRANSLATORS: a flatbed scanner device, e.g. 'Epson Scanner' --#: ../panels/color/cc-color-common.c:69 -+#: panels/color/cc-color-common.c:69 - #, c-format - msgid "%s Scanner" - msgstr "%s 扫描仪" - - #. TRANSLATORS: a camera device, e.g. 'Nikon D60 Camera' --#: ../panels/color/cc-color-common.c:73 -+#: panels/color/cc-color-common.c:73 - #, c-format - msgid "%s Camera" - msgstr "%s 相机" - - #. TRANSLATORS: a printer device, e.g. 'Epson Photosmart Printer' --#: ../panels/color/cc-color-common.c:77 -+#: panels/color/cc-color-common.c:77 - #, c-format - msgid "%s Printer" - msgstr "%s 打印机" - - #. TRANSLATORS: a webcam device, e.g. 'Philips HiDef Camera' --#: ../panels/color/cc-color-common.c:81 -+#: panels/color/cc-color-common.c:81 - #, c-format - msgid "%s Webcam" - msgstr "%s 摄像头" - --#: ../panels/color/cc-color-device.c:89 -+#: panels/color/cc-color-device.c:89 - #, c-format - msgid "Enable color management for %s" - msgstr "为 %s 启用色彩管理" - --#: ../panels/color/cc-color-device.c:93 -+#: panels/color/cc-color-device.c:93 - #, c-format - msgid "Show color profiles for %s" - msgstr "为 %s 显示颜色管理" - - #. not calibrated --#: ../panels/color/cc-color-device.c:323 -+#: panels/color/cc-color-device.c:323 - msgid "Not calibrated" - msgstr "未校准" - - #. TRANSLATORS: this is a profile prefix to signify the - #. * profile has been auto-generated for this hardware --#: ../panels/color/cc-color-panel.c:141 -+#: panels/color/cc-color-panel.c:141 - msgid "Default: " - msgstr "默认:" - - #. TRANSLATORS: this is a profile prefix to signify the - #. * profile his a standard space like AdobeRGB --#: ../panels/color/cc-color-panel.c:149 -+#: panels/color/cc-color-panel.c:149 - msgid "Colorspace: " - msgstr "色彩空间:" - - #. TRANSLATORS: this is a profile prefix to signify the - #. * profile is a test profile --#: ../panels/color/cc-color-panel.c:156 -+#: panels/color/cc-color-panel.c:156 - msgid "Test profile: " - msgstr "测试配置:" - - #. TRANSLATORS: an ICC profile is a file containing colorspace data --#: ../panels/color/cc-color-panel.c:223 -+#: panels/color/cc-color-panel.c:223 - msgid "Select ICC Profile File" - msgstr "选择 ICC 配置文件" - --#: ../panels/color/cc-color-panel.c:226 -+#: panels/color/cc-color-panel.c:226 - msgid "_Import" - msgstr "导入(_I)" - - #. TRANSLATORS: filter name on the file->open dialog --#: ../panels/color/cc-color-panel.c:237 -+#: panels/color/cc-color-panel.c:237 - msgid "Supported ICC profiles" - msgstr "支持的 ICC 配置" - - #. TRANSLATORS: filter name on the file->open dialog --#: ../panels/color/cc-color-panel.c:244 --#: ../panels/network/wireless-security/eap-method-fast.c:417 -+#: panels/color/cc-color-panel.c:244 -+#: panels/network/wireless-security/eap-method-fast.c:417 - msgid "All files" - msgstr "所有文件" - --#: ../panels/color/cc-color-panel.c:583 -+#: panels/color/cc-color-panel.c:583 - msgid "Screen" - msgstr "屏幕" - - #. TRANSLATORS: this is when the upload of the profile failed --#: ../panels/color/cc-color-panel.c:908 -+#: panels/color/cc-color-panel.c:908 - #, c-format - msgid "Failed to upload file: %s" - msgstr "上传文件失败:%s" -@@ -422,63 +429,63 @@ msgstr "上传文件失败:%s" - #. TRANSLATORS: these are instructions on how to recover - #. * the ICC profile on the native operating system and are - #. * only shown when the user uses a LiveCD to calibrate --#: ../panels/color/cc-color-panel.c:922 -+#: panels/color/cc-color-panel.c:922 - msgid "The profile has been uploaded to:" - msgstr "配置已上传到:" - --#: ../panels/color/cc-color-panel.c:924 -+#: panels/color/cc-color-panel.c:924 - msgid "Write down this URL." - msgstr "请记下此 URL。" - --#: ../panels/color/cc-color-panel.c:925 -+#: panels/color/cc-color-panel.c:925 - msgid "Restart this computer and boot your normal operating system." - msgstr "重启计算机并引导您日常使用的操作系统。" - --#: ../panels/color/cc-color-panel.c:926 -+#: panels/color/cc-color-panel.c:926 - msgid "Type the URL into your browser to download and install the profile." - msgstr "在浏览器中输入该 URL 以下载和安装该配置。" - - #. TRANSLATORS: this is the dialog to save the ICC profile --#: ../panels/color/cc-color-panel.c:960 -+#: panels/color/cc-color-panel.c:960 - msgid "Save Profile" - msgstr "保存配置" - --#: ../panels/color/cc-color-panel.c:964 --#: ../panels/network/connection-editor/vpn-helpers.c:311 -+#: panels/color/cc-color-panel.c:964 -+#: panels/network/connection-editor/vpn-helpers.c:311 - msgid "_Save" - msgstr "保存(_S)" - - #. TRANSLATORS: this is when the button is sensitive --#: ../panels/color/cc-color-panel.c:1324 -+#: panels/color/cc-color-panel.c:1325 - msgid "Create a color profile for the selected device" - msgstr "为选中的设备创建一份色彩配置" - - #. TRANSLATORS: this is when the button is insensitive --#: ../panels/color/cc-color-panel.c:1339 ../panels/color/cc-color-panel.c:1363 -+#: panels/color/cc-color-panel.c:1340 panels/color/cc-color-panel.c:1364 - msgid "" - "The measuring instrument is not detected. Please check it is turned on and " - "correctly connected." - msgstr "未检测到测量仪器,请检查仪器是否已打开并已正确连接。" - - #. TRANSLATORS: this is when the button is insensitive --#: ../panels/color/cc-color-panel.c:1373 -+#: panels/color/cc-color-panel.c:1374 - msgid "The measuring instrument does not support printer profiling." - msgstr "测量仪器不支持打印机校正。" - - #. TRANSLATORS: this is when the button is insensitive --#: ../panels/color/cc-color-panel.c:1384 -+#: panels/color/cc-color-panel.c:1385 - msgid "The device type is not currently supported." - msgstr "目前不支持此设备类型。" - - #. TRANSLATORS: standard spaces are well known colorspaces like - #. * sRGB, AdobeRGB and ProPhotoRGB --#: ../panels/color/cc-color-profile.c:103 -+#: panels/color/cc-color-profile.c:103 - msgid "Standard Space" - msgstr "标准空间" - - #. TRANSLATORS: test profiles do things like changing the screen - #. * a different color, or swap the red and green channels --#: ../panels/color/cc-color-profile.c:109 -+#: panels/color/cc-color-profile.c:109 - msgid "Test Profile" - msgstr "测试配置" - -@@ -486,7 +493,7 @@ msgstr "测试配置" - #. * by the color management system based on manufacturing data, - #. * for instance the default monitor profile is created from the - #. * primaries specified in the monitor EDID --#: ../panels/color/cc-color-profile.c:117 -+#: panels/color/cc-color-profile.c:117 - msgctxt "Automatically generated profile" - msgid "Automatic" - msgstr "自动" -@@ -494,13 +501,13 @@ msgstr "自动" - #. TRANSLATORS: the profile quality - low quality profiles take - #. * much less time to generate but may be a poor reflection of the - #. * device capability --#: ../panels/color/cc-color-profile.c:127 -+#: panels/color/cc-color-profile.c:127 - msgctxt "Profile quality" - msgid "Low Quality" - msgstr "低质量" - - #. TRANSLATORS: the profile quality --#: ../panels/color/cc-color-profile.c:132 -+#: panels/color/cc-color-profile.c:132 - msgctxt "Profile quality" - msgid "Medium Quality" - msgstr "中等质量" -@@ -508,62 +515,61 @@ msgstr "中等质量" - #. TRANSLATORS: the profile quality - high quality profiles take - #. * a *long* time, and have the best calibration and - #. * characterisation data. --#: ../panels/color/cc-color-profile.c:139 -+#: panels/color/cc-color-profile.c:139 - msgctxt "Profile quality" - msgid "High Quality" - msgstr "高质量" - - #. TRANSLATORS: this default RGB space is used for printers that - #. * do not have additional printer profiles specified in the PPD --#: ../panels/color/cc-color-profile.c:156 -+#: panels/color/cc-color-profile.c:156 - msgctxt "Colorspace fallback" - msgid "Default RGB" - msgstr "默认 RGB" - - #. TRANSLATORS: this default CMYK space is used for printers that - #. * do not have additional printer profiles specified in the PPD --#: ../panels/color/cc-color-profile.c:163 -+#: panels/color/cc-color-profile.c:163 - msgctxt "Colorspace fallback" - msgid "Default CMYK" - msgstr "默认 CMYK" - - #. TRANSLATORS: this default gray space is used for printers that - #. * do not have additional printer profiles specified in the PPD --#: ../panels/color/cc-color-profile.c:170 -+#: panels/color/cc-color-profile.c:170 - msgctxt "Colorspace fallback" - msgid "Default Gray" - msgstr "默认灰度" - --#: ../panels/color/cc-color-profile.c:194 -+#: panels/color/cc-color-profile.c:194 - msgid "Vendor supplied factory calibration data" - msgstr "生产商提供的工厂校准数据" - --#: ../panels/color/cc-color-profile.c:203 -+#: panels/color/cc-color-profile.c:203 - msgid "Full-screen display correction not possible with this profile" - msgstr "无法使用此配置进行全屏显示校准" - --#: ../panels/color/cc-color-profile.c:225 -+#: panels/color/cc-color-profile.c:225 - msgid "This profile may no longer be accurate" - msgstr "此配置可能已不准确" - --#: ../panels/color/color-calibrate.ui.h:1 -+#: panels/color/color-calibrate.ui:7 - msgid "Display Calibration" - msgstr "显示校准" - - #. This starts the calibration process --#: ../panels/color/color-calibrate.ui.h:4 -+#: panels/color/color-calibrate.ui:40 - msgid "_Start" - msgstr "开始(_S)" - - #. This resumes the calibration process --#: ../panels/color/color-calibrate.ui.h:6 -+#: panels/color/color-calibrate.ui:54 - msgid "_Resume" - msgstr "恢复(_R)" - - #. This button returns the user back to the color control panel --#: ../panels/color/color-calibrate.ui.h:8 --#: ../panels/common/language-chooser.ui.h:2 --#: ../panels/region/format-chooser.ui.h:2 -+#: panels/color/color-calibrate.ui:67 panels/common/language-chooser.ui:12 -+#: panels/region/format-chooser.ui:14 - msgid "_Done" - msgstr "完成(_D)" - -@@ -571,367 +577,364 @@ msgstr "完成(_D)" - #. 15000 = 15 sec - #. 750 = 0.75 sec - #. Text printed on screen --#: ../panels/color/color.ui.h:1 ../panels/wacom/calibrator/calibrator-gui.c:82 -+#: panels/color/color.ui:6 panels/wacom/calibrator/calibrator-gui.c:82 - msgid "Screen Calibration" - msgstr "屏幕校准" - --#: ../panels/color/color.ui.h:2 -+#: panels/color/color.ui:23 - msgid "" - "Calibration will produce a profile that you can use to color manage your " - "screen. The longer you spend on calibration, the better the quality of the " - "color profile." - msgstr "校准将生成用于屏幕色彩管理的配置。校准时花费的时间越多效果越好。" - --#: ../panels/color/color.ui.h:3 -+#: panels/color/color.ui:38 - msgid "" - "You will not be able to use your computer while calibration takes place." - msgstr "校准进行时您将不能使用您的计算机。" - - #. This is the approximate time it takes to calibrate the display. --#: ../panels/color/color.ui.h:5 -+#: panels/color/color.ui:58 - msgid "Quality" - msgstr "质量" - - #. This is the approximate time it takes to calibrate the display. --#: ../panels/color/color.ui.h:7 -+#: panels/color/color.ui:75 - msgid "Approximate Time" - msgstr "预计耗时" - --#: ../panels/color/color.ui.h:8 -+#: panels/color/color.ui:121 - msgid "Calibration Quality" - msgstr "校准质量" - --#: ../panels/color/color.ui.h:9 -+#: panels/color/color.ui:137 - msgid "Select the sensor device you want to use for calibration." - msgstr "选择校准所使用的传感器设备。" - --#: ../panels/color/color.ui.h:10 -+#: panels/color/color.ui:174 - msgid "Calibration Device" - msgstr "校准设备" - --#: ../panels/color/color.ui.h:11 -+#: panels/color/color.ui:189 - msgid "Select the type of display that is connected." - msgstr "选择连接的显示类型" - --#: ../panels/color/color.ui.h:12 -+#: panels/color/color.ui:226 - msgid "Display Type" - msgstr "显示类型" - --#: ../panels/color/color.ui.h:13 -+#: panels/color/color.ui:241 - msgid "" - "Select a display target white point. Most displays should be calibrated to a " - "D65 illuminant." - msgstr "选择显示目标白点。多数显示器应该校准到 D65 光源。" - --#: ../panels/color/color.ui.h:14 -+#: panels/color/color.ui:278 - msgid "Profile Whitepoint" - msgstr "配置参考白点" - --#: ../panels/color/color.ui.h:15 -+#: panels/color/color.ui:293 - msgid "" - "Please set the display to a brightness that is typical for you. Color " - "management will be most accurate at this brightness level." - msgstr "请选择通常使用的显示亮度。色彩管理在此亮度下将最准确。" - --#: ../panels/color/color.ui.h:16 -+#: panels/color/color.ui:307 - msgid "" - "Alternatively, you can use the brightness level used with one of the other " - "profiles for this device." - msgstr "或者,也可以使用亮度配合此设备的其他配置使用。" - --#: ../panels/color/color.ui.h:17 -+#: panels/color/color.ui:318 - msgid "Display Brightness" - msgstr "显示亮度" - --#: ../panels/color/color.ui.h:18 -+#: panels/color/color.ui:333 - msgid "" - "You can use a color profile on different computers, or even create profiles " - "for different lighting conditions." --msgstr "" --"您可以对不同的计算机使用同一个配置,或者甚至可以对不同的光照条件创建配置。" -+msgstr "您可以对不同的计算机使用同一个配置,或者甚至可以对不同的光照条件创建配置。" - --#: ../panels/color/color.ui.h:19 -+#: panels/color/color.ui:348 - msgid "Profile Name:" - msgstr "配置名称:" - --#: ../panels/color/color.ui.h:20 -+#: panels/color/color.ui:377 - msgid "Profile Name" - msgstr "配置名称" - --#: ../panels/color/color.ui.h:21 -+#: panels/color/color.ui:392 - msgid "Profile successfully created!" - msgstr "创建配置成功!" - --#: ../panels/color/color.ui.h:22 -+#: panels/color/color.ui:443 - msgid "Copy profile" - msgstr "复制配置" - --#: ../panels/color/color.ui.h:23 -+#: panels/color/color.ui:456 - msgid "Requires writable media" - msgstr "需要可写媒体" - --#: ../panels/color/color.ui.h:24 -+#: panels/color/color.ui:519 - msgid "Upload profile" - msgstr "上传配置" - --#: ../panels/color/color.ui.h:25 -+#: panels/color/color.ui:532 - msgid "Requires Internet connection" - msgstr "需要互联网连接" - --#: ../panels/color/color.ui.h:26 -+#: panels/color/color.ui:591 - msgid "" - "You may find these instructions on how to use the profile on GNU/Linux, Apple OS X and Microsoft Windows systems useful." --msgstr "" --"有关如何在 GNU/LinuxApple OS X " --"和 Microsoft Windows 系统中使用配置的这些说明可能对您" --"有所帮助。" -+msgstr "有关如何在 GNU/LinuxApple OS XMicrosoft Windows 系统中使用配置的这些说明可能对您有所帮助。" - --#: ../panels/color/color.ui.h:27 --#: ../panels/user-accounts/um-fingerprint-dialog.c:730 -+#: panels/color/color.ui:607 panels/user-accounts/um-fingerprint-dialog.c:720 - msgid "Summary" - msgstr "摘要" - --#: ../panels/color/color.ui.h:28 --msgid "Add profile" --msgstr "添加配置" -+#: panels/color/color.ui:621 -+msgid "Add Profile" -+msgstr "添加配置集" - --#: ../panels/color/color.ui.h:29 -+#: panels/color/color.ui:643 - msgid "_Import File…" - msgstr "导入文件(_I)…" - --#: ../panels/color/color.ui.h:31 --#: ../panels/network/connection-editor/net-connection-editor.c:546 --#: ../panels/printers/new-printer-dialog.ui.h:3 --#: ../panels/region/input-chooser.ui.h:3 --#: ../panels/user-accounts/data/account-dialog.ui.h:3 -+#: panels/color/color.ui:672 -+#: panels/network/connection-editor/net-connection-editor.c:519 -+#: panels/printers/new-printer-dialog.ui:80 panels/region/input-chooser.ui:22 -+#: panels/user-accounts/data/account-dialog.ui:47 - msgid "_Add" - msgstr "添加(_A)" - --#: ../panels/color/color.ui.h:32 -+#: panels/color/color.ui:732 - msgid "" - "Problems detected. The profile may not work correctly. Show " - "details." - msgstr "检测到问题,此配置可能无法正常工作。显示详细信息。" - --#: ../panels/color/color.ui.h:33 -+#: panels/color/color.ui:807 - msgid "Each device needs an up to date color profile to be color managed." - msgstr "每个设备都需要一份最新色彩配置以进行色彩管理。" - --#: ../panels/color/color.ui.h:34 -+#: panels/color/color.ui:829 - msgid "Learn more" - msgstr "了解更多" - --#: ../panels/color/color.ui.h:35 -+#: panels/color/color.ui:834 - msgid "Learn more about color management" - msgstr "了解更多有关色彩管理的信息" - --#: ../panels/color/color.ui.h:36 -+#: panels/color/color.ui:882 - msgid "_Set for all users" - msgstr "为所有用户设置(_S)" - --#: ../panels/color/color.ui.h:37 -+#: panels/color/color.ui:886 panels/color/color.ui:901 -+#: panels/color/color.ui:902 - msgid "Set this profile for all users on this computer" - msgstr "为此计算机上的所有用户设置此配置" - --#: ../panels/color/color.ui.h:38 -+#: panels/color/color.ui:897 - msgid "_Enable" - msgstr "启用(_E)" - --#: ../panels/color/color.ui.h:39 -+#: panels/color/color.ui:928 - msgid "_Add profile" - msgstr "添加配置(_A)" - --#: ../panels/color/color.ui.h:40 -+#: panels/color/color.ui:941 - msgid "_Calibrate…" - msgstr "校准(_C)…" - --#: ../panels/color/color.ui.h:41 -+#: panels/color/color.ui:945 - msgid "Calibrate the device" - msgstr "校准该设备" - --#: ../panels/color/color.ui.h:42 -+#: panels/color/color.ui:956 - msgid "_Remove profile" - msgstr "移除配置(_R)" - --#: ../panels/color/color.ui.h:43 -+#: panels/color/color.ui:969 - msgid "_View details" - msgstr "查看详情(_V)" - --#: ../panels/color/color.ui.h:44 -+#: panels/color/color.ui:1005 - msgid "Unable to detect any devices that can be color managed" - msgstr "未检测到可以管理颜色的设备" - --#: ../panels/color/color.ui.h:45 -+#: panels/color/color.ui:1047 - msgid "LCD" - msgstr "LCD" - --#: ../panels/color/color.ui.h:46 -+#: panels/color/color.ui:1052 - msgid "LED" - msgstr "LED" - --#: ../panels/color/color.ui.h:47 -+#: panels/color/color.ui:1057 - msgid "CRT" - msgstr "CRT" - --#: ../panels/color/color.ui.h:48 -+#: panels/color/color.ui:1062 - msgid "Projector" - msgstr "投影仪" - --#: ../panels/color/color.ui.h:49 -+#: panels/color/color.ui:1067 - msgid "Plasma" - msgstr "等离子" - --#: ../panels/color/color.ui.h:50 -+#: panels/color/color.ui:1072 - msgid "LCD (CCFL backlight)" - msgstr "LCD (CCFL 背光)" - --#: ../panels/color/color.ui.h:51 -+#: panels/color/color.ui:1077 - msgid "LCD (RGB LED backlight)" - msgstr "LCD (RGB LED 背光)" - --#: ../panels/color/color.ui.h:52 -+#: panels/color/color.ui:1082 - msgid "LCD (white LED backlight)" - msgstr "LCD (白色 LED 背光)" - --#: ../panels/color/color.ui.h:53 -+#: panels/color/color.ui:1087 - msgid "Wide gamut LCD (CCFL backlight)" --msgstr "广色域 LCD(CCFL 背光)" -+msgstr "广色域 LCD (CCFL 背光)" - --#: ../panels/color/color.ui.h:54 -+#: panels/color/color.ui:1092 - msgid "Wide gamut LCD (RGB LED backlight)" - msgstr "广色域 LCD(RGB LED 背光)" - --#: ../panels/color/color.ui.h:55 -+#: panels/color/color.ui:1109 - msgctxt "Calibration quality" - msgid "High" - msgstr "高" - --#: ../panels/color/color.ui.h:56 -+#: panels/color/color.ui:1110 - msgid "40 minutes" - msgstr "40 分钟" - --#: ../panels/color/color.ui.h:57 -+#: panels/color/color.ui:1114 - msgctxt "Calibration quality" - msgid "Medium" - msgstr "中" - --#: ../panels/color/color.ui.h:58 ../panels/power/power.ui.h:2 --#: ../panels/privacy/privacy.ui.h:7 -+#: panels/color/color.ui:1115 panels/power/power.ui:25 -+#: panels/privacy/privacy.ui:38 - msgid "30 minutes" - msgstr "30 分钟" - --#: ../panels/color/color.ui.h:59 -+#: panels/color/color.ui:1119 - msgctxt "Calibration quality" - msgid "Low" - msgstr "低" - --#: ../panels/color/color.ui.h:60 ../panels/power/power.ui.h:1 -+#: panels/color/color.ui:1120 panels/power/power.ui:13 panels/power/power.ui:95 - msgid "15 minutes" - msgstr "15 分钟" - --#: ../panels/color/color.ui.h:61 -+#: panels/color/color.ui:1142 - msgid "Native to display" - msgstr "显示设备原生" - --#: ../panels/color/color.ui.h:62 -+#: panels/color/color.ui:1146 - msgid "D50 (Printing and publishing)" - msgstr "D50(打印和出版)" - --#: ../panels/color/color.ui.h:63 -+#: panels/color/color.ui:1150 - msgid "D55" - msgstr "D55" - --#: ../panels/color/color.ui.h:64 -+#: panels/color/color.ui:1154 - msgid "D65 (Photography and graphics)" - msgstr "D65(摄影及图形)" - --#: ../panels/color/color.ui.h:65 -+#: panels/color/color.ui:1158 - msgid "D75" - msgstr "D75" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/color/gnome-color-panel.desktop.in.in.h:2 --msgid "Co­lor" -+#: panels/color/gnome-color-panel.desktop.in.in:3 -+msgid "Color" - msgstr "色彩" - --#: ../panels/color/gnome-color-panel.desktop.in.in.h:3 -+#: panels/color/gnome-color-panel.desktop.in.in:4 - msgid "" - "Calibrate the color of your devices, such as displays, cameras or printers" - msgstr "校准显示器、相机、打印机等设备的色彩" - --#. Translators: those are keywords for the color control-center panel --#: ../panels/color/gnome-color-panel.desktop.in.in.h:5 -+#. 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: 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 "" --"Color;ICC;Profile;Calibrate;Printer;Display;颜色;色彩;配置;校准;打印机;显示;" -+msgstr "Color;ICC;Profile;Calibrate;Printer;Display;颜色;色彩;配置;校准;打印机;显示;" - --#: ../panels/common/cc-common-language.c:323 -+#: panels/common/cc-common-language.c:323 - msgid "Other…" - msgstr "其他…" - --#: ../panels/common/cc-language-chooser.c:124 --#: ../panels/region/cc-format-chooser.c:271 --#: ../panels/region/cc-input-chooser.c:169 -+#: panels/common/cc-language-chooser.c:124 -+#: panels/region/cc-format-chooser.c:269 panels/region/cc-input-chooser.c:169 - msgid "More…" - msgstr "更多…" - --#: ../panels/common/cc-language-chooser.c:140 -+#: panels/common/cc-language-chooser.c:140 - msgid "No languages found" - msgstr "未找到语言" - --#: ../panels/common/cc-util.c:127 --#: ../panels/network/connection-editor/ce-page-details.c:100 -+#: panels/common/cc-util.c:127 -+#: panels/network/connection-editor/ce-page-details.c:106 - msgid "Today" - msgstr "今天" - --#: ../panels/common/cc-util.c:131 --#: ../panels/network/connection-editor/ce-page-details.c:102 -+#: panels/common/cc-util.c:131 -+#: panels/network/connection-editor/ce-page-details.c:108 - msgid "Yesterday" - msgstr "昨天" - - #. Translators: This is a date format string in the style of "Feb 24". --#: ../panels/common/cc-util.c:138 -+#: panels/common/cc-util.c:138 - msgid "%b %e" - msgstr "%b %e" - - #. Translators: This is a date format string in the style of "Feb 24, 2013". --#: ../panels/common/cc-util.c:143 -+#: panels/common/cc-util.c:143 - msgid "%b %e, %Y" --msgstr " %Y %b %e" -+msgstr "%b %e, %Y" - --#: ../panels/common/language-chooser.ui.h:1 -+#: panels/common/language-chooser.ui:5 - msgid "Language" - msgstr "语言" - --#: ../panels/datetime/big.ui.h:1 ../panels/datetime/little.ui.h:1 --#: ../panels/datetime/middle.ui.h:1 ../panels/datetime/ydm.ui.h:1 -+#: panels/datetime/big.ui:16 panels/datetime/little.ui:16 -+#: panels/datetime/middle.ui:16 panels/datetime/ydm.ui:16 - msgid "Day" - msgstr "日" - --#: ../panels/datetime/big.ui.h:2 ../panels/datetime/little.ui.h:2 --#: ../panels/datetime/middle.ui.h:2 ../panels/datetime/ydm.ui.h:2 -+#: panels/datetime/big.ui:32 panels/datetime/little.ui:32 -+#: panels/datetime/middle.ui:32 panels/datetime/ydm.ui:32 - msgid "Month" - msgstr "月" - --#: ../panels/datetime/big.ui.h:3 ../panels/datetime/little.ui.h:3 --#: ../panels/datetime/middle.ui.h:3 ../panels/datetime/ydm.ui.h:3 -+#: panels/datetime/big.ui:48 panels/datetime/little.ui:48 -+#: panels/datetime/middle.ui:48 panels/datetime/ydm.ui:48 - msgid "Year" - msgstr "年" - - #. Translators: This is the full date and time format used in 12-hour mode. --#: ../panels/datetime/cc-datetime-panel.c:340 -+#: panels/datetime/cc-datetime-panel.c:333 - msgid "%e %B %Y, %l:%M %p" --msgstr "%Y年%m月%d日, %p %-l:%M" -+msgstr "%e %B %Y, %l:%M %p" - - #. Translators: This is the full date and time format used in 24-hour mode. --#: ../panels/datetime/cc-datetime-panel.c:345 -+#: panels/datetime/cc-datetime-panel.c:338 - msgid "%e %B %Y, %R" --msgstr "%Y年%m月%d日, %R" -+msgstr "%e %B %Y, %R" - - #. Translators: "city, country" --#: ../panels/datetime/cc-datetime-panel.c:523 -+#: panels/datetime/cc-datetime-panel.c:503 - #, c-format - msgctxt "timezone loc" - msgid "%s, %s" -@@ -939,7 +942,7 @@ msgstr "%s, %s" - - #. Update the timezone on the listbow row - #. Translators: "timezone (details)" --#: ../panels/datetime/cc-datetime-panel.c:553 -+#: panels/datetime/cc-datetime-panel.c:530 - #, c-format - msgctxt "timezone desc" - msgid "%s (%s)" -@@ -947,367 +950,429 @@ msgstr "%s (%s)" - - #. Translators: UTC here means the Coordinated Universal Time. - #. * %:::z will be replaced by the offset from UTC e.g. UTC+02 --#: ../panels/datetime/cc-datetime-panel.c:561 -+#: panels/datetime/cc-datetime-panel.c:537 - msgid "UTC%:::z" - msgstr "UTC%:::z" - - #. Translators: This is the time format used in 12-hour mode. --#: ../panels/datetime/cc-datetime-panel.c:566 -+#: panels/datetime/cc-datetime-panel.c:542 - msgid "%l:%M %p" --msgstr "%p %-l:%M" -+msgstr "%l:%M %p" - - #. Translators: This is the time format used in 24-hour mode. --#: ../panels/datetime/cc-datetime-panel.c:571 -+#: panels/datetime/cc-datetime-panel.c:547 - msgid "%R" - msgstr "%R" - - #. Update the text bubble in the timezone map - #. Translators: "timezone (utc shift)" --#: ../panels/datetime/cc-datetime-panel.c:576 -+#: panels/datetime/cc-datetime-panel.c:552 - #, c-format - msgctxt "timezone map" - msgid "%s (%s)" - msgstr "%s (%s)" - --#: ../panels/datetime/datetime.ui.h:1 -+#: panels/datetime/datetime.ui:22 - msgid "January" - msgstr "一月" - --#: ../panels/datetime/datetime.ui.h:2 -+#: panels/datetime/datetime.ui:25 - msgid "February" - msgstr "二月" - --#: ../panels/datetime/datetime.ui.h:3 -+#: panels/datetime/datetime.ui:28 - msgid "March" - msgstr "三月" - --#: ../panels/datetime/datetime.ui.h:4 -+#: panels/datetime/datetime.ui:31 - msgid "April" - msgstr "四月" - --#: ../panels/datetime/datetime.ui.h:5 -+#: panels/datetime/datetime.ui:34 - msgid "May" - msgstr "五月" - --#: ../panels/datetime/datetime.ui.h:6 -+#: panels/datetime/datetime.ui:37 - msgid "June" - msgstr "六月" - --#: ../panels/datetime/datetime.ui.h:7 -+#: panels/datetime/datetime.ui:40 - msgid "July" - msgstr "七月" - --#: ../panels/datetime/datetime.ui.h:8 -+#: panels/datetime/datetime.ui:43 - msgid "August" - msgstr "八月" - --#: ../panels/datetime/datetime.ui.h:9 -+#: panels/datetime/datetime.ui:46 - msgid "September" - msgstr "九月" - --#: ../panels/datetime/datetime.ui.h:10 -+#: panels/datetime/datetime.ui:49 - msgid "October" - msgstr "十月" - --#: ../panels/datetime/datetime.ui.h:11 -+#: panels/datetime/datetime.ui:52 - msgid "November" - msgstr "十一月" - --#: ../panels/datetime/datetime.ui.h:12 -+#: panels/datetime/datetime.ui:55 - msgid "December" - msgstr "十二月" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/datetime/datetime.ui.h:13 --#: ../panels/datetime/gnome-datetime-panel.desktop.in.in.h:2 -+#: panels/datetime/datetime.ui:61 -+#: panels/datetime/gnome-datetime-panel.desktop.in.in:3 - msgid "Date & Time" - msgstr "日期和时间" - --#: ../panels/datetime/datetime.ui.h:14 -+#: panels/datetime/datetime.ui:106 - msgid "Hour" - msgstr "时" - - #. Translator: this is the separator between hours and minutes, like in HH∶MM --#: ../panels/datetime/datetime.ui.h:16 -+#: panels/datetime/datetime.ui:121 - msgid "∶" - msgstr ":" - --#: ../panels/datetime/datetime.ui.h:17 -+#: panels/datetime/datetime.ui:143 - msgid "Minute" - msgstr "分" - --#: ../panels/datetime/datetime.ui.h:18 -+#: panels/datetime/datetime.ui:208 - msgid "Time Zone" - msgstr "时区" - --#: ../panels/datetime/datetime.ui.h:19 -+#: panels/datetime/datetime.ui:228 - msgid "Search for a city" - msgstr "搜索城市" - --#: ../panels/datetime/datetime.ui.h:20 -+#: panels/datetime/datetime.ui:304 - msgid "Automatic _Date & Time" - msgstr "自动设置日期和时间(_D)" - --#: ../panels/datetime/datetime.ui.h:21 -+#: panels/datetime/datetime.ui:319 panels/datetime/datetime.ui:397 - msgid "Requires internet access" - msgstr "需要互联网连接" - --#: ../panels/datetime/datetime.ui.h:22 -+#: panels/datetime/datetime.ui:382 - msgid "Automatic Time _Zone" - msgstr "自动设置时区(_Z)" - --#: ../panels/datetime/datetime.ui.h:23 -+#: panels/datetime/datetime.ui:454 - msgid "Date & _Time" - msgstr "日期和时间(_T)" - --#: ../panels/datetime/datetime.ui.h:24 -+#: panels/datetime/datetime.ui:502 - msgid "Time Z_one" - msgstr "时区(_O)" - --#: ../panels/datetime/datetime.ui.h:25 -+#: panels/datetime/datetime.ui:570 - msgid "Time _Format" - msgstr "时间格式(_F)" - --#: ../panels/datetime/datetime.ui.h:26 -+#: panels/datetime/datetime.ui:588 - msgid "24-hour" - msgstr "24 小时" - --#: ../panels/datetime/datetime.ui.h:27 -+#: panels/datetime/datetime.ui:589 - msgid "AM / PM" - msgstr "上午/下午" - --#: ../panels/datetime/gnome-datetime-panel.desktop.in.in.h:3 -+#: panels/datetime/gnome-datetime-panel.desktop.in.in:4 - msgid "Change the date and time, including time zone" - msgstr "改变日期、时间和时区" - --#. Translators: those are keywords for the date and time control-center panel --#: ../panels/datetime/gnome-datetime-panel.desktop.in.in.h:5 -+#. 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: 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 "Clock;Timezone;Location;时钟;时区;位置;" - --#: ../panels/datetime/org.gnome.controlcenter.datetime.policy.in.h:1 -+#: panels/datetime/org.gnome.controlcenter.datetime.policy.in:11 - msgid "Change system time and date settings" - msgstr "更改系统时间和日期设置" - --#: ../panels/datetime/org.gnome.controlcenter.datetime.policy.in.h:2 -+#: panels/datetime/org.gnome.controlcenter.datetime.policy.in:12 - msgid "To change time or date settings, you need to authenticate." - msgstr "修改时间或日期设置需要认证。" - --#: ../panels/display/cc-display-panel.c:573 --msgid "Lid Closed" --msgstr "上盖已合上" -- --#. translators: "Mirrored" describes when both displays show the same view --#: ../panels/display/cc-display-panel.c:576 --msgid "Mirrored" --msgstr "镜像显示" -- --#: ../panels/display/cc-display-panel.c:578 --#: ../panels/display/cc-display-panel.c:2430 --msgid "Primary" --msgstr "主显示器" -- --#: ../panels/display/cc-display-panel.c:580 --#: ../panels/notifications/cc-notifications-panel.c:257 --#: ../panels/power/cc-power-panel.c:1968 ../panels/power/cc-power-panel.c:1979 --#: ../panels/privacy/cc-privacy-panel.c:190 --#: ../panels/privacy/cc-privacy-panel.c:257 --#: ../panels/universal-access/cc-ua-panel.c:269 --#: ../panels/universal-access/cc-ua-panel.c:590 --#: ../panels/universal-access/cc-ua-panel.c:603 --#: ../panels/universal-access/cc-ua-panel.c:615 --#: ../panels/universal-access/cc-ua-panel.c:786 --#: ../panels/universal-access/uap.ui.h:6 --msgid "Off" --msgstr "关" -- --#: ../panels/display/cc-display-panel.c:583 --msgid "Secondary" --msgstr "副显示器" -- --#. Title of displays dialog when multiple monitors are present. --#: ../panels/display/cc-display-panel.c:1558 --msgid "Arrange Combined Displays" --msgstr "安排多个显示" -- --#: ../panels/display/cc-display-panel.c:1562 --#: ../panels/display/cc-display-panel.c:2208 --#: ../panels/network/connection-editor/connection-editor.ui.h:2 --#: ../panels/network/network-wifi.ui.h:2 --msgid "_Apply" --msgstr "应用(_A)" -- --#: ../panels/display/cc-display-panel.c:1586 --msgid "Drag displays to rearrange them" --msgstr "拖动以重新排列显示屏拖动以重新排列显示屏" -- --#. translators: example string is "60 Hz (NTSC)" --#. * NTSC is https://en.wikipedia.org/wiki/NTSC --#: ../panels/display/cc-display-panel.c:1793 --#, c-format --msgid "%d Hz (NTSC)" --msgstr "%d Hz (NTSC)" -- --#. translators: example string is "60 Hz" --#: ../panels/display/cc-display-panel.c:1799 --#, c-format --msgid "%d Hz" --msgstr "%d Hz" -- --#: ../panels/display/cc-display-panel.c:2260 --msgid "Rotate counterclockwise by 90°" --msgstr "逆时针旋转 90°" -+#: panels/display/cc-display-panel.c:732 -+msgctxt "Display rotation" -+msgid "Landscape" -+msgstr "横向" - --#: ../panels/display/cc-display-panel.c:2278 --msgid "Rotate by 180°" --msgstr "旋转 180°" -+#: panels/display/cc-display-panel.c:735 -+msgctxt "Display rotation" -+msgid "Portrait Right" -+msgstr "纵向右侧" - --#: ../panels/display/cc-display-panel.c:2296 --msgid "Rotate clockwise by 90°" --msgstr "顺时针旋转 90°" -+#: panels/display/cc-display-panel.c:738 -+msgctxt "Display rotation" -+msgid "Portrait Left" -+msgstr "纵向左侧" - --#: ../panels/display/cc-display-panel.c:2317 --msgid "Size" --msgstr "大小" -+#: panels/display/cc-display-panel.c:741 -+msgctxt "Display rotation" -+msgid "Landscape (flipped)" -+msgstr "横向(翻转)" - --#. aspect ratio --#: ../panels/display/cc-display-panel.c:2332 --msgid "Aspect Ratio" --msgstr "宽高比" -+# 左撇子有歧视色彩。 -+#. Translators: This option sets orientation of print (portrait, landscape...) -+#: panels/display/cc-display-panel.c:808 -+#: panels/printers/pp-options-dialog.c:558 -+msgid "Orientation" -+msgstr "方向" - --#: ../panels/display/cc-display-panel.c:2355 --#: ../panels/printers/pp-options-dialog.c:85 -+#: panels/display/cc-display-panel.c:873 panels/display/cc-display-panel.c:1676 -+#: panels/printers/pp-options-dialog.c:87 - msgid "Resolution" - msgstr "分辨率" - --#: ../panels/display/cc-display-panel.c:2375 --msgid "Adjust for TV" --msgstr "为 TV 调整" -- --#: ../panels/display/cc-display-panel.c:2399 -+#: panels/display/cc-display-panel.c:961 - msgid "Refresh Rate" - msgstr "刷新频率" - --#: ../panels/display/cc-display-panel.c:2431 --msgid "Show the top bar and Activities Overview on this display" --msgstr "在此显示器上显示顶栏和活动概览" -+#: panels/display/cc-display-panel.c:1098 -+msgid "Scale" -+msgstr "缩放比例" -+ -+#: panels/display/cc-display-panel.c:1151 -+msgid "Adjust for TV" -+msgstr "为 TV 调整" -+ -+#: panels/display/cc-display-panel.c:1413 -+msgid "Primary Display" -+msgstr "主显示" - --#: ../panels/display/cc-display-panel.c:2437 --msgid "Secondary Display" --msgstr "副显示器" -+#: panels/display/cc-display-panel.c:1442 -+msgid "Display Arrangement" -+msgstr "显示安排" - --#: ../panels/display/cc-display-panel.c:2438 --msgid "Join this display with another to create an extra workspace" --msgstr "将该显示器与另一显示器合并以扩展工作空间" -+#: panels/display/cc-display-panel.c:1443 -+msgid "" -+"Drag displays to match your setup. The top bar is placed on the primary " -+"display." -+msgstr "拖动显示以匹配您的设置。顶栏放在主显示中。" - --# 左撇子有歧视色彩。 --#: ../panels/display/cc-display-panel.c:2445 --msgid "Presentation" --msgstr "演示" -+#: panels/display/cc-display-panel.c:1866 -+msgid "Display Mode" -+msgstr "显示类型" - --#: ../panels/display/cc-display-panel.c:2446 --msgid "Show slideshows and media only" --msgstr "只显示幻灯片和多媒体" -+#: panels/display/cc-display-panel.c:1882 -+msgid "Join Displays" -+msgstr "联合显示" - --#. translators: "Mirror" describes when both displays show the same view --#: ../panels/display/cc-display-panel.c:2451 -+#: panels/display/cc-display-panel.c:1885 - msgid "Mirror" - msgstr "镜像" - --#: ../panels/display/cc-display-panel.c:2452 --msgid "Show your existing view on both displays" --msgstr "在两块显示器上同时显示当前视图" -+#: panels/display/cc-display-panel.c:1888 -+msgid "Single Display" -+msgstr "单显示" - --#: ../panels/display/cc-display-panel.c:2458 --msgid "Turn Off" --msgstr "关闭" -+#: panels/display/cc-display-panel.c:2593 -+msgid "Apply Changes?" -+msgstr "应用改变?" -+ -+#: panels/display/cc-display-panel.c:2607 -+#: panels/network/connection-editor/connection-editor.ui:24 -+#: panels/network/network-wifi.ui:38 -+msgid "_Apply" -+msgstr "应用(_A)" -+ -+#: 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:3198 -+#: panels/notifications/cc-notifications-panel.c:292 -+#: 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 -+#: panels/universal-access/cc-ua-panel.c:727 -+#: panels/universal-access/cc-ua-panel.c:739 -+#: panels/universal-access/cc-ua-panel.c:910 -+msgid "On" -+msgstr "开" -+ -+#: 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: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 -+#: panels/universal-access/cc-ua-panel.c:727 -+#: panels/universal-access/cc-ua-panel.c:739 -+#: panels/universal-access/cc-ua-panel.c:910 panels/universal-access/uap.ui:334 -+#: panels/universal-access/uap.ui:380 panels/universal-access/uap.ui:426 -+#: panels/universal-access/uap.ui:532 panels/universal-access/uap.ui:685 -+#: panels/universal-access/uap.ui:731 panels/universal-access/uap.ui:777 -+#: panels/universal-access/uap.ui:929 -+msgid "Off" -+msgstr "关" - --#: ../panels/display/cc-display-panel.c:2459 --msgid "Don't use this display" --msgstr "不使用该显示器" -+#: panels/display/cc-display-panel.c:3219 -+msgid "_Night Light" -+msgstr "(_N)夜光模式" - --#: ../panels/display/cc-display-panel.c:2770 -+#: panels/display/cc-display-panel.c:3284 - msgid "Could not get screen information" - msgstr "无法获取屏幕信息" - --#: ../panels/display/cc-display-panel.c:2801 --msgid "_Arrange Combined Displays" --msgstr "安排多个显示(_A)" -+#. This cancels the redshift inhibit. -+#: panels/display/display.ui:71 -+msgid "Restart Filter" -+msgstr "重启过滤" -+ -+#. Inhibit the redshift functionality until the next day starts -+#: panels/display/display.ui:103 -+msgid "Temporarily Disabled Until Tomorrow" -+msgstr "暂时停用至明天" -+ -+#: panels/display/display.ui:144 -+msgid "" -+"Night light makes the screen color warmer. This can help to prevent eye " -+"strain and sleeplessness." -+msgstr "夜光使屏幕颜色更加温暖。这可以帮助防止眼睛疲劳和失眠。" -+ -+#. This is the redshift functionality where we suppress blue light when the sun has gone down -+#: panels/display/display.ui:171 panels/display/display.ui:567 -+msgid "Night Light" -+msgstr "夜光" -+ -+#: panels/display/display.ui:187 -+msgid "Schedule" -+msgstr "时间表" -+ -+#: panels/display/display.ui:215 -+msgid "Sunset to Sunrise" -+msgstr "日落到日出" -+ -+#: panels/display/display.ui:229 -+#: panels/network/connection-editor/ip4-page.ui:69 -+#: panels/network/connection-editor/ip6-page.ui:83 -+#: panels/network/net-proxy.c:56 panels/network/network-proxy.ui:113 -+#: panels/network/network-wifi.ui:777 panels/network/network-wifi.ui:1054 -+#: panels/privacy/cc-privacy-panel.c:217 -+msgid "Manual" -+msgstr "手动" -+ -+#: panels/display/display.ui:268 -+msgid "From" -+msgstr "自" -+ -+#: panels/display/display.ui:309 panels/display/display.ui:430 -+msgid ":" -+msgstr ":" -+ -+#. This is the short form for the time period in the morning -+#: panels/display/display.ui:343 panels/display/display.ui:464 -+msgid "AM" -+msgstr "AM" -+ -+#. This is the short form for the time period in the afternoon -+#: panels/display/display.ui:359 panels/display/display.ui:480 -+msgid "PM" -+msgstr "PM" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/display/gnome-display-panel.desktop.in.in.h:2 --msgid "Dis­plays" -+#: panels/display/display.ui:528 -+msgid "To" -+msgstr "到" -+ -+#: panels/display/gnome-display-panel.desktop.in.in:3 -+msgid "Displays" - msgstr "显示" - --#: ../panels/display/gnome-display-panel.desktop.in.in.h:3 -+#: panels/display/gnome-display-panel.desktop.in.in:4 - msgid "Choose how to use connected monitors and projectors" - msgstr "选择如何使用接入的显示器和投影仪" - --#. Translators: those are keywords for the display control-center panel --#: ../panels/display/gnome-display-panel.desktop.in.in.h:5 --msgid "Panel;Projector;xrandr;Screen;Resolution;Refresh;Monitor;" --msgstr "" --"Panel;Projector;xrandr;Screen;Resolution;Refresh;Monitor;面板;投影仪;屏幕;分" --"辨率;刷新;" -+#. 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: 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;" -+msgstr "Panel;Projector;xrandr;Screen;Resolution;Refresh;Monitor;Night;Light;Blue;redshift;color;sunset;sunrise;" - - #. TRANSLATORS: AP type --#: ../panels/info/cc-info-panel.c:434 ../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 "未知" - --#: ../panels/info/cc-info-panel.c:567 -+#. translators: This is the name of the OS, followed by the build ID, for -+#. * example: -+#. * "Fedora 25 (Workstation Edition); Build ID: xyz" or -+#. * "Ubuntu 16.04 LTS; Build ID: jki" -+#: panels/info/cc-info-overview-panel.c:473 - #, c-format --msgid "%s %d-bit (Build ID: %s)" --msgstr "%s %d 位(构建 ID:%s)" -+msgid "%s; Build ID: %s" -+msgstr "%s; Build ID: %s" - --#: ../panels/info/cc-info-panel.c:569 -+#. translators: This is the type of architecture for the OS -+#: panels/info/cc-info-overview-panel.c:490 - #, c-format --msgid "%d-bit (Build ID: %s)" --msgstr "%d 位(构建 ID:%s)" -+msgid "64-bit" -+msgstr "64 位" - --#: ../panels/info/cc-info-panel.c:577 -+#. translators: This is the type of architecture for the OS -+#: panels/info/cc-info-overview-panel.c:493 - #, c-format --msgid "%s %d-bit" --msgstr "%s %d 位" -+msgid "32-bit" -+msgstr "32 位" - --#: ../panels/info/cc-info-panel.c:579 -+#: panels/info/cc-info-overview-panel.c:782 - #, c-format --msgid "%d-bit" --msgstr "%d 位" -+msgid "Version %s" -+msgstr "版本 %s" - --#: ../panels/info/cc-info-panel.c:1260 -+#: panels/info/cc-info-removable-media-panel.c:298 - msgid "Ask what to do" - msgstr "询问如何处理" - --#: ../panels/info/cc-info-panel.c:1264 -+#: panels/info/cc-info-removable-media-panel.c:302 - msgid "Do nothing" - msgstr "无动作" - --#: ../panels/info/cc-info-panel.c:1268 -+#: panels/info/cc-info-removable-media-panel.c:306 - msgid "Open folder" - msgstr "打开文件夹" - --#: ../panels/info/cc-info-panel.c:1359 -+#: panels/info/cc-info-removable-media-panel.c:391 - msgid "Other Media" - msgstr "其他媒体" - --#: ../panels/info/cc-info-panel.c:1390 -+#: panels/info/cc-info-removable-media-panel.c:424 - msgid "Select an application for audio CDs" - msgstr "选择播放音频 CD 的应用程序" - --#: ../panels/info/cc-info-panel.c:1391 -+#: panels/info/cc-info-removable-media-panel.c:425 - msgid "Select an application for video DVDs" - msgstr "选择播放视频 DVD 的应用程序" - --#: ../panels/info/cc-info-panel.c:1392 -+#: panels/info/cc-info-removable-media-panel.c:426 - msgid "Select an application to run when a music player is connected" - msgstr "选择连接音乐播放器后运行的应用程序" - --#: ../panels/info/cc-info-panel.c:1393 -+#: panels/info/cc-info-removable-media-panel.c:427 - msgid "Select an application to run when a camera is connected" - msgstr "选择连接相机后运行的应用程序" - --#: ../panels/info/cc-info-panel.c:1394 -+#: panels/info/cc-info-removable-media-panel.c:428 - msgid "Select an application for software CDs" - msgstr "选择插入软件 CD 时运行的应用程序" - -@@ -1316,376 +1381,631 @@ msgstr "选择插入软件 CD 时运行的应用程序" - #. * If the shared-mime-info translation works for your language, - #. * simply leave these untranslated. - #. --#: ../panels/info/cc-info-panel.c:1406 -+#: panels/info/cc-info-removable-media-panel.c:440 - msgid "audio DVD" - msgstr "音频 DVD" - --#: ../panels/info/cc-info-panel.c:1407 -+#: panels/info/cc-info-removable-media-panel.c:441 - msgid "blank Blu-ray disc" - msgstr "空白蓝光光盘" - --#: ../panels/info/cc-info-panel.c:1408 -+#: panels/info/cc-info-removable-media-panel.c:442 - msgid "blank CD disc" - msgstr "空白 CD 光盘" - --#: ../panels/info/cc-info-panel.c:1409 -+#: panels/info/cc-info-removable-media-panel.c:443 - msgid "blank DVD disc" - msgstr "空白 DVD 光盘" - - # 空白 HD DVD 光盘 --#: ../panels/info/cc-info-panel.c:1410 -+#: panels/info/cc-info-removable-media-panel.c:444 - msgid "blank HD DVD disc" - msgstr "空白 HD DVD 光盘" - --#: ../panels/info/cc-info-panel.c:1411 -+#: panels/info/cc-info-removable-media-panel.c:445 - msgid "Blu-ray video disc" - msgstr "蓝光视频光盘" - --#: ../panels/info/cc-info-panel.c:1412 -+#: panels/info/cc-info-removable-media-panel.c:446 - msgid "e-book reader" - msgstr "电子书阅读器" - --#: ../panels/info/cc-info-panel.c:1413 -+#: panels/info/cc-info-removable-media-panel.c:447 - msgid "HD DVD video disc" - msgstr "HD DVD 视频光盘" - --#: ../panels/info/cc-info-panel.c:1414 -+#: panels/info/cc-info-removable-media-panel.c:448 - msgid "Picture CD" - msgstr "图片 CD" - --#: ../panels/info/cc-info-panel.c:1415 -+#: panels/info/cc-info-removable-media-panel.c:449 - msgid "Super Video CD" --msgstr "超级 VCD " -+msgstr "超级 VCD" - --#: ../panels/info/cc-info-panel.c:1416 -+#: panels/info/cc-info-removable-media-panel.c:450 - msgid "Video CD" - msgstr "视频 CD" - --#: ../panels/info/cc-info-panel.c:1417 -+#: panels/info/cc-info-removable-media-panel.c:451 - msgid "Windows software" - msgstr "Windows 软件" - --#: ../panels/info/cc-info-panel.c:1540 --msgid "Section" --msgstr "节" -+#: panels/info/cc-subscription-details-dialog.c:125 -+msgid "Subscribed" -+msgstr "已订阅" -+ -+#: panels/info/cc-subscription-details-dialog.c:127 -+msgid "No Specific Subscription" -+msgstr "没有特定的订阅" -+ -+#: panels/info/cc-subscription-details-dialog.c:129 -+msgid "Not Subscribed" -+msgstr "未订阅" -+ -+#: panels/info/cc-subscription-details-dialog.c:138 -+msgid "Product Name" -+msgstr "产品名" -+ -+#: panels/info/cc-subscription-details-dialog.c:139 -+msgid "Product ID" -+msgstr "产品 ID" -+ -+#: panels/info/cc-subscription-details-dialog.c:140 -+msgid "Version" -+msgstr "版本" -+ -+#: panels/info/cc-subscription-details-dialog.c:141 -+msgid "Arch" -+msgstr "架构" -+ -+#: panels/info/cc-subscription-details-dialog.c:142 -+msgid "Status" -+msgstr "状态" -+ -+#: panels/info/cc-subscription-details-dialog.c:146 -+msgid "Starts" -+msgstr "开始" -+ -+#: panels/info/cc-subscription-details-dialog.c:147 -+msgid "Ends" -+msgstr "结束" -+ -+#: 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 "注册详情。" -+ -+#: panels/info/cc-subscription-details-dialog.c:188 -+msgid "Subscribe System" -+msgstr "订阅系统" -+ -+#: panels/info/cc-subscription-details-dialog.c:201 -+msgid "Looking For Available Subscriptions…" -+msgstr "寻找可用的订阅......" -+ -+#: panels/info/cc-subscription-details-dialog.c:215 -+msgid "Unregister System" -+msgstr "取消注册系统" -+ -+#: panels/info/cc-subscription-details-dialog.c:229 -+msgid "Unregistering System…" -+msgstr "取消注册系统......" -+ -+#. 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 "未检测到安装的产品。" -+ -+#: panels/info/cc-subscription-details-dialog.ui:42 -+msgid "_Unregister" -+msgstr "(_U)取消注册" -+ -+#: panels/info/cc-subscription-details-dialog.ui:63 -+msgid "_Subscribe" -+msgstr "(_S)订阅" -+ -+#: panels/info/cc-subscription-details-dialog.ui:138 -+msgid "Failed to Unregister System" -+msgstr "注册注册系统失败" -+ -+#: panels/info/cc-subscription-details-dialog.ui:197 -+msgid "This system is subscribed to receive software updates." -+msgstr "本系统已订阅,可接收软件更新。" -+ -+#: panels/info/cc-subscription-details-dialog.ui:215 -+msgid "" -+"This system lacks subscriptions to receive updates for some installed " -+"software." -+msgstr "本系统缺少订阅,无法接收部分安装软件的更新。" -+ -+#: panels/info/cc-subscription-details-dialog.ui:233 -+msgid "This system lacks subscriptions to receive software updates." -+msgstr "本系统缺少订阅,无法接收软件更新。" -+ -+#: panels/info/cc-subscription-details-dialog.ui:251 -+msgid "This system is registered to receive software updates." -+msgstr "本系统已订阅,可接收软件更新。" -+ -+#: panels/info/cc-subscription-details-dialog.ui:269 -+msgid "This system has no supported software installed." -+msgstr "本系统没有安装支持的软件。" - --#: ../panels/info/cc-info-panel.c:1549 ../panels/info/info.ui.h:14 --msgid "Overview" --msgstr "总览" -+#: panels/info/cc-subscription-details-dialog.ui:303 -+msgid "_Unregister…" -+msgstr "(_U)取消注册......" - --#: ../panels/info/cc-info-panel.c:1555 ../panels/info/info.ui.h:21 -+#: panels/info/cc-subscription-details-dialog.ui:324 -+msgid "_Subscribe…" -+msgstr "(_S)订阅......" -+ -+#: panels/info/cc-subscription-details-dialog.ui:357 -+msgid "" -+"Subscribing with Red Hat will allow this system to receive software updates." -+msgstr "在红帽订阅将允许本系统接收软件更新。" -+ -+#: panels/info/cc-subscription-details-dialog.ui:391 -+msgid "" -+"Warning: unregistering this system will result in it no longer receiving " -+"software updates." -+msgstr "警告:取消注册此系统将导致其不会再接收软件更新。" -+ -+#: panels/info/cc-subscription-register-dialog.c:81 -+#: panels/info/cc-subscription-register-dialog.ui:9 -+msgid "Register System" -+msgstr "注册系统" -+ -+#: panels/info/cc-subscription-register-dialog.c:88 -+msgid "Registering System…" -+msgstr "注册系统......" -+ -+#: panels/info/cc-subscription-register-dialog.ui:37 -+msgid "_Register" -+msgstr "(_R)注册" -+ -+#: panels/info/cc-subscription-register-dialog.ui:107 -+msgid "Failed to Register System" -+msgstr "注册系统失败" -+ -+#: panels/info/cc-subscription-register-dialog.ui:159 -+msgid "Register this system with Red Hat to receive software updates." -+msgstr "在红帽注册本系统以接收软件更新。" -+ -+#: panels/info/cc-subscription-register-dialog.ui:179 -+msgid "Registration Server" -+msgstr "注册服务器" -+ -+#: panels/info/cc-subscription-register-dialog.ui:199 -+msgid "Red Hat" -+msgstr "红帽" -+ -+#: panels/info/cc-subscription-register-dialog.ui:212 -+msgid "Custom Address" -+msgstr "自定义地址" -+ -+#: panels/info/cc-subscription-register-dialog.ui:236 -+msgid "_URL" -+msgstr "_URL" -+ -+#: panels/info/cc-subscription-register-dialog.ui:270 -+msgid "Registration Type" -+msgstr "注册类型" -+ -+#: panels/info/cc-subscription-register-dialog.ui:289 -+msgid "Red Hat Account" -+msgstr "红帽账户" -+ -+#: panels/info/cc-subscription-register-dialog.ui:302 -+msgid "Activation Keys" -+msgstr "激活码" -+ -+#: panels/info/cc-subscription-register-dialog.ui:355 -+msgid "_Login" -+msgstr "登录(_L)" -+ -+#: 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 "密码(_P)" -+ -+#: panels/info/cc-subscription-register-dialog.ui:427 -+#: panels/info/cc-subscription-register-dialog.ui:540 -+msgid "_Organization" -+msgstr "(_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 "输入以逗号分隔的激活码。如果激活码的设置有冲突,则以最右边的码为准。" -+ -+#: panels/info/cc-subscription-register-dialog.ui:508 -+msgid "_Activation Keys" -+msgstr "(_A)激活码" -+ -+#: panels/info/gnome-default-apps-panel.desktop.in.in:3 - msgid "Default Applications" - msgstr "默认应用程序" - --#: ../panels/info/cc-info-panel.c:1560 ../panels/info/info.ui.h:29 --msgid "Removable Media" --msgstr "可移动介质" -+#: panels/info/gnome-default-apps-panel.desktop.in.in:4 -+msgid "Configure Default Applications" -+msgstr "配置默认应用程序" - --#: ../panels/info/cc-info-panel.c:1585 --#, c-format --msgid "Version %s" --msgstr "版本 %s" -+#. 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 "星" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/info/gnome-info-panel.desktop.in.in.h:2 --msgid "De­tails" --msgstr "详细信息" -+#. 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 "default;application;preferred;media;" -+ -+#: panels/info/gnome-info-overview-panel.desktop.in.in:3 -+msgid "About" -+msgstr "关于" - --#: ../panels/info/gnome-info-panel.desktop.in.in.h:3 -+#: panels/info/gnome-info-overview-panel.desktop.in.in:4 - msgid "View information about your system" - msgstr "查看系统信息" - -+#. 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: 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-panel.desktop.in.in.h:5 -+#: 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;" --msgstr "" --"device;system;information;memory;processor;version;default;application;" --"preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;设备;系统;信息;" --"内存;处理器;CPU;版本;默认;应用程序;首选;回滚;喜好;音频;视频;光盘;光碟;盘片;可" --"擦写;可移除;媒体;介质;自动运行;" -+msgstr "device;system;information;memory;processor;version;default;application;preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;设备;系统;信息;内存;处理器;CPU;版本;默认;应用程序;首选;回滚;喜好;音频;视频;光盘;光碟;盘片;可擦写;可移除;媒体;介质;自动运行;" - --#: ../panels/info/info.ui.h:1 --msgid "Select how other media should be handled" --msgstr "选择如何处理其他介质" -+#: panels/info/gnome-removable-media-panel.desktop.in.in:3 -+msgid "Removable Media" -+msgstr "可移动介质" - --#: ../panels/info/info.ui.h:2 --msgid "_Action:" --msgstr "动作(_A):" -+#: panels/info/gnome-removable-media-panel.desktop.in.in:4 -+msgid "Configure Removable Media settings" -+msgstr "配置可移动介质" - --#: ../panels/info/info.ui.h:3 --msgid "_Type:" --msgstr "类型(_T):" -+#. 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: 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;" -+msgstr "device;system;default;application;preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;" -+ -+#: panels/info/info-default-apps.ui:31 -+msgid "_Web" -+msgstr "_Web" -+ -+#: panels/info/info-default-apps.ui:43 -+msgid "_Mail" -+msgstr "邮件(_M)" -+ -+#: panels/info/info-default-apps.ui:59 -+msgid "_Calendar" -+msgstr "日历(_C)" -+ -+#: panels/info/info-default-apps.ui:75 -+msgid "M_usic" -+msgstr "音乐(_U)" -+ -+#: panels/info/info-default-apps.ui:91 -+msgid "_Video" -+msgstr "视频(_V)" -+ -+#: panels/info/info-default-apps.ui:162 panels/info/info-removable-media.ui:161 -+msgid "_Photos" -+msgstr "照片(_P)" - --#: ../panels/info/info.ui.h:4 -+#: panels/info/info-overview.ui:61 - msgid "Device name" - msgstr "设备名称" - --#: ../panels/info/info.ui.h:5 -+#: panels/info/info-overview.ui:77 - msgid "Memory" - msgstr "内存" - --#: ../panels/info/info.ui.h:6 -+#: panels/info/info-overview.ui:93 - msgid "Processor" - msgstr "处理器" - --#. To translators: this field contains the distro name, version and type --#: ../panels/info/info.ui.h:8 --msgid "Base system" --msgstr "基本系统" -+#: panels/info/info-overview.ui:109 -+msgid "Graphics" -+msgstr "图形" -+ -+#. To translators: this field contains the distro type -+#: panels/info/info-overview.ui:140 -+msgid "OS type" -+msgstr "操作系统类型" - --#: ../panels/info/info.ui.h:9 -+#: panels/info/info-overview.ui:156 -+msgid "Virtualization" -+msgstr "虚拟化" -+ -+#: panels/info/info-overview.ui:172 - msgid "Disk" - msgstr "磁盘" - --#: ../panels/info/info.ui.h:10 -+#: panels/info/info-overview.ui:277 - msgid "Calculating…" - msgstr "正在计算…" - --#: ../panels/info/info.ui.h:11 --msgid "Graphics" --msgstr "图形" -- --#: ../panels/info/info.ui.h:12 --msgid "Virtualization" --msgstr "虚拟化" -+#: panels/info/info-overview.ui:333 -+msgid "System Not Registered" -+msgstr "系统未注册" - --#: ../panels/info/info.ui.h:13 --msgid "Check for updates" --msgstr "检查更新" -+#: panels/info/info-overview.ui:345 -+msgid "Register this system to receive software updates." -+msgstr "注册本系统以接收软件更新。" - --#: ../panels/info/info.ui.h:15 --msgid "_Web" --msgstr "_Web" -+#: panels/info/info-overview.ui:355 -+msgid "_Register…" -+msgstr "(_R)注册......" - --#: ../panels/info/info.ui.h:16 --msgid "_Mail" --msgstr "邮件(_M)" -+#: panels/info/info-overview.ui:388 -+msgid "Registered System" -+msgstr "注册的系统" - --#: ../panels/info/info.ui.h:17 --msgid "_Calendar" --msgstr "日历(_C)" -+#: panels/info/info-overview.ui:404 -+msgid "System is registered and able to receive software updates." -+msgstr "本系统已注册,可接收软件更新。" - --#: ../panels/info/info.ui.h:18 --msgid "M_usic" --msgstr "音乐(_U)" -+#: panels/info/info-overview.ui:418 -+msgid "System is registered but is unable to receive all software updates." -+msgstr "本系统已注册,但无法接收所有的软件更新。" - --#: ../panels/info/info.ui.h:19 --msgid "_Video" --msgstr "视频(_V)" -+#: panels/info/info-overview.ui:433 -+msgid "_Details" -+msgstr "(_D)详细信息" - --#: ../panels/info/info.ui.h:20 --msgid "_Photos" --msgstr "照片(_P)" -+#: panels/info/info-overview.ui:457 -+msgid "_View Updates" -+msgstr "(_V)查看更新" - --#: ../panels/info/info.ui.h:22 -+#: panels/info/info-removable-media.ui:43 - msgid "Select how media should be handled" - msgstr "选择如何处理介质" - --#: ../panels/info/info.ui.h:23 -+#: panels/info/info-removable-media.ui:74 - msgid "CD _audio" - msgstr "CD 音频(_A)" - --#: ../panels/info/info.ui.h:24 -+#: panels/info/info-removable-media.ui:91 - msgid "_DVD video" - msgstr "_DVD 视频" - --#: ../panels/info/info.ui.h:25 -+#: panels/info/info-removable-media.ui:132 - msgid "_Music player" - msgstr "音乐播放器(_M)" - --#: ../panels/info/info.ui.h:26 -+#: panels/info/info-removable-media.ui:190 - msgid "_Software" - msgstr "软件(_S)" - --#: ../panels/info/info.ui.h:27 -+#: panels/info/info-removable-media.ui:228 - msgid "_Other Media…" - msgstr "其他媒体(_O)…" - --#: ../panels/info/info.ui.h:28 -+#: panels/info/info-removable-media.ui:272 - msgid "_Never prompt or start programs on media insertion" - msgstr "介质插入时从不提示或启动程序(_N)" - --#: ../panels/keyboard/00-multimedia.xml.in.h:1 -+#: panels/info/info-removable-media.ui:331 -+msgid "Select how other media should be handled" -+msgstr "选择如何处理其他介质" -+ -+#: panels/info/info-removable-media.ui:370 -+msgid "_Action:" -+msgstr "动作(_A):" -+ -+#: panels/info/info-removable-media.ui:393 -+msgid "_Type:" -+msgstr "类型(_T):" -+ -+#: panels/keyboard/00-multimedia.xml.in:2 - msgid "Sound and Media" - msgstr "声音和媒体" - --#: ../panels/keyboard/00-multimedia.xml.in.h:2 -+#: panels/keyboard/00-multimedia.xml.in:4 - msgid "Volume mute" - msgstr "静音" - --#: ../panels/keyboard/00-multimedia.xml.in.h:3 -+#: panels/keyboard/00-multimedia.xml.in:6 - msgid "Volume down" - msgstr "减小音量" - --#: ../panels/keyboard/00-multimedia.xml.in.h:4 -+#: panels/keyboard/00-multimedia.xml.in:8 - msgid "Volume up" - msgstr "增大音量" - --#: ../panels/keyboard/00-multimedia.xml.in.h:5 -+#: panels/keyboard/00-multimedia.xml.in:10 - msgid "Launch media player" - msgstr "启动媒体播放器" - --#: ../panels/keyboard/00-multimedia.xml.in.h:6 -+#: panels/keyboard/00-multimedia.xml.in:12 - msgid "Play (or play/pause)" - msgstr "播放(或播放/暂停)" - --#: ../panels/keyboard/00-multimedia.xml.in.h:7 -+#: panels/keyboard/00-multimedia.xml.in:14 - msgid "Pause playback" - msgstr "暂停播放" - --#: ../panels/keyboard/00-multimedia.xml.in.h:8 -+#: panels/keyboard/00-multimedia.xml.in:16 - msgid "Stop playback" - msgstr "停止播放" - --#: ../panels/keyboard/00-multimedia.xml.in.h:9 -+#: panels/keyboard/00-multimedia.xml.in:18 - msgid "Previous track" - msgstr "上一音轨" - --#: ../panels/keyboard/00-multimedia.xml.in.h:10 -+#: panels/keyboard/00-multimedia.xml.in:20 - msgid "Next track" - msgstr "下一音轨" - --#: ../panels/keyboard/00-multimedia.xml.in.h:11 -+#: panels/keyboard/00-multimedia.xml.in:22 - msgid "Eject" - msgstr "弹出" - --#: ../panels/keyboard/01-input-sources.xml.in.h:1 --#: ../panels/universal-access/uap.ui.h:11 -+#: panels/keyboard/01-input-sources.xml.in:4 panels/universal-access/uap.ui:576 - msgid "Typing" - msgstr "打字" - --#: ../panels/keyboard/01-input-sources.xml.in.h:2 -+#: panels/keyboard/01-input-sources.xml.in:8 - msgid "Switch to next input source" - msgstr "切换至下个输入源" - --#: ../panels/keyboard/01-input-sources.xml.in.h:3 -+#: panels/keyboard/01-input-sources.xml.in:13 - msgid "Switch to previous input source" - msgstr "切换至上个输入源" - --#: ../panels/keyboard/01-launchers.xml.in.h:1 -+#: panels/keyboard/01-launchers.xml.in:2 - msgid "Launchers" - msgstr "启动器" - --#: ../panels/keyboard/01-launchers.xml.in.h:2 -+#: panels/keyboard/01-launchers.xml.in:4 - msgid "Launch help browser" - msgstr "启动帮助浏览器" - --#: ../panels/keyboard/01-launchers.xml.in.h:3 ../shell/alt/cc-window.c:274 --#: ../shell/alt/cc-window.c:829 ../shell/cc-window.c:1584 --#: ../shell/gnome-control-center.desktop.in.in.h:1 ../shell/window.ui.h:1 -+#: 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 "设置" - --#: ../panels/keyboard/01-launchers.xml.in.h:4 -+#: panels/keyboard/01-launchers.xml.in:8 - msgid "Launch calculator" - msgstr "启动计算器" - --#: ../panels/keyboard/01-launchers.xml.in.h:5 -+#: panels/keyboard/01-launchers.xml.in:10 - msgid "Launch email client" - msgstr "启动邮件客户端" - --#: ../panels/keyboard/01-launchers.xml.in.h:6 -+#: panels/keyboard/01-launchers.xml.in:12 - msgid "Launch web browser" - msgstr "启动网页浏览器" - --#: ../panels/keyboard/01-launchers.xml.in.h:7 -+#: panels/keyboard/01-launchers.xml.in:14 - msgid "Home folder" - msgstr "主目录" - --#: ../panels/keyboard/01-launchers.xml.in.h:8 -+#: panels/keyboard/01-launchers.xml.in:16 -+#: panels/search/gnome-search-panel.desktop.in.in:3 shell/window.ui:157 -+msgid "Search" -+msgstr "搜索" -+ -+#: panels/keyboard/01-launchers.xml.in:16 - msgctxt "keybinding" - msgid "Search" - msgstr "搜索" - --#: ../panels/keyboard/01-screenshot.xml.in.h:1 -+#: panels/keyboard/01-screenshot.xml.in:2 - msgid "Screenshots" - msgstr "截图" - - # 与下面的剪贴板“位置”相对。 --#. translators: $PICTURES will be replaced by the name of the XDG Pictures directory --#: ../panels/keyboard/01-screenshot.xml.in.h:3 -+#: panels/keyboard/01-screenshot.xml.in:6 - msgid "Save a screenshot to $PICTURES" - msgstr "将屏幕截图保存到 $PICTURES 目录" - --#. translators: $PICTURES will be replaced by the name of the XDG Pictures directory --#: ../panels/keyboard/01-screenshot.xml.in.h:5 -+#: panels/keyboard/01-screenshot.xml.in:10 - msgid "Save a screenshot of a window to $PICTURES" - msgstr "将窗口截图保存到 $PICTURES 目录" - --#. translators: $PICTURES will be replaced by the name of the XDG Pictures directory --#: ../panels/keyboard/01-screenshot.xml.in.h:7 -+#: panels/keyboard/01-screenshot.xml.in:14 - msgid "Save a screenshot of an area to $PICTURES" - msgstr "将选区截图保存到 $PICTURES 目录" - --#: ../panels/keyboard/01-screenshot.xml.in.h:8 -+#: panels/keyboard/01-screenshot.xml.in:17 - msgid "Copy a screenshot to clipboard" - msgstr "复制截图到剪贴板" - --#: ../panels/keyboard/01-screenshot.xml.in.h:9 -+#: panels/keyboard/01-screenshot.xml.in:20 - msgid "Copy a screenshot of a window to clipboard" - msgstr "复制窗口截图到剪贴板" - --#: ../panels/keyboard/01-screenshot.xml.in.h:10 -+#: panels/keyboard/01-screenshot.xml.in:23 - msgid "Copy a screenshot of an area to clipboard" - msgstr "复制选区截图到剪贴板" - --#: ../panels/keyboard/01-screenshot.xml.in.h:11 -+#: panels/keyboard/01-screenshot.xml.in:26 - msgid "Record a short screencast" - msgstr "记录一小段屏幕录像" - --#: ../panels/keyboard/01-system.xml.in.h:1 -+#: panels/keyboard/01-system.xml.in:2 - msgid "System" - msgstr "系统" - --#: ../panels/keyboard/01-system.xml.in.h:2 -+#: panels/keyboard/01-system.xml.in:4 - msgid "Log out" - msgstr "注销" - --#: ../panels/keyboard/01-system.xml.in.h:3 -+#: panels/keyboard/01-system.xml.in:6 - msgid "Lock screen" - msgstr "锁定屏幕" - --#: ../panels/keyboard/50-accessibility.xml.in.h:1 -+#: panels/keyboard/50-accessibility.xml.in:2 -+#: panels/universal-access/gnome-universal-access-panel.desktop.in.in:3 - msgid "Universal Access" - msgstr "通用辅助功能" - --#: ../panels/keyboard/50-accessibility.xml.in.h:2 -+#: panels/keyboard/50-accessibility.xml.in:4 - msgid "Turn zoom on or off" - msgstr "开关屏幕缩放" - --#: ../panels/keyboard/50-accessibility.xml.in.h:3 -+#: panels/keyboard/50-accessibility.xml.in:6 - msgid "Zoom in" - msgstr "放大" - --#: ../panels/keyboard/50-accessibility.xml.in.h:4 -+#: panels/keyboard/50-accessibility.xml.in:8 - msgid "Zoom out" - msgstr "缩小" - --#: ../panels/keyboard/50-accessibility.xml.in.h:5 -+#: panels/keyboard/50-accessibility.xml.in:10 - msgid "Turn screen reader on or off" - msgstr "开关屏幕阅读器" - --#: ../panels/keyboard/50-accessibility.xml.in.h:6 -+#: panels/keyboard/50-accessibility.xml.in:12 - msgid "Turn on-screen keyboard on or off" - msgstr "开关屏幕键盘" - --#: ../panels/keyboard/50-accessibility.xml.in.h:7 -+#: panels/keyboard/50-accessibility.xml.in:14 - msgid "Increase text size" - msgstr "增大文本字号" - --#: ../panels/keyboard/50-accessibility.xml.in.h:8 -+#: panels/keyboard/50-accessibility.xml.in:16 - msgid "Decrease text size" - msgstr "减小文本字号" - --#: ../panels/keyboard/50-accessibility.xml.in.h:9 -+#: panels/keyboard/50-accessibility.xml.in:18 - msgid "High contrast on or off" - msgstr "高对比度开关" - --#: ../panels/keyboard/cc-keyboard-manager.c:514 --#: ../panels/keyboard/cc-keyboard-manager.c:522 --#: ../panels/keyboard/cc-keyboard-manager.c:830 -+#: panels/keyboard/cc-keyboard-manager.c:506 -+#: panels/keyboard/cc-keyboard-manager.c:514 -+#: panels/keyboard/cc-keyboard-manager.c:822 - msgid "Custom Shortcuts" - msgstr "自定义快捷键" - -@@ -1694,13 +2014,13 @@ msgstr "自定义快捷键" - #. - #. translators: - #. * The device has been disabled --#: ../panels/keyboard/cc-keyboard-option.c:276 --#: ../panels/keyboard/cc-keyboard-option.c:395 --#: ../panels/keyboard/keyboard-shortcuts.c:440 --#: ../panels/keyboard/shortcut-editor.ui.h:2 --#: ../panels/network/network-wifi.ui.h:31 --#: ../panels/sound/gvc/gvc-mixer-control.c:1830 --#: ../panels/user-accounts/um-fingerprint-dialog.c:213 -+#: panels/keyboard/cc-keyboard-option.c:263 -+#: panels/keyboard/cc-keyboard-option.c:382 -+#: panels/keyboard/keyboard-shortcuts.c:435 -+#: panels/keyboard/shortcut-editor.ui:96 panels/network/network-proxy.ui:123 -+#: panels/network/network-wifi.ui:782 panels/network/network-wifi.ui:1059 -+#: panels/user-accounts/um-fingerprint-dialog.c:211 -+#: subprojects/gvc/gvc-mixer-control.c:1866 - msgid "Disabled" - msgstr "禁用" - -@@ -1708,7 +2028,7 @@ msgstr "禁用" - #. * chooser'. AltGr is often used for this purpose. See - #. * https://live.gnome.org/Design/SystemSettings/RegionAndLanguage - #. --#: ../panels/keyboard/cc-keyboard-option.c:354 -+#: panels/keyboard/cc-keyboard-option.c:341 - msgid "Alternative Characters Key" - msgstr "替代的字符键" - -@@ -1716,243 +2036,273 @@ msgstr "替代的字符键" - #. * sequences that are combined to form a single character. - #. * See http://en.wikipedia.org/wiki/Compose_key - #. --#: ../panels/keyboard/cc-keyboard-option.c:363 -+#: panels/keyboard/cc-keyboard-option.c:350 - msgid "Compose Key" - msgstr "Compose 键" - --#: ../panels/keyboard/cc-keyboard-option.c:368 -+#: panels/keyboard/cc-keyboard-option.c:355 - msgid "Modifiers-only switch to next source" - msgstr "切换至下一输入源的修饰键" - --#: ../panels/keyboard/cc-keyboard-panel.c:217 -+#: panels/keyboard/cc-keyboard-panel.c:181 -+msgid "Reset All Shortcuts?" -+msgstr "重置所有快捷键?" -+ -+#: panels/keyboard/cc-keyboard-panel.c:184 -+msgid "" -+"Resetting the shortcuts may affect your custom shortcuts. This cannot be " -+"undone." -+msgstr "重新设置快捷方式可能会影响您的自定义快捷方式。这个操作无法被恢复。" -+ -+#: panels/keyboard/cc-keyboard-panel.c:188 -+#: panels/keyboard/shortcut-editor.ui:346 -+#: panels/printers/authentication-dialog.ui:29 -+#: panels/printers/ppd-selection-dialog.ui:27 -+msgid "Cancel" -+msgstr "取消" -+ -+#: panels/keyboard/cc-keyboard-panel.c:189 -+msgid "Reset All" -+msgstr "重置所有" -+ -+#: panels/keyboard/cc-keyboard-panel.c:281 - msgid "Reset the shortcut to its default value" - msgstr "重置快捷键为它的默认值" - --#: ../panels/keyboard/cc-keyboard-shortcut-editor.c:357 -+#: panels/keyboard/cc-keyboard-shortcut-editor.c:413 - #, c-format - msgid "" - "%s is already being used for %s. If you replace it, %s will be " - "disabled" - msgstr "%s 已被用于 %s。如果您替换了它,%s 将被禁用" - --#: ../panels/keyboard/cc-keyboard-shortcut-editor.c:514 -+#: panels/keyboard/cc-keyboard-shortcut-editor.c:583 - msgid "Set Custom Shortcut" - msgstr "设置自定义快捷键" - --#: ../panels/keyboard/cc-keyboard-shortcut-editor.c:514 --#: ../panels/keyboard/shortcut-editor.ui.h:7 -+#: panels/keyboard/cc-keyboard-shortcut-editor.c:583 - msgid "Set Shortcut" - msgstr "设置快捷键" - - #. Setup the top label --#: ../panels/keyboard/cc-keyboard-shortcut-editor.c:523 -+#: panels/keyboard/cc-keyboard-shortcut-editor.c:592 - #, c-format - msgid "Enter new shortcut to change %s." - msgstr "输入新的快捷键以更改%s。" - --#: ../panels/keyboard/cc-keyboard-shortcut-editor.c:945 -+#: panels/keyboard/cc-keyboard-shortcut-editor.c:1019 - msgid "Add Custom Shortcut" - msgstr "添加自定义快捷键" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/keyboard/gnome-keyboard-panel.desktop.in.in.h:2 --msgid "Key­board" -+#: panels/keyboard/gnome-keyboard-panel.desktop.in.in:3 -+msgid "Keyboard" - msgstr "键盘" - --#: ../panels/keyboard/gnome-keyboard-panel.desktop.in.in.h:3 -+#: panels/keyboard/gnome-keyboard-panel.desktop.in.in:4 - msgid "View and change keyboard shortcuts and set your typing preferences" - msgstr "查看和更改快捷并设置打字偏好" - --#. Translators: those are keywords for the keyboard control-center panel --#: ../panels/keyboard/gnome-keyboard-panel.desktop.in.in.h:5 --msgid "Shortcut;Repeat;Blink;" --msgstr "Shortcut;Repeat;Blink;快捷键;重复;闪烁;" -+#. 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: 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 "Shortcut;Workspace;Window;Resize;Zoom;Contrast;Input;Source;Lock;Volume;" -+ -+#: panels/keyboard/gnome-keyboard-panel.ui:67 panels/region/input-options.ui:68 -+#: shell/cc-application.c:255 -+msgid "Keyboard Shortcuts" -+msgstr "键盘快捷键" -+ -+#: panels/keyboard/gnome-keyboard-panel.ui:77 -+msgid "Reset All…" -+msgstr "重置所有......" - --#: ../panels/keyboard/gnome-keyboard-panel.ui.h:1 -+#: panels/keyboard/gnome-keyboard-panel.ui:78 -+msgid "Reset all shortcuts to their default keybindings" -+msgstr "重置所有快捷键为它们的默认值" -+ -+#: panels/keyboard/gnome-keyboard-panel.ui:164 - msgid "No keyboard shortcut found" - msgstr "未找到键盘快捷键" - --#: ../panels/keyboard/gnome-keyboard-panel.ui.h:2 ../shell/panel-list.ui.h:4 -+#: panels/keyboard/gnome-keyboard-panel.ui:175 shell/panel-list.ui:206 - msgid "Try a different search" - msgstr "尝试不同的搜索" - --#: ../panels/keyboard/shortcut-editor.ui.h:1 --msgid "Press Esc to cancel." --msgstr "按 Esc 键取消。" -+#: panels/keyboard/shortcut-editor.ui:68 panels/keyboard/shortcut-editor.ui:318 -+msgid "Press Esc to cancel or Backspace to reset the keyboard shortcut." -+msgstr "按 Esc 键取消或按 Backspace 键重置键盘快捷键。" - --#: ../panels/keyboard/shortcut-editor.ui.h:3 --#: ../panels/sound/gvc-mixer-dialog.c:1493 --#: ../panels/sound/gvc-sound-theme-chooser.c:564 -+#: panels/keyboard/shortcut-editor.ui:156 panels/printers/details-dialog.ui:38 -+#: panels/sound/gvc-mixer-dialog.c:1480 -+#: panels/sound/gvc-sound-theme-chooser.c:554 - msgid "Name" - msgstr "名称" - --#: ../panels/keyboard/shortcut-editor.ui.h:4 -+#: panels/keyboard/shortcut-editor.ui:168 - msgid "Command" - msgstr "命令" - --#: ../panels/keyboard/shortcut-editor.ui.h:5 -+#: panels/keyboard/shortcut-editor.ui:180 - msgid "Shortcut" - msgstr "快捷键" - --#: ../panels/keyboard/shortcut-editor.ui.h:6 --msgid "Edit" --msgstr "编辑" -+#: panels/keyboard/shortcut-editor.ui:259 -+msgid "Set Shortcut…" -+msgstr "设置快捷键......" - --#: ../panels/keyboard/shortcut-editor.ui.h:8 --#: ../panels/network/network-wifi.ui.h:20 -+#: panels/keyboard/shortcut-editor.ui:272 panels/network/network-wifi.ui:594 - msgid "None" - msgstr "无" - --#: ../panels/keyboard/shortcut-editor.ui.h:9 --msgid "Remove" --msgstr "移除" -- --#: ../panels/keyboard/shortcut-editor.ui.h:10 -+#: panels/keyboard/shortcut-editor.ui:303 - msgid "Enter the new shortcut" - msgstr "输入新的快捷键" - --#: ../panels/keyboard/shortcut-editor.ui.h:11 --#: ../panels/printers/authentication-dialog.ui.h:2 --#: ../panels/printers/ppd-selection-dialog.ui.h:2 --msgid "Cancel" --msgstr "取消" -+#: panels/keyboard/shortcut-editor.ui:357 -+msgid "Remove" -+msgstr "移除" - --#: ../panels/keyboard/shortcut-editor.ui.h:12 --#: ../panels/network/connection-editor/ce-page-ip4.c:305 --#: ../panels/network/connection-editor/ce-page-ip6.c:277 -+#: panels/keyboard/shortcut-editor.ui:367 - msgid "Add" - msgstr "添加" - --#: ../panels/keyboard/shortcut-editor.ui.h:13 -+#: panels/keyboard/shortcut-editor.ui:382 - msgid "Replace" - msgstr "替换" - --#: ../panels/keyboard/shortcut-editor.ui.h:14 -+#: panels/keyboard/shortcut-editor.ui:395 - msgid "Set" - msgstr "设置" - --#: ../panels/mouse/cc-mouse-panel.c:82 -+#: panels/mouse/cc-mouse-panel.c:82 panels/wacom/cc-wacom-panel.c:441 - msgid "Test Your _Settings" - msgstr "测试您的设置(_S)" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/mouse/gnome-mouse-panel.desktop.in.in.h:2 --msgid "Mouse & Touch­pad" -+#: panels/mouse/gnome-mouse-panel.desktop.in.in:3 -+msgid "Mouse & Touchpad" - msgstr "鼠标和触摸板" - --#: ../panels/mouse/gnome-mouse-panel.desktop.in.in.h:3 -+#: panels/mouse/gnome-mouse-panel.desktop.in.in:4 - msgid "" - "Change your mouse or touchpad sensitivity and select right or left-handed" - msgstr "改变鼠标和触摸板灵敏度,并选择右手或左手习惯" - --#. Translators: those are keywords for the mouse and touchpad control-center panel --#: ../panels/mouse/gnome-mouse-panel.desktop.in.in.h:5 -+#. 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: 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;Pointer;Click;Tap;Double;Button;Trackball;触摸板;指针;触摸;单击;双" --"击;按钮;轨迹球;" -+msgstr "Trackpad;Pointer;Click;Tap;Double;Button;Trackball;触摸板;指针;触摸;单击;双击;按钮;轨迹球;" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:1 -+#: panels/mouse/gnome-mouse-properties.ui:45 - msgid "General" - msgstr "常规" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:2 -+#: panels/mouse/gnome-mouse-properties.ui:83 - msgid "Primary Button" - msgstr "主按钮" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:3 -+#: panels/mouse/gnome-mouse-properties.ui:102 - msgid "Sets the order of physical buttons on mice and touchpads." - msgstr "设置鼠标和触控板上的物理按钮的排列。" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:4 -+#: panels/mouse/gnome-mouse-properties.ui:131 - msgid "Left" - msgstr "左" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:5 -+#: panels/mouse/gnome-mouse-properties.ui:141 - msgid "Right" - msgstr "右" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:6 -+#: panels/mouse/gnome-mouse-properties.ui:177 - msgid "Mouse" - msgstr "鼠标" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:7 -+#: panels/mouse/gnome-mouse-properties.ui:216 - msgid "Mouse Speed" - msgstr "鼠标速度" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:8 -+#: panels/mouse/gnome-mouse-properties.ui:238 -+#: panels/mouse/gnome-mouse-properties.ui:543 - msgid "Double-click timeout" - msgstr "双击超时" - -+#. Translators: This switch reverses the scrolling direction for mices. The term used comes from OS X so use the same translation if possible. - #. Translators: This switch reverses the scrolling direction for touchpads. The term used comes from OS X so use the same translation if possible. --#: ../panels/mouse/gnome-mouse-properties.ui.h:10 -+#: panels/mouse/gnome-mouse-properties.ui:275 -+#: panels/mouse/gnome-mouse-properties.ui:451 - msgid "Natural Scrolling" - msgstr "自然滚动" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:11 -+#: panels/mouse/gnome-mouse-properties.ui:291 -+#: panels/mouse/gnome-mouse-properties.ui:467 - msgid "Scrolling moves the content, not the view." - msgstr "滚动移动内容而非视图。" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:12 -+#: panels/mouse/gnome-mouse-properties.ui:341 -+#: panels/mouse/gnome-mouse-properties.ui:386 - msgid "Touchpad" - msgstr "触摸板" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:13 -+#: panels/mouse/gnome-mouse-properties.ui:522 - msgid "Touchpad Speed" - msgstr "触摸板速度" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:14 -+#: panels/mouse/gnome-mouse-properties.ui:581 - msgid "Tap to Click" - msgstr "轻拍以点击" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:15 -+#: panels/mouse/gnome-mouse-properties.ui:634 - msgid "Two-finger Scrolling" - msgstr "双指滚动" - --#: ../panels/mouse/gnome-mouse-properties.ui.h:16 -+#: panels/mouse/gnome-mouse-properties.ui:687 - msgid "Edge Scrolling" - msgstr "边缘滚动" - --#: ../panels/mouse/gnome-mouse-test.c:130 --#: ../panels/mouse/gnome-mouse-test.ui.h:1 -+#: panels/mouse/gnome-mouse-test.c:130 panels/mouse/gnome-mouse-test.ui:23 - msgid "Try clicking, double clicking, scrolling" - msgstr "尝试单击、双击、滚动" - --#: ../panels/mouse/gnome-mouse-test.c:135 -+#: panels/mouse/gnome-mouse-test.c:135 - msgid "Five clicks, GEGL time!" - msgstr "点击五次,开始 GEGL!" - --#: ../panels/mouse/gnome-mouse-test.c:140 -+#: panels/mouse/gnome-mouse-test.c:140 - msgid "Double click, primary button" - msgstr "主键双击" - --#: ../panels/mouse/gnome-mouse-test.c:140 -+#: panels/mouse/gnome-mouse-test.c:140 - msgid "Single click, primary button" - msgstr "主键单击" - --#: ../panels/mouse/gnome-mouse-test.c:143 -+#: panels/mouse/gnome-mouse-test.c:143 - msgid "Double click, middle button" - msgstr "中键双击" - --#: ../panels/mouse/gnome-mouse-test.c:143 -+#: panels/mouse/gnome-mouse-test.c:143 - msgid "Single click, middle button" - msgstr "中键单击" - --#: ../panels/mouse/gnome-mouse-test.c:146 -+#: panels/mouse/gnome-mouse-test.c:146 - msgid "Double click, secondary button" - msgstr "辅键双击" - --#: ../panels/mouse/gnome-mouse-test.c:146 -+#: panels/mouse/gnome-mouse-test.c:146 - msgid "Single click, secondary button" - msgstr "辅键单击" - --#. TRANSLATORS: this is to disable the radio hardware in the --#. * network panel --#: ../panels/network/cc-network-panel.c:349 --msgid "Air_plane Mode" --msgstr "飞行模式(_P)" -- --#: ../panels/network/cc-network-panel.c:953 -+#. add proxy to device list -+#: panels/network/cc-network-panel.c:583 - msgid "Network proxy" - msgstr "网络代理" - -@@ -1960,638 +2310,610 @@ msgstr "网络代理" - #. * window for vpn connections, it is also used to display - #. * vpn connections in the device list. - #. --#: ../panels/network/cc-network-panel.c:1129 ../panels/network/net-vpn.c:283 --#: ../panels/network/net-vpn.c:440 -+#: 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 "%s VPN" - --#: ../panels/network/cc-network-panel.c:1194 -+#: panels/network/cc-network-panel.c:810 panels/network/wifi.ui:282 - msgid "Oops, something has gone wrong. Please contact your software vendor." - msgstr "抱歉,发生错误。请联系软件提供商。" - --#: ../panels/network/cc-network-panel.c:1200 -+#: panels/network/cc-network-panel.c:816 - msgid "NetworkManager needs to be running." - msgstr "需要运行 NetworkManager。" - --#: ../panels/network/connection-editor/8021x-security-page.ui.h:1 -+#: panels/network/cc-wifi-panel.c:213 -+#: panels/network/gnome-wifi-panel.desktop.in.in:3 -+#: panels/network/network-wifi.ui:1769 -+msgid "Wi-Fi" -+msgstr "Wi-Fi" -+ -+#: panels/network/connection-editor/8021x-security-page.ui:26 - msgid "802.1x _Security" - msgstr "802.1X 安全性(_S)" - --#: ../panels/network/connection-editor/8021x-security-page.ui.h:2 --#: ../panels/network/connection-editor/security-page.ui.h:3 --#: ../panels/printers/printers.ui.h:14 -+#: panels/network/connection-editor/8021x-security-page.ui:73 -+#: panels/network/connection-editor/security-page.ui:72 -+#: panels/wacom/wacom-stylus-page.ui:108 - msgid "page 1" - msgstr "第 1 页" - --#: ../panels/network/connection-editor/8021x-security-page.ui.h:3 --#: ../panels/network/connection-editor/security-page.ui.h:4 --#: ../panels/network/wireless-security/eap-method-fast.ui.h:5 --#: ../panels/network/wireless-security/eap-method-peap.ui.h:5 --#: ../panels/network/wireless-security/eap-method-ttls.ui.h:2 -+#: panels/network/connection-editor/8021x-security-page.ui:224 -+#: panels/network/connection-editor/security-page.ui:223 -+#: panels/network/wireless-security/eap-method-fast.ui:50 -+#: panels/network/wireless-security/eap-method-peap.ui:48 -+#: panels/network/wireless-security/eap-method-ttls.ui:31 - msgid "Anony_mous identity" - msgstr "匿名身份(_M)" - --#: ../panels/network/connection-editor/8021x-security-page.ui.h:4 --#: ../panels/network/connection-editor/security-page.ui.h:5 -+#: panels/network/connection-editor/8021x-security-page.ui:238 -+#: panels/network/connection-editor/security-page.ui:237 - msgid "Inner _authentication" - msgstr "内部认证(_A)" - --#: ../panels/network/connection-editor/8021x-security-page.ui.h:5 --#: ../panels/network/connection-editor/security-page.ui.h:6 --#: ../panels/printers/printers.ui.h:16 -+#: panels/network/connection-editor/8021x-security-page.ui:281 -+#: panels/network/connection-editor/security-page.ui:280 -+#: panels/wacom/wacom-stylus-page.ui:426 - msgid "page 2" - msgstr "第 2 页" - --#: ../panels/network/connection-editor/ce-page-8021x-security.c:101 --#: ../panels/network/connection-editor/ce-page-security.c:459 --#: ../panels/network/connection-editor/details-page.ui.h:3 --#: ../panels/network/network-wifi.ui.h:6 -+#: panels/network/connection-editor/ce-page-8021x-security.c:101 -+#: panels/network/connection-editor/ce-page-security.c:445 -+#: panels/network/connection-editor/details-page.ui:86 -+#: panels/network/network-wifi.ui:239 - msgid "Security" - msgstr "安全" - --#: ../panels/network/connection-editor/ce-page.c:481 -+#: panels/network/connection-editor/ce-page.c:481 - msgid "automatic" - msgstr "自动" - --#: ../panels/network/connection-editor/ce-page.c:521 -+#: panels/network/connection-editor/ce-page.c:521 - #, c-format - msgid "Profile %d" - msgstr "配置 %d" - - #. TRANSLATORS: this WEP WiFi security --#: ../panels/network/connection-editor/ce-page-details.c:50 --#: ../panels/network/net-device-wifi.c:214 --#: ../panels/network/net-device-wifi.c:390 -+#: panels/network/connection-editor/ce-page-details.c:56 -+#: 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:54 --#: ../panels/network/net-device-wifi.c:218 --#: ../panels/network/net-device-wifi.c:395 --#: ../panels/network/network-wifi.ui.h:19 -+#: panels/network/connection-editor/ce-page-details.c:60 -+#: 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:58 --#: ../panels/network/net-device-wifi.c:222 -+#: panels/network/connection-editor/ce-page-details.c:64 -+#: panels/network/net-device-wifi.c:243 - msgid "WPA2" - msgstr "WPA2" - - #. TRANSLATORS: this Enterprise WiFi security --#: ../panels/network/connection-editor/ce-page-details.c:63 --#: ../panels/network/net-device-wifi.c:227 -+#: panels/network/connection-editor/ce-page-details.c:69 -+#: panels/network/net-device-wifi.c:248 - msgid "Enterprise" - msgstr "企业" - --#: ../panels/network/connection-editor/ce-page-details.c:68 --#: ../panels/network/net-device-wifi.c:232 --#: ../panels/network/net-device-wifi.c:380 -+#: panels/network/connection-editor/ce-page-details.c:74 -+#: panels/network/net-device-wifi.c:253 panels/network/net-device-wifi.c:458 - msgctxt "Wifi security" - msgid "None" - msgstr "无" - --#: ../panels/network/connection-editor/ce-page-details.c:89 --#: ../panels/power/power.ui.h:17 -+#: panels/network/connection-editor/ce-page-details.c:95 -+#: panels/power/power.ui:99 - msgid "Never" - msgstr "从不" - --#: ../panels/network/connection-editor/ce-page-details.c:104 --#: ../panels/network/net-device-ethernet.c:120 --#: ../panels/network/net-device-wifi.c:485 -+#: panels/network/connection-editor/ce-page-details.c:110 -+#: panels/network/net-device-ethernet.c:121 -+#: panels/network/net-device-wifi.c:567 - #, c-format - msgid "%i day ago" - msgid_plural "%i days ago" - msgstr[0] "%i 天前" - - #. Translators: network device speed --#: ../panels/network/connection-editor/ce-page-details.c:153 --#: ../panels/network/net-device-ethernet.c:50 --#: ../panels/network/net-device-wifi.c:542 -+#: panels/network/connection-editor/ce-page-details.c:225 -+#: panels/network/net-device-ethernet.c:50 panels/network/net-device-wifi.c:646 - #, c-format - msgid "%d Mb/s" - msgstr "%d Mb/秒" - --#: ../panels/network/connection-editor/ce-page-details.c:179 --#: ../panels/network/net-device-wifi.c:571 -+#: panels/network/connection-editor/ce-page-details.c:251 -+#: panels/network/net-device-wifi.c:675 - msgctxt "Signal strength" - msgid "None" - msgstr "无" - --#: ../panels/network/connection-editor/ce-page-details.c:181 --#: ../panels/network/net-device-wifi.c:573 -+#: panels/network/connection-editor/ce-page-details.c:253 -+#: panels/network/net-device-wifi.c:677 - msgctxt "Signal strength" - msgid "Weak" - msgstr "较弱" - --#: ../panels/network/connection-editor/ce-page-details.c:183 --#: ../panels/network/net-device-wifi.c:575 -+#: panels/network/connection-editor/ce-page-details.c:255 -+#: panels/network/net-device-wifi.c:679 - msgctxt "Signal strength" - msgid "Ok" - msgstr "一般" - --#: ../panels/network/connection-editor/ce-page-details.c:185 --#: ../panels/network/net-device-wifi.c:577 -+#: panels/network/connection-editor/ce-page-details.c:257 -+#: panels/network/net-device-wifi.c:681 - msgctxt "Signal strength" - msgid "Good" - msgstr "良好" - --#: ../panels/network/connection-editor/ce-page-details.c:187 --#: ../panels/network/net-device-wifi.c:579 -+#: panels/network/connection-editor/ce-page-details.c:259 -+#: panels/network/net-device-wifi.c:683 - msgctxt "Signal strength" - msgid "Excellent" - msgstr "非常好" - --#: ../panels/network/connection-editor/ce-page-details.c:225 --#: ../panels/network/network-wifi.ui.h:46 ../shell/alt/cc-window.c:266 --#: ../shell/panel-list.ui.h:2 -+#: panels/network/connection-editor/ce-page-details.c:302 -+msgid "Forget Connection" -+msgstr "忘记连接" -+ -+#: panels/network/connection-editor/ce-page-details.c:304 -+msgid "Remove Connection Profile" -+msgstr "移除连接档案" -+ -+#: panels/network/connection-editor/ce-page-details.c:306 -+msgid "Remove VPN" -+msgstr "移除 VPN" -+ -+#: panels/network/connection-editor/ce-page-details.c:334 -+#: panels/network/network-wifi.ui:1456 shell/cc-window.c:212 -+#: shell/panel-list.ui:103 - msgid "Details" - msgstr "详细信息" - --#: ../panels/network/connection-editor/ce-page-ethernet.c:215 --#: ../panels/network/connection-editor/ce-page-vpn.c:221 --#: ../panels/network/connection-editor/ce-page-wifi.c:227 --#: ../panels/network/network-wifi.ui.h:47 -+#: panels/network/connection-editor/ce-page-ethernet.c:174 -+#: panels/network/connection-editor/ce-page-vpn.c:188 -+#: panels/network/connection-editor/ce-page-wifi.c:194 -+#: panels/network/network-wifi.ui:1460 - msgid "Identity" - msgstr "身份" - --#: ../panels/network/connection-editor/ce-page-ip4.c:202 --#: ../panels/network/connection-editor/ce-page-ip4.c:461 --#: ../panels/network/connection-editor/ce-page-ip6.c:180 --#: ../panels/network/connection-editor/ce-page-ip6.c:427 --msgid "Address" --msgstr "地址" -- --#: ../panels/network/connection-editor/ce-page-ip4.c:215 --#: ../panels/network/connection-editor/ce-page-ip4.c:474 --msgid "Netmask" --msgstr "子网掩码" -- --#: ../panels/network/connection-editor/ce-page-ip4.c:229 --#: ../panels/network/connection-editor/ce-page-ip4.c:487 --#: ../panels/network/connection-editor/ce-page-ip6.c:206 --#: ../panels/network/connection-editor/ce-page-ip6.c:453 --#: ../panels/network/network-vpn.ui.h:2 --msgid "Gateway" --msgstr "网关" -- --#: ../panels/network/connection-editor/ce-page-ip4.c:250 --#: ../panels/network/connection-editor/ce-page-ip6.c:223 -+#: panels/network/connection-editor/ce-page-ip4.c:251 -+#: panels/network/connection-editor/ce-page-ip6.c:230 - msgid "Delete Address" - msgstr "删除地址" - --#: ../panels/network/connection-editor/ce-page-ip4.c:368 --#: ../panels/network/connection-editor/ce-page-ip6.c:334 --msgid "Server" --msgstr "服务器" -- --#: ../panels/network/connection-editor/ce-page-ip4.c:385 --#: ../panels/network/connection-editor/ce-page-ip6.c:351 --msgid "Delete DNS Server" --msgstr "删除 DNS 服务器" -- --#. Translators: Please see https://en.wikipedia.org/wiki/Metrics_(networking) --#: ../panels/network/connection-editor/ce-page-ip4.c:501 --#: ../panels/network/connection-editor/ce-page-ip6.c:467 --msgctxt "network parameters" --msgid "Metric" --msgstr "权重" -- --#: ../panels/network/connection-editor/ce-page-ip4.c:522 --#: ../panels/network/connection-editor/ce-page-ip6.c:484 -+#: panels/network/connection-editor/ce-page-ip4.c:422 -+#: panels/network/connection-editor/ce-page-ip6.c:390 - msgid "Delete Route" - msgstr "删除路由" - --#: ../panels/network/connection-editor/ce-page-ip4.c:626 --#: ../panels/network/network-wifi.ui.h:27 --msgid "Automatic (DHCP)" --msgstr "自动 (DHCP)" -- --#: ../panels/network/connection-editor/ce-page-ip4.c:630 --#: ../panels/network/connection-editor/ce-page-ip6.c:592 --#: ../panels/network/network-wifi.ui.h:26 --#: ../panels/privacy/cc-privacy-panel.c:217 --msgid "Manual" --msgstr "手动" -- --#: ../panels/network/connection-editor/ce-page-ip4.c:634 --#: ../panels/network/connection-editor/ce-page-ip6.c:596 --msgid "Link-Local Only" --msgstr "仅本地链路" -- --#: ../panels/network/connection-editor/ce-page-ip4.c:979 --#: ../panels/network/network-wifi.ui.h:48 -+#: 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:193 --#: ../panels/network/connection-editor/ce-page-ip6.c:440 --msgid "Prefix" --msgstr "前缀" -- --#: ../panels/network/connection-editor/ce-page-ip6.c:584 --#: ../panels/network/connection-editor/ethernet-page.ui.h:1 --#: ../panels/network/connection-editor/ip4-page.ui.h:4 --#: ../panels/network/connection-editor/ip6-page.ui.h:4 --#: ../panels/network/wireless-security/eap-method-peap.ui.h:2 --#: ../panels/privacy/cc-privacy-panel.c:217 --msgid "Automatic" --msgstr "自动" -- --#: ../panels/network/connection-editor/ce-page-ip6.c:588 --msgid "Automatic, DHCP only" --msgstr "自动,仅 DHCP" -- --#: ../panels/network/connection-editor/ce-page-ip6.c:898 --#: ../panels/network/network-wifi.ui.h:49 -+#: panels/network/connection-editor/ce-page-ip6.c:831 -+#: panels/network/network-wifi.ui:1468 - msgid "IPv6" - msgstr "IPv6" - --#: ../panels/network/connection-editor/ce-page-reset.c:78 --#: ../panels/network/network-wifi.ui.h:51 --msgid "Reset" --msgstr "重置" -- --#: ../panels/network/connection-editor/ce-page-security.c:248 -+#: panels/network/connection-editor/ce-page-security.c:245 - msgctxt "Wi-Fi/Ethernet security" - msgid "None" - msgstr "无" - --#: ../panels/network/connection-editor/ce-page-security.c:271 -+#: panels/network/connection-editor/ce-page-security.c:268 - msgid "WEP 40/128-bit Key (Hex or ASCII)" - msgstr "WEP 40/128 位密钥(Hex 或 ASCII)" - --#: ../panels/network/connection-editor/ce-page-security.c:281 -+#: panels/network/connection-editor/ce-page-security.c:278 - msgid "WEP 128-bit Passphrase" - msgstr "WEP 128 位密码" - --#: ../panels/network/connection-editor/ce-page-security.c:294 --#: ../panels/network/wireless-security/wireless-security.c:463 -+#: panels/network/connection-editor/ce-page-security.c:291 -+#: panels/network/wireless-security/wireless-security.c:465 - msgid "LEAP" - msgstr "LEAP" - --#: ../panels/network/connection-editor/ce-page-security.c:307 -+#: panels/network/connection-editor/ce-page-security.c:304 - msgid "Dynamic WEP (802.1x)" - msgstr "动态 WEP (802.1X)" - --#: ../panels/network/connection-editor/ce-page-security.c:321 -+#: panels/network/connection-editor/ce-page-security.c:318 - msgid "WPA & WPA2 Personal" - msgstr "WPA 和 WPA2 个人" - --#: ../panels/network/connection-editor/ce-page-security.c:335 -+#: panels/network/connection-editor/ce-page-security.c:332 - msgid "WPA & WPA2 Enterprise" - msgstr "WPA 和 WPA2 企业" - --#: ../panels/network/connection-editor/details-page.ui.h:1 --#: ../panels/network/network-wifi.ui.h:4 -+#: panels/network/connection-editor/details-page.ui:18 -+#: panels/network/network-wifi.ui:174 - msgid "Signal Strength" - msgstr "信号强度" - --#: ../panels/network/connection-editor/details-page.ui.h:2 --#: ../panels/network/network-wifi.ui.h:5 -+#: panels/network/connection-editor/details-page.ui:52 -+#: panels/network/network-wifi.ui:207 - msgid "Link speed" - msgstr "链路速度" - --#: ../panels/network/connection-editor/details-page.ui.h:4 --#: ../panels/network/net-device-ethernet.c:153 --#: ../panels/network/network-simple.ui.h:3 --#: ../panels/network/network-wifi.ui.h:7 ../panels/network/panel-common.c:644 -+#: panels/network/connection-editor/details-page.ui:104 -+#: panels/network/net-device-ethernet.c:154 panels/network/network-wifi.ui:256 -+#: panels/network/panel-common.c:644 - msgid "IPv4 Address" - msgstr "IPv4 地址" - --#: ../panels/network/connection-editor/details-page.ui.h:5 --#: ../panels/network/net-device-ethernet.c:154 --#: ../panels/network/net-device-ethernet.c:158 --#: ../panels/network/network-mobile.ui.h:4 --#: ../panels/network/network-simple.ui.h:4 --#: ../panels/network/network-wifi.ui.h:8 ../panels/network/panel-common.c:645 -+#: panels/network/connection-editor/details-page.ui:122 -+#: panels/network/net-device-ethernet.c:155 -+#: panels/network/net-device-ethernet.c:159 -+#: panels/network/network-mobile.ui:189 panels/network/network-wifi.ui:273 -+#: panels/network/panel-common.c:645 - msgid "IPv6 Address" - msgstr "IPv6 地址" - --#: ../panels/network/connection-editor/details-page.ui.h:6 --#: ../panels/network/net-device-ethernet.c:161 --#: ../panels/network/network-simple.ui.h:2 --#: ../panels/network/network-wifi.ui.h:9 -+#: panels/network/connection-editor/details-page.ui:140 -+#: panels/network/net-device-ethernet.c:162 panels/network/network-wifi.ui:290 - msgid "Hardware Address" - msgstr "硬件地址" - --#: ../panels/network/connection-editor/details-page.ui.h:7 --#: ../panels/network/net-device-ethernet.c:165 --#: ../panels/network/network-mobile.ui.h:5 --#: ../panels/network/network-simple.ui.h:5 --#: ../panels/network/network-wifi.ui.h:10 -+#: panels/network/connection-editor/details-page.ui:158 -+#: panels/network/net-device-ethernet.c:166 -+#: panels/network/network-mobile.ui:206 panels/network/network-wifi.ui:307 - msgid "Default Route" - msgstr "默认路由" - --#: ../panels/network/connection-editor/details-page.ui.h:8 --#: ../panels/network/connection-editor/ip4-page.ui.h:3 --#: ../panels/network/connection-editor/ip6-page.ui.h:3 --#: ../panels/network/net-device-ethernet.c:167 --#: ../panels/network/network-mobile.ui.h:6 --#: ../panels/network/network-simple.ui.h:6 --#: ../panels/network/network-wifi.ui.h:11 -+#: panels/network/connection-editor/details-page.ui:177 -+#: panels/network/connection-editor/ip4-page.ui:197 -+#: panels/network/connection-editor/ip6-page.ui:211 -+#: panels/network/net-device-ethernet.c:168 -+#: panels/network/network-mobile.ui:224 panels/network/network-wifi.ui:325 -+#: panels/network/network-wifi.ui:832 panels/network/network-wifi.ui:1109 - msgid "DNS" - msgstr "DNS" - --#: ../panels/network/connection-editor/details-page.ui.h:9 -+#: panels/network/connection-editor/details-page.ui:195 - msgid "Last Used" - msgstr "上次使用" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:2 -+#: panels/network/connection-editor/details-page.ui:324 -+msgid "Connect _automatically" -+msgstr "自动连接(_A)" -+ -+#: panels/network/connection-editor/details-page.ui:343 -+msgid "Make available to _other users" -+msgstr "对其他用户可用(_O)" -+ -+#: panels/network/connection-editor/details-page.ui:376 -+msgid "Restrict background data usage" -+msgstr "限制后台数据使用" -+ -+#: panels/network/connection-editor/details-page.ui:386 -+msgid "Appropriate for connections that have data charges or limits." -+msgstr "适用于有数据收费或限制的连接。" -+ -+#: panels/network/connection-editor/ethernet-page.ui:16 -+#: panels/network/connection-editor/ethernet-page.ui:39 -+#: panels/network/connection-editor/ip4-page.ui:209 -+#: panels/network/connection-editor/ip4-page.ui:277 -+#: panels/network/connection-editor/ip6-page.ui:42 -+#: panels/network/connection-editor/ip6-page.ui:223 -+#: panels/network/connection-editor/ip6-page.ui:291 -+#: panels/network/net-proxy.c:58 panels/network/network-proxy.ui:103 -+#: panels/network/wireless-security/eap-method-peap.ui:22 -+#: panels/privacy/cc-privacy-panel.c:217 -+msgid "Automatic" -+msgstr "自动" -+ -+#: panels/network/connection-editor/ethernet-page.ui:19 - msgid "Twisted Pair (TP)" - msgstr "双绞线 (TP)" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:3 -+#: panels/network/connection-editor/ethernet-page.ui:22 - msgid "Attachment Unit Interface (AUI)" - msgstr "连接单元接口 (AUI)" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:4 -+#: panels/network/connection-editor/ethernet-page.ui:25 - msgid "BNC" - msgstr "BNC" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:5 -+#: panels/network/connection-editor/ethernet-page.ui:28 - msgid "Media Independent Interface (MII)" - msgstr "媒体独立接口 (MII)" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:6 -+#: panels/network/connection-editor/ethernet-page.ui:42 - msgid "10 Mb/s" - msgstr "10 Mb/s" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:7 -+#: panels/network/connection-editor/ethernet-page.ui:45 - msgid "100 Mb/s" - msgstr "100 Mb/s" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:8 -+#: panels/network/connection-editor/ethernet-page.ui:48 - msgid "1 Gb/s" - msgstr "1 Gb/s" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:9 -+#: panels/network/connection-editor/ethernet-page.ui:51 - msgid "10 Gb/s" - msgstr "10 Gb/s" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:10 --#: ../panels/network/connection-editor/vpn-page.ui.h:1 -+#: panels/network/connection-editor/ethernet-page.ui:71 -+#: panels/network/connection-editor/vpn-page.ui:23 - msgid "_Name" - msgstr "名称(_N)" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:11 --#: ../panels/network/connection-editor/wifi-page.ui.h:4 --#: ../panels/network/network-wifi.ui.h:38 -+#: panels/network/connection-editor/ethernet-page.ui:100 -+#: panels/network/connection-editor/wifi-page.ui:68 -+#: panels/network/network-wifi.ui:1261 - msgid "_MAC Address" - msgstr "_MAC 地址" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:12 -+#: panels/network/connection-editor/ethernet-page.ui:146 - msgid "M_TU" - msgstr "M_TU" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:13 --#: ../panels/network/connection-editor/wifi-page.ui.h:5 -+#: panels/network/connection-editor/ethernet-page.ui:163 -+#: panels/network/connection-editor/wifi-page.ui:98 - msgid "_Cloned Address" - msgstr "克隆的地址(_C)" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:14 -+#: panels/network/connection-editor/ethernet-page.ui:178 - msgid "bytes" - msgstr "字节" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:15 --#: ../panels/network/connection-editor/vpn-page.ui.h:3 --msgid "Make available to other _users" --msgstr "对其他用户可用(_U)" -+#: panels/network/connection-editor/ip4-page.ui:27 -+msgid "IPv_4 Method" -+msgstr "IPv_4 方法" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:16 --#: ../panels/network/connection-editor/wifi-page.ui.h:7 --msgid "Connect _automatically" --msgstr "自动连接(_A)" -+#: panels/network/connection-editor/ip4-page.ui:42 -+#: panels/network/network-wifi.ui:778 panels/network/network-wifi.ui:1055 -+msgid "Automatic (DHCP)" -+msgstr "自动 (DHCP)" - --#: ../panels/network/connection-editor/ethernet-page.ui.h:17 --#: ../panels/network/connection-editor/security-page.ui.h:2 --#: ../panels/network/connection-editor/vpn-page.ui.h:2 --msgid "Firewall _Zone" --msgstr "防火墙区域(_Z)" -+#: panels/network/connection-editor/ip4-page.ui:55 -+#: panels/network/connection-editor/ip6-page.ui:69 -+msgid "Link-Local Only" -+msgstr "仅本地链路" - --#: ../panels/network/connection-editor/firewall-helpers.c:49 --#: ../panels/network/connection-editor/firewall-helpers.c:118 --msgctxt "Firewall zone" --msgid "Default" --msgstr "默认" -+#: panels/network/connection-editor/ip4-page.ui:83 -+#: panels/network/connection-editor/ip6-page.ui:97 -+msgid "Disable" -+msgstr "禁用" - --#: ../panels/network/connection-editor/firewall-helpers.c:50 --msgid "The zone defines the trust level of the connection" --msgstr "此区域定义了对连接的信任级别" -+#: panels/network/connection-editor/ip4-page.ui:111 -+#: panels/network/connection-editor/ip6-page.ui:125 -+msgid "Addresses" -+msgstr "地址" - --#: ../panels/network/connection-editor/ip4-page.ui.h:1 --#: ../panels/network/network-wifi.ui.h:24 --msgid "IPv_4" --msgstr "IPv_4" -+#: panels/network/connection-editor/ip4-page.ui:129 -+#: panels/network/connection-editor/ip4-page.ui:313 -+#: panels/network/connection-editor/ip6-page.ui:143 -+#: panels/network/connection-editor/ip6-page.ui:327 -+#: panels/printers/details-dialog.ui:87 -+msgid "Address" -+msgstr "地址" - --#: ../panels/network/connection-editor/ip4-page.ui.h:2 --#: ../panels/network/connection-editor/ip6-page.ui.h:2 --#: ../panels/network/network-wifi.ui.h:25 --msgid "_Addresses" --msgstr "地址(_A)" -+#: panels/network/connection-editor/ip4-page.ui:143 -+#: panels/network/connection-editor/ip4-page.ui:327 -+msgid "Netmask" -+msgstr "子网掩码" - --#: ../panels/network/connection-editor/ip4-page.ui.h:5 --#: ../panels/network/connection-editor/ip6-page.ui.h:5 --msgid "Automatic DNS" -+#: panels/network/connection-editor/ip4-page.ui:157 -+#: panels/network/connection-editor/ip4-page.ui:341 -+#: panels/network/connection-editor/ip6-page.ui:171 -+#: panels/network/connection-editor/ip6-page.ui:355 -+msgid "Gateway" -+msgstr "网关" -+ -+#: panels/network/connection-editor/ip4-page.ui:220 -+#: panels/network/connection-editor/ip6-page.ui:234 -+msgid "Automatic DNS" - msgstr "自动 DNS" - --#: ../panels/network/connection-editor/ip4-page.ui.h:6 --#: ../panels/network/connection-editor/ip6-page.ui.h:6 --#: ../panels/network/network-wifi.ui.h:32 -+#: panels/network/connection-editor/ip4-page.ui:244 -+#: panels/network/connection-editor/ip6-page.ui:258 -+msgid "Separate IP addresses with commas" -+msgstr "用逗号分隔的 IP 地址" -+ -+#: panels/network/connection-editor/ip4-page.ui:265 -+#: panels/network/connection-editor/ip6-page.ui:279 -+#: panels/network/network-wifi.ui:877 panels/network/network-wifi.ui:1154 - msgid "Routes" - msgstr "路由" - --#: ../panels/network/connection-editor/ip4-page.ui.h:7 --#: ../panels/network/connection-editor/ip6-page.ui.h:7 -+#: panels/network/connection-editor/ip4-page.ui:288 -+#: panels/network/connection-editor/ip6-page.ui:302 - msgid "Automatic Routes" - msgstr "自动路由" - --#: ../panels/network/connection-editor/ip4-page.ui.h:8 --#: ../panels/network/connection-editor/ip6-page.ui.h:8 --#: ../panels/network/network-wifi.ui.h:34 -+#. Translators: Please see https://en.wikipedia.org/wiki/Metrics_(networking) -+#: panels/network/connection-editor/ip4-page.ui:354 -+#: panels/network/connection-editor/ip6-page.ui:368 -+msgid "Metric" -+msgstr "Metric" -+ -+#: panels/network/connection-editor/ip4-page.ui:384 -+#: panels/network/connection-editor/ip6-page.ui:398 -+#: panels/network/network-wifi.ui:933 panels/network/network-wifi.ui:1210 - msgid "Use this connection _only for resources on its network" - msgstr "仅对该网络上的资源使用此连接(_O)" - --#: ../panels/network/connection-editor/ip6-page.ui.h:1 --#: ../panels/network/network-wifi.ui.h:36 --msgid "IPv_6" --msgstr "IPv_6" -+#: panels/network/connection-editor/ip6-page.ui:27 -+msgid "IPv_6 Method" -+msgstr "IPv_6 方法" -+ -+#: panels/network/connection-editor/ip6-page.ui:55 -+msgid "Automatic, DHCP only" -+msgstr "自动,仅 DHCP" -+ -+#: panels/network/connection-editor/ip6-page.ui:157 -+#: panels/network/connection-editor/ip6-page.ui:341 -+msgid "Prefix" -+msgstr "前缀" - --#: ../panels/network/connection-editor/net-connection-editor.c:296 -+#: panels/network/connection-editor/net-connection-editor.c:273 - msgid "Unable to open connection editor" - msgstr "无法打开连接编辑器" - --#: ../panels/network/connection-editor/net-connection-editor.c:314 -+#: panels/network/connection-editor/net-connection-editor.c:291 - msgid "New Profile" - msgstr "新配置" - --#: ../panels/network/connection-editor/net-connection-editor.c:635 -+#: panels/network/connection-editor/net-connection-editor.c:603 -+#: panels/network/network.ui:142 - msgid "VPN" - msgstr "VPN" - --#: ../panels/network/connection-editor/net-connection-editor.c:783 -+#: panels/network/connection-editor/net-connection-editor.c:751 - msgid "Import from file…" - msgstr "从文件导入…" - --#: ../panels/network/connection-editor/net-connection-editor.c:817 -+#: panels/network/connection-editor/net-connection-editor.c:785 - msgid "Add VPN" - msgstr "添加 VPN" - --#: ../panels/network/connection-editor/reset-page.ui.h:1 --#: ../panels/network/network-wifi.ui.h:41 --msgid "_Reset" --msgstr "重置(_R)" -- --#: ../panels/network/connection-editor/reset-page.ui.h:2 --#: ../panels/network/net-device-wifi.c:1536 --#: ../panels/network/network-wifi.ui.h:42 --msgid "_Forget" --msgstr "忘记(_F)" -- --#: ../panels/network/connection-editor/reset-page.ui.h:3 --msgid "" --"Reset the settings for this network, including passwords, but remember it as " --"a preferred network" --msgstr "重置这个网络包括密码在内的设置,但仍作为首选连接" -- --#: ../panels/network/connection-editor/reset-page.ui.h:4 --msgid "" --"Remove all details relating to this network and do not try to automatically " --"connect" --msgstr "删除关于这个网络的所有细节,不再尝试自动连接" -- --#: ../panels/network/connection-editor/security-page.ui.h:1 --#: ../panels/network/network-wifi.ui.h:16 -+#: panels/network/connection-editor/security-page.ui:26 -+#: panels/network/network-wifi.ui:529 - msgid "S_ecurity" - msgstr "安全(_E)" - --#: ../panels/network/connection-editor/vpn-helpers.c:141 -+#: panels/network/connection-editor/vpn-helpers.c:141 - msgid "Cannot import VPN connection" - msgstr "无法导入 VPN 连接" - --#: ../panels/network/connection-editor/vpn-helpers.c:143 -+#: panels/network/connection-editor/vpn-helpers.c:143 - #, c-format - msgid "" --"The file '%s' could not be read or does not contain recognized VPN " -+"The file “%s” could not be read or does not contain recognized VPN " - "connection information\n" - "\n" - "Error: %s." --msgstr "" --"文件“%s”无法读取或未包含可识别的 VPN 连接信息\n" -+msgstr "文件“%s”无法读取或未包含可识别的 VPN 连接信息\n" - "\n" - "错误:%s。" - --#: ../panels/network/connection-editor/vpn-helpers.c:178 -+#: panels/network/connection-editor/vpn-helpers.c:178 - msgid "Select file to import" - msgstr "选择要导入的文件" - --#: ../panels/network/connection-editor/vpn-helpers.c:182 --#: ../panels/printers/cc-printers-panel.c:2078 --#: ../panels/sharing/cc-sharing-panel.c:373 --#: ../panels/user-accounts/um-photo-dialog.c:218 -+#: panels/network/connection-editor/vpn-helpers.c:182 -+#: panels/printers/pp-details-dialog.c:332 -+#: panels/sharing/cc-sharing-panel.c:393 -+#: panels/user-accounts/um-photo-dialog.c:231 - msgid "_Open" - msgstr "打开(_O)" - --#: ../panels/network/connection-editor/vpn-helpers.c:230 -+#: panels/network/connection-editor/vpn-helpers.c:230 - #, c-format --msgid "A file named \"%s\" already exists." -+msgid "A file named “%s” already exists." - msgstr "名为“%s”的文件已存在。" - --#: ../panels/network/connection-editor/vpn-helpers.c:232 -+#: panels/network/connection-editor/vpn-helpers.c:232 - msgid "_Replace" - msgstr "替换(_R)" - --#: ../panels/network/connection-editor/vpn-helpers.c:234 -+#: panels/network/connection-editor/vpn-helpers.c:234 - #, c-format - msgid "Do you want to replace %s with the VPN connection you are saving?" - msgstr "您希望用将要保存的 VPN 连接替换 %s 么?" - --#: ../panels/network/connection-editor/vpn-helpers.c:270 -+#: panels/network/connection-editor/vpn-helpers.c:270 - msgid "Cannot export VPN connection" - msgstr "无法导入 VPN 连接" - --#: ../panels/network/connection-editor/vpn-helpers.c:272 -+#: panels/network/connection-editor/vpn-helpers.c:272 - #, c-format - msgid "" --"The VPN connection '%s' could not be exported to %s.\n" -+"The VPN connection “%s” could not be exported to %s.\n" - "\n" - "Error: %s." --msgstr "" --"无法将 VPN 连接“%s”导出到 %s。\n" -+msgstr "无法将 VPN 连接“%s”导出到 %s。\n" - "\n" - "错误:%s。" - --#: ../panels/network/connection-editor/vpn-helpers.c:307 -+#: panels/network/connection-editor/vpn-helpers.c:307 - msgid "Export VPN connection" - msgstr "导出 VPN 连接" - --#: ../panels/network/connection-editor/vpn-page.ui.h:4 -+#: panels/network/connection-editor/vpn-page.ui:58 - msgid "(Error: unable to load VPN connection editor)" - msgstr "(错误:无法载入 VPN 连接编辑器)" - --#: ../panels/network/connection-editor/wifi-page.ui.h:1 --#: ../panels/network/network-wifi.ui.h:14 -+#: panels/network/connection-editor/wifi-page.ui:20 -+#: panels/network/network-wifi.ui:497 - msgid "_SSID" - msgstr "_SSID" - --#: ../panels/network/connection-editor/wifi-page.ui.h:2 --#: ../panels/network/network-wifi.ui.h:15 -+#: panels/network/connection-editor/wifi-page.ui:36 -+#: panels/network/network-wifi.ui:513 - msgid "_BSSID" - msgstr "_BSSID" - --#: ../panels/network/connection-editor/wifi-page.ui.h:3 --#: ../panels/network/network-wifi.ui.h:18 -+#: panels/network/connection-editor/wifi-page.ui:53 -+#: panels/network/network-wifi.ui:562 - msgid "My Home Network" - msgstr "家庭网络" - --#: ../panels/network/connection-editor/wifi-page.ui.h:6 --msgid "Make available to _other users" --msgstr "对其他用户可用(_O)" -- --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/network/gnome-network-panel.desktop.in.in.h:2 --msgid "Net­work" -+#: panels/network/gnome-network-panel.desktop.in.in:3 -+#: panels/network/network-mobile.ui:241 -+msgid "Network" - msgstr "网络" - --#: ../panels/network/gnome-network-panel.desktop.in.in.h:3 -+#: panels/network/gnome-network-panel.desktop.in.in:4 - msgid "Control how you connect to the Internet" - msgstr "控制连接到互联网的方式" - --#. Translators: those are keywords for the network control-center panel --#: ../panels/network/gnome-network-panel.desktop.in.in.h:5 -+#. 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: 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;" --msgstr "" --"Network;Wireless;Wi-Fi;Wifi;IP;LAN;Proxy;WAN;Broadband;Modem;Bluetooth;vpn;" --"DNS;网络;无线;无线保真;无线;互联网协议;局域网;代理;广域网;宽带;调制解调器;蓝" --"牙;虚拟专用网;域名系统;" -+msgstr "Network;Wireless;Wi-Fi;Wifi;IP;LAN;Proxy;WAN;Broadband;Modem;Bluetooth;vpn;DNS;网络;无线;无线保真;无线;互联网协议;局域网;代理;广域网;宽带;调制解调器;蓝牙;虚拟专用网;域名系统;" - --#: ../panels/network/net-device-ethernet.c:106 --#: ../panels/network/net-device-wifi.c:471 -+#: panels/network/gnome-wifi-panel.desktop.in.in:4 -+msgid "Control how you connect to Wi-Fi networks" -+msgstr "控制如何连接到 Wi-Fi 网络" -+ -+#. 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: 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 "Network;Wireless;Wi-Fi;Wifi;IP;LAN;Broadband;DNS;" -+ -+#: panels/network/net-device-ethernet.c:107 -+#: panels/network/net-device-wifi.c:553 - msgid "never" - msgstr "从不" - --#: ../panels/network/net-device-ethernet.c:116 --#: ../panels/network/net-device-wifi.c:481 -+#: panels/network/net-device-ethernet.c:117 -+#: panels/network/net-device-wifi.c:563 - msgid "today" - msgstr "今天" - --#: ../panels/network/net-device-ethernet.c:118 --#: ../panels/network/net-device-wifi.c:483 -+#: panels/network/net-device-ethernet.c:119 -+#: panels/network/net-device-wifi.c:565 - msgid "yesterday" - msgstr "昨天" - --#: ../panels/network/net-device-ethernet.c:156 --#: ../panels/network/network-mobile.ui.h:3 ../panels/network/panel-common.c:647 --#: ../panels/network/panel-common.c:649 ../panels/printers/printers.ui.h:13 -+#: panels/network/net-device-ethernet.c:157 -+#: panels/network/network-mobile.ui:172 panels/network/panel-common.c:647 -+#: panels/network/panel-common.c:649 - msgid "IP Address" - msgstr "IP 地址" - --#: ../panels/network/net-device-ethernet.c:172 --#: ../panels/network/network-wifi.ui.h:12 -+#: panels/network/net-device-ethernet.c:173 panels/network/network-wifi.ui:342 - msgid "Last used" - msgstr "上次使用" - -@@ -2600,83 +2922,85 @@ msgstr "上次使用" - #. * profile. It is also used to display ethernet in the - #. * device list. - #. --#: ../panels/network/net-device-ethernet.c:280 --#: ../panels/network/network-ethernet.ui.h:1 --#: ../panels/network/network-simple.ui.h:1 -+#: panels/network/net-device-ethernet.c:277 -+#: panels/network/network-ethernet.ui:19 panels/network/network-simple.ui:39 - msgid "Wired" - msgstr "有线" - --#: ../panels/network/net-device-ethernet.c:348 --#: ../panels/network/net-device-wifi.c:1694 --#: ../panels/network/network-ethernet.ui.h:3 --#: ../panels/network/network-mobile.ui.h:8 --#: ../panels/network/network-simple.ui.h:8 ../panels/network/network-vpn.ui.h:7 -+#: 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…" - msgstr "选项…" - --#: ../panels/network/net-device-mobile.c:223 -+#: panels/network/net-device-mobile.c:238 - msgid "Add new connection" - msgstr "添加新连接" - --#: ../panels/network/net-device-wifi.c:1205 --msgid "" --"If you have a connection to the Internet other than wireless, you can set up " --"a wireless hotspot to share the connection with others." --msgstr "" --"如果有无线网络以外的方式连接互联网,您可以配置无线热点并与他人共享网络连接。" -- --#: ../panels/network/net-device-wifi.c:1209 -+#: panels/network/net-device-wifi.c:1368 - #, c-format - msgid "Switching on the wireless hotspot will disconnect you from %s." - msgstr "打开无线网热点将使您从 %s 断开。" - --#: ../panels/network/net-device-wifi.c:1213 -+#: panels/network/net-device-wifi.c:1372 - msgid "" - "It is not possible to access the Internet through your wireless while the " - "hotspot is active." - msgstr "启用热点模式时无法通过无线网络访问互联网。" - --#: ../panels/network/net-device-wifi.c:1296 -+#: panels/network/net-device-wifi.c:1379 -+msgid "Turn On Wi-Fi Hotspot?" -+msgstr "打开 Wi-Fi 热点?" -+ -+#: panels/network/net-device-wifi.c:1401 -+msgid "" -+"Wi-Fi hotspots are usually used to share an additional Internet connection " -+"over Wi-Fi." -+msgstr "Wi-Fi 热点通常用于通过 Wi-Fi 共享一个额外的互联网连接。" -+ -+#: panels/network/net-device-wifi.c:1412 -+msgid "_Turn On" -+msgstr "打开(_T)" -+ -+#: panels/network/net-device-wifi.c:1489 - msgid "Stop hotspot and disconnect any users?" - msgstr "停止热点并断开所有用户?" - --#: ../panels/network/net-device-wifi.c:1299 -+#: panels/network/net-device-wifi.c:1492 - msgid "_Stop Hotspot" - msgstr "停止热点(_S)" - --#: ../panels/network/net-device-wifi.c:1397 -+#: panels/network/net-device-wifi.c:1592 - msgid "System policy prohibits use as a Hotspot" - msgstr "系统策略禁止作为热点使用" - --#: ../panels/network/net-device-wifi.c:1400 -+#: panels/network/net-device-wifi.c:1595 - msgid "Wireless device does not support Hotspot mode" - msgstr "无线设备不支持热点模式" - --#: ../panels/network/net-device-wifi.c:1532 -+#: panels/network/net-device-wifi.c:1733 - msgid "" - "Network details for the selected networks, including passwords and any " - "custom configuration will be lost." - msgstr "所选网络的细节,包括密码和全部自定义设置都将丢失。" - --#: ../panels/network/net-device-wifi.c:1842 --msgid "History" --msgstr "历史" -+#: panels/network/net-device-wifi.c:1737 panels/network/network-wifi.ui:1362 -+msgid "_Forget" -+msgstr "忘记(_F)" - --#: ../panels/network/net-device-wifi.c:1846 --#: ../panels/printers/options-dialog.ui.h:2 --#: ../panels/wacom/button-mapping.ui.h:2 ../panels/wacom/cc-wacom-page.c:525 --#: ../panels/wacom/gnome-wacom-properties.ui.h:5 --msgid "_Close" --msgstr "关闭(_C)" -+#: panels/network/net-device-wifi.c:2046 panels/network/net-device-wifi.c:2053 -+msgid "Known Wi-Fi Networks" -+msgstr "已知的 Wi-Fi 网络" - - #. translators: This is the label for the "Forget wireless network" functionality --#: ../panels/network/net-device-wifi.c:1854 -+#: panels/network/net-device-wifi.c:2086 - msgctxt "Wi-Fi Network" - msgid "_Forget" - msgstr "忘记(_F)" - - #. TRANSLATORS: this is when the use leaves the PAC textbox blank --#: ../panels/network/net-proxy.c:67 -+#: panels/network/net-proxy.c:102 - msgid "" - "Web Proxy Autodiscovery is used when a Configuration URL is not provided." - msgstr "若未提供配置 URL,将使用网络代理自动发现。" -@@ -2685,1081 +3009,1008 @@ msgstr "若未提供配置 URL,将使用网络代理自动发现。" - #. * network, then anyone else on that network can tell your - #. * machine that it should proxy all of your web traffic - #. * through them. --#: ../panels/network/net-proxy.c:75 -+#: panels/network/net-proxy.c:110 - msgid "This is not recommended for untrusted public networks." - msgstr "对于不可信的公共网络,不建议这样做。" - --#: ../panels/network/net-proxy.c:410 --msgid "Proxy" --msgstr "代理" -- --#: ../panels/network/network-ethernet.ui.h:2 --msgid "_Add Profile…" --msgstr "添加配置(_A)…" -- --#: ../panels/network/network-mobile.ui.h:1 -+#: panels/network/network-mobile.ui:30 - msgid "IMEI" - msgstr "IMEI" - --#: ../panels/network/network-mobile.ui.h:2 -+#: panels/network/network-mobile.ui:48 - msgid "Provider" - msgstr "提供者" - --#: ../panels/network/network-mobile.ui.h:7 --msgid "Network" --msgstr "网络" -- --#: ../panels/network/network-proxy.ui.h:1 --msgctxt "proxy method" --msgid "None" --msgstr "无" -- --#: ../panels/network/network-proxy.ui.h:2 --msgctxt "proxy method" --msgid "Manual" --msgstr "手动" -- --#: ../panels/network/network-proxy.ui.h:3 --msgctxt "proxy method" --msgid "Automatic" --msgstr "自动" -- --#: ../panels/network/network-proxy.ui.h:4 --msgid "_Method" --msgstr "方式(_M)" -- --#: ../panels/network/network-proxy.ui.h:5 --msgid "_Configuration URL" --msgstr "配置 URL (_C)" -+#: panels/network/network-proxy.ui:47 panels/network/network-proxy.ui:92 -+msgid "Network Proxy" -+msgstr "网络代理" - --#: ../panels/network/network-proxy.ui.h:6 -+#: panels/network/network-proxy.ui:173 - msgid "_HTTP Proxy" - msgstr "_HTTP 代理" - --#: ../panels/network/network-proxy.ui.h:7 -+#: panels/network/network-proxy.ui:192 - msgid "H_TTPS Proxy" - msgstr "H_TTPS 代理" - --#: ../panels/network/network-proxy.ui.h:8 -+#: panels/network/network-proxy.ui:211 - msgid "_FTP Proxy" - msgstr "_FTP 代理" - --#: ../panels/network/network-proxy.ui.h:9 -+#: panels/network/network-proxy.ui:230 - msgid "_Socks Host" - msgstr "_Socks 主机" - --#: ../panels/network/network-proxy.ui.h:10 -+#: panels/network/network-proxy.ui:249 - msgid "_Ignore Hosts" - msgstr "忽略主机(_I)" - --#: ../panels/network/network-proxy.ui.h:11 -+#: panels/network/network-proxy.ui:287 - msgid "HTTP proxy port" - msgstr "HTTP 代理端口" - --#: ../panels/network/network-proxy.ui.h:12 -+#: panels/network/network-proxy.ui:364 - msgid "HTTPS proxy port" - msgstr "HTTPS 代理端口" - --#: ../panels/network/network-proxy.ui.h:13 -+#: panels/network/network-proxy.ui:385 - msgid "FTP proxy port" - msgstr "FTP 代理端口" - --#: ../panels/network/network-proxy.ui.h:14 -+#: panels/network/network-proxy.ui:406 - msgid "Socks proxy port" - msgstr "SOCKS 代理端口" - --#: ../panels/network/network-simple.ui.h:7 -+#: panels/network/network-proxy.ui:435 -+msgid "_Configuration URL" -+msgstr "配置 URL (_C)" -+ -+#: panels/network/network-simple.ui:50 - msgid "Turn device off" - msgstr "关闭设备" - --#: ../panels/network/network.ui.h:1 --msgid "Add Device" --msgstr "添加设备" -- --#: ../panels/network/network.ui.h:2 --msgid "Remove Device" --msgstr "移除设备" -- --#: panels/network/network.ui:102 -+#: panels/network/network.ui:101 - msgid "Other Devices" - msgstr "其他设备" - --#: ../panels/network/network-vpn.ui.h:1 --msgid "VPN Type" --msgstr "VPN 类型" -- --#: ../panels/network/network-vpn.ui.h:3 --msgid "Group Name" --msgstr "组名" -- --#: ../panels/network/network-vpn.ui.h:4 --msgid "Group Password" --msgstr "组密码" -- --#: ../panels/network/network-vpn.ui.h:5 --#: ../panels/printers/authentication-dialog.ui.h:4 --msgid "Username" --msgstr "用户名" -+#: panels/network/network.ui:194 -+msgid "Not set up" -+msgstr "未设置" - --#: ../panels/network/network-vpn.ui.h:6 -+#: panels/network/network-vpn.ui:56 - msgid "Turn VPN connection off" - msgstr "关闭 VPN 连接" - --#: ../panels/network/network-wifi.ui.h:3 -+#: panels/network/network-wifi.ui:127 - msgid "Automatic _Connect" - msgstr "自动连接(_C)" - --#: ../panels/network/network-wifi.ui.h:13 -+#: panels/network/network-wifi.ui:474 - msgid "details" - msgstr "详细信息" - --#: ../panels/network/network-wifi.ui.h:17 --#: ../panels/network/wireless-security/eap-method-leap.ui.h:2 --#: ../panels/network/wireless-security/eap-method-simple.ui.h:2 --#: ../panels/network/wireless-security/ws-leap.ui.h:2 --#: ../panels/network/wireless-security/ws-wpa-psk.ui.h:1 --#: ../panels/sharing/sharing.ui.h:9 --#: ../panels/user-accounts/data/account-dialog.ui.h:12 --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:5 --msgid "_Password" --msgstr "密码(_P)" -- --#: ../panels/network/network-wifi.ui.h:21 -+#: panels/network/network-wifi.ui:622 - msgid "Show P_assword" - msgstr "显示密码(_A)" - --#: ../panels/network/network-wifi.ui.h:22 -+#: panels/network/network-wifi.ui:652 - msgid "Make available to other users" - msgstr "对其他用户可用" - --#: ../panels/network/network-wifi.ui.h:23 -+#: panels/network/network-wifi.ui:680 - msgid "identity" - msgstr "身份" - --#: ../panels/network/network-wifi.ui.h:28 -+#: panels/network/network-wifi.ui:714 -+msgid "IPv_4" -+msgstr "IPv_4" -+ -+#: panels/network/network-wifi.ui:755 panels/network/network-wifi.ui:1032 -+msgid "_Addresses" -+msgstr "地址(_A)" -+ -+#: panels/network/network-wifi.ui:779 panels/network/network-wifi.ui:1056 - msgid "Automatic (DHCP) addresses only" - msgstr "仅自动分配地址 (DHCP)" - --#: ../panels/network/network-wifi.ui.h:29 -+#: panels/network/network-wifi.ui:780 panels/network/network-wifi.ui:1057 - msgid "Link-local only" - msgstr "仅本地链路" - --#: ../panels/network/network-wifi.ui.h:30 -+#: panels/network/network-wifi.ui:781 panels/network/network-wifi.ui:1058 - msgid "Shared with other computers" - msgstr "与其他计算机共享" - --#: ../panels/network/network-wifi.ui.h:33 -+#: panels/network/network-wifi.ui:917 panels/network/network-wifi.ui:1194 - msgid "_Ignore automatically obtained routes" - msgstr "忽略自动获取的路由(_I)" - --#: ../panels/network/network-wifi.ui.h:35 -+#: panels/network/network-wifi.ui:960 - msgid "ipv4" - msgstr "ipv4" - --#: ../panels/network/network-wifi.ui.h:37 -+#: panels/network/network-wifi.ui:991 -+msgid "IPv_6" -+msgstr "IPv_6" -+ -+#: panels/network/network-wifi.ui:1237 - msgid "ipv6" - msgstr "ipv6" - --#: ../panels/network/network-wifi.ui.h:39 -+#: panels/network/network-wifi.ui:1277 - msgid "_Cloned MAC Address" - msgstr "克隆的 MAC 地址(_C)" - --#: ../panels/network/network-wifi.ui.h:40 -+#: panels/network/network-wifi.ui:1327 - msgid "hardware" - msgstr "硬件" - --#: ../panels/network/network-wifi.ui.h:43 -+#: panels/network/network-wifi.ui:1346 -+msgid "_Reset" -+msgstr "重置(_R)" -+ -+#: panels/network/network-wifi.ui:1382 - msgid "" - "Reset the settings for this connection to their defaults, but remember as a " - "preferred connection." - msgstr "将这个连接的设置重置为默认值,但仍作为首选连接。" - --#: ../panels/network/network-wifi.ui.h:44 -+#: panels/network/network-wifi.ui:1399 - msgid "" - "Remove all details relating to this network and do not try to automatically " - "connect to it." - msgstr "删除关于这个网络的所有细节,不再尝试自动连接。" - --#: ../panels/network/network-wifi.ui.h:45 -+#: panels/network/network-wifi.ui:1419 - msgid "reset" - msgstr "重置" - --#: ../panels/network/network-wifi.ui.h:50 -+#: panels/network/network-wifi.ui:1472 - msgid "Hardware" - msgstr "硬件" - --#: ../panels/network/network-wifi.ui.h:52 -+#: panels/network/network-wifi.ui:1476 -+msgctxt "tab" -+msgid "Reset" -+msgstr "重置" -+ -+#: panels/network/network-wifi.ui:1537 - msgid "Wi-Fi Hotspot" - msgstr "Wi-Fi 热点" - --#: ../panels/network/network-wifi.ui.h:53 --msgid "_Turn On" --msgstr "打开(_T)" -- --#: ../panels/network/network-wifi.ui.h:54 --msgid "Wi-Fi" --msgstr "Wi-Fi" -- --#: ../panels/network/network-wifi.ui.h:55 --msgid "Turn Wi-Fi off" --msgstr "关闭 Wi-Fi" -- --#: ../panels/network/network-wifi.ui.h:56 --msgid "_Use as Hotspot…" --msgstr "用作热点(_U)…" -- --#: ../panels/network/network-wifi.ui.h:57 --msgid "_Connect to Hidden Network…" --msgstr "连接到隐藏网络(_C)…" -- --#: ../panels/network/network-wifi.ui.h:58 --msgid "_History" --msgstr "历史(_H)" -- --#: ../panels/network/network-wifi.ui.h:59 -+#: panels/network/network-wifi.ui:1554 - msgid "Switch off to connect to a Wi-Fi network" - msgstr "关闭以连接到无线网络" - --#: ../panels/network/network-wifi.ui.h:60 -+#: panels/network/network-wifi.ui:1603 - msgid "Network Name" - msgstr "网络名称" - --#: ../panels/network/network-wifi.ui.h:61 -+#: panels/network/network-wifi.ui:1621 - msgid "Connected Devices" - msgstr "已连接的设备" - --#: ../panels/network/network-wifi.ui.h:62 -+#: panels/network/network-wifi.ui:1639 - msgid "Security type" - msgstr "安全类型" - --#: ../panels/network/network-wifi.ui.h:63 --#: ../panels/printers/authentication-dialog.ui.h:5 --#: ../panels/user-accounts/data/account-dialog.ui.h:9 -+#: panels/network/network-wifi.ui:1702 -+msgctxt "Wi-Fi passkey" - msgid "Password" - msgstr "密码" - -+#: panels/network/network-wifi.ui:1799 -+msgid "Turn Wi-Fi off" -+msgstr "关闭 Wi-Fi" -+ -+#: panels/network/network-wifi.ui:1831 -+msgid "_Connect to Hidden Network…" -+msgstr "连接到隐藏网络(_C)…" -+ -+#: panels/network/network-wifi.ui:1841 -+msgid "_Turn On Wi-Fi Hotspot…" -+msgstr "(_T)打开 Wi-Fi 热点" -+ -+#: panels/network/network-wifi.ui:1851 -+msgid "_Known Wi-Fi Networks" -+msgstr "(_K)已知的 Wi-Fi 网络" -+ -+#: panels/network/wifi.ui:40 -+msgid "No Wi-Fi Adapter Found" -+msgstr "没有找到 Wi-Fi 适配器" -+ -+#: panels/network/wifi.ui:52 -+msgid "Make sure you have a Wi-Fi adapter plugged and turned on" -+msgstr "确保有一个 Wi-Fi 适配器已连接并打开。" -+ -+#: panels/network/wifi.ui:127 -+msgid "Airplane Mode" -+msgstr "飞行模式" -+ -+#: panels/network/wifi.ui:142 -+msgid "Disables Wi-Fi, Bluetooth and mobile broadband" -+msgstr "禁用 Wi-Fi、蓝牙和移动宽带" -+ -+#: panels/network/wifi.ui:192 -+msgid "Visible Networks" -+msgstr "可见网络" -+ -+#: panels/network/wifi.ui:271 -+msgid "NetworkManager needs to be running" -+msgstr "需要运行 NetworkManager。" -+ - #. TRANSLATORS: AP type --#: ../panels/network/panel-common.c:127 -+#: panels/network/panel-common.c:127 - msgid "Ad-hoc" - msgstr "Ad-hoc" - - #. TRANSLATORS: AP type --#: ../panels/network/panel-common.c:131 -+#: panels/network/panel-common.c:131 - msgid "Infrastructure" - msgstr "架构" - - #. TRANSLATORS: device status - #. TRANSLATORS: VPN status --#: ../panels/network/panel-common.c:147 ../panels/network/panel-common.c:201 -+#: panels/network/panel-common.c:147 panels/network/panel-common.c:201 - msgid "Status unknown" - msgstr "未知状态" - - #. TRANSLATORS: device status --#: ../panels/network/panel-common.c:151 -+#: panels/network/panel-common.c:151 - msgid "Unmanaged" - msgstr "未托管" - - #. TRANSLATORS: device status --#: ../panels/network/panel-common.c:155 -+#: panels/network/panel-common.c:155 - msgid "Unavailable" - msgstr "不可用" - - #. TRANSLATORS: device status - #. TRANSLATORS: VPN status --#: ../panels/network/panel-common.c:165 ../panels/network/panel-common.c:207 -+#: panels/network/panel-common.c:165 panels/network/panel-common.c:207 - msgid "Connecting" - msgstr "正在连接" - - #. TRANSLATORS: device status - #. TRANSLATORS: VPN status --#: ../panels/network/panel-common.c:169 ../panels/network/panel-common.c:211 -+#: panels/network/panel-common.c:169 panels/network/panel-common.c:211 - msgid "Authentication required" - msgstr "需要认证" - - #. TRANSLATORS: device status - #. TRANSLATORS: VPN status --#: ../panels/network/panel-common.c:173 ../panels/network/panel-common.c:215 -+#: panels/network/panel-common.c:173 panels/network/panel-common.c:215 - msgid "Connected" - msgstr "已连接" - - #. TRANSLATORS: device status --#: ../panels/network/panel-common.c:177 -+#: panels/network/panel-common.c:177 - msgid "Disconnecting" - msgstr "正在断开" - - #. TRANSLATORS: device status - #. TRANSLATORS: VPN status --#: ../panels/network/panel-common.c:181 ../panels/network/panel-common.c:219 -+#: panels/network/panel-common.c:181 panels/network/panel-common.c:219 - msgid "Connection failed" - msgstr "连接失败" - - #. TRANSLATORS: device status - #. TRANSLATORS: VPN status --#: ../panels/network/panel-common.c:185 ../panels/network/panel-common.c:227 -+#: panels/network/panel-common.c:185 panels/network/panel-common.c:227 - msgid "Status unknown (missing)" - msgstr "未知状态(丢失)" - - #. TRANSLATORS: VPN status --#: ../panels/network/panel-common.c:223 -+#: panels/network/panel-common.c:223 - msgid "Not connected" - msgstr "未连接" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:248 -+#: panels/network/panel-common.c:248 - msgid "Configuration failed" - msgstr "配置失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:252 -+#: panels/network/panel-common.c:252 - msgid "IP configuration failed" - msgstr "IP 配置失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:256 -+#: panels/network/panel-common.c:256 - msgid "IP configuration expired" - msgstr "IP 配置已过期" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:260 -+#: panels/network/panel-common.c:260 - msgid "Secrets were required, but not provided" - msgstr "需要认证凭据,但没有提供" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:264 -+#: panels/network/panel-common.c:264 - msgid "802.1x supplicant disconnected" - msgstr "802.1X 客户端已断开" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:268 -+#: panels/network/panel-common.c:268 - msgid "802.1x supplicant configuration failed" - msgstr "802.1X 客户端配置失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:272 -+#: panels/network/panel-common.c:272 - msgid "802.1x supplicant failed" - msgstr "802.1X 客户端失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:276 -+#: panels/network/panel-common.c:276 - msgid "802.1x supplicant took too long to authenticate" - msgstr "802.1X 客户端认证耗时过长" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:280 -+#: panels/network/panel-common.c:280 - msgid "PPP service failed to start" - msgstr "PPP 服务启动失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:284 -+#: panels/network/panel-common.c:284 - msgid "PPP service disconnected" - msgstr "PPP 服务已断开" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:288 -+#: panels/network/panel-common.c:288 - msgid "PPP failed" - msgstr "PPP 失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:292 -+#: panels/network/panel-common.c:292 - msgid "DHCP client failed to start" - msgstr "DHCP 客户端启动失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:296 -+#: panels/network/panel-common.c:296 - msgid "DHCP client error" - msgstr "DHCP 客户端错误" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:300 -+#: panels/network/panel-common.c:300 - msgid "DHCP client failed" - msgstr "DHCP 客户端失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:304 -+#: panels/network/panel-common.c:304 - msgid "Shared connection service failed to start" - msgstr "共享连接服务启动失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:308 -+#: panels/network/panel-common.c:308 - msgid "Shared connection service failed" - msgstr "共享连接服务失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:312 -+#: panels/network/panel-common.c:312 - msgid "AutoIP service failed to start" - msgstr "AutoIP 服务启动失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:316 -+#: panels/network/panel-common.c:316 - msgid "AutoIP service error" - msgstr "AutoIP 服务出错" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:320 -+#: panels/network/panel-common.c:320 - msgid "AutoIP service failed" - msgstr "AutoIP 服务失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:324 -+#: panels/network/panel-common.c:324 - msgid "Line busy" - msgstr "线路忙" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:328 -+#: panels/network/panel-common.c:328 - msgid "No dial tone" - msgstr "无拨号音" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:332 -+#: panels/network/panel-common.c:332 - msgid "No carrier could be established" - msgstr "无法建立载波" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:336 -+#: panels/network/panel-common.c:336 - msgid "Dialing request timed out" - msgstr "拨号请求超时" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:340 -+#: panels/network/panel-common.c:340 - msgid "Dialing attempt failed" - msgstr "拨号尝试失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:344 -+#: panels/network/panel-common.c:344 - msgid "Modem initialization failed" - msgstr "调制解调器初始化失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:348 -+#: panels/network/panel-common.c:348 - msgid "Failed to select the specified APN" - msgstr "无法选择指定的 APN" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:352 -+#: panels/network/panel-common.c:352 - msgid "Not searching for networks" - msgstr "未在搜索网络" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:356 -+#: panels/network/panel-common.c:356 - msgid "Network registration denied" - msgstr "网络注册被拒绝" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:360 -+#: panels/network/panel-common.c:360 - msgid "Network registration timed out" - msgstr "网络注册超时" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:364 -+#: panels/network/panel-common.c:364 - msgid "Failed to register with the requested network" - msgstr "无法在请求的网络上注册" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:368 -+#: panels/network/panel-common.c:368 - msgid "PIN check failed" - msgstr "PIN 检查失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:372 -+#: panels/network/panel-common.c:372 - msgid "Firmware for the device may be missing" - msgstr "设备可能缺少固件" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:376 -+#: panels/network/panel-common.c:376 - msgid "Connection disappeared" - msgstr "连接丢失" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:380 -+#: panels/network/panel-common.c:380 - msgid "Existing connection was assumed" - msgstr "已假定为现有连接" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:384 -+#: panels/network/panel-common.c:384 - msgid "Modem not found" - msgstr "未找到调制解调器" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:388 -+#: panels/network/panel-common.c:388 - msgid "Bluetooth connection failed" - msgstr "蓝牙连接失败" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:392 -+#: panels/network/panel-common.c:392 - msgid "SIM Card not inserted" - msgstr "未插入 SIM 卡" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:396 -+#: panels/network/panel-common.c:396 - msgid "SIM Pin required" - msgstr "需要 SIM PIN 码" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:400 -+#: panels/network/panel-common.c:400 - msgid "SIM Puk required" - msgstr "需要 SIM PUK 码" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:404 -+#: panels/network/panel-common.c:404 - msgid "SIM wrong" - msgstr "SIM 错误" - - #. TRANSLATORS: device status reason --#: ../panels/network/panel-common.c:408 -+#: panels/network/panel-common.c:408 - msgid "Connection dependency failed" - msgstr "连接依赖失败" - - #. TRANSLATORS: device status --#: ../panels/network/panel-common.c:433 -+#: panels/network/panel-common.c:433 - msgid "Firmware missing" - msgstr "固件缺失" - - #. TRANSLATORS: device status --#: ../panels/network/panel-common.c:437 -+#: panels/network/panel-common.c:437 - msgid "Cable unplugged" - msgstr "线缆已拔出" - --#: ../panels/network/wireless-security/eap-method.c:69 --msgid "undefined error in 802.1x security (wpa-eap)" --msgstr "802.1x 安全性里未定义的错误 (wpa-eap)" -+#: panels/network/wireless-security/eap-method.c:69 -+msgid "undefined error in 802.1X security (wpa-eap)" -+msgstr "802.1x 安全性(wpa-eap)中未定义的错误" - --#: ../panels/network/wireless-security/eap-method.c:245 -+#: panels/network/wireless-security/eap-method.c:245 - msgid "no file selected" - msgstr "未选择文件" - --#: ../panels/network/wireless-security/eap-method.c:276 -+#: panels/network/wireless-security/eap-method.c:276 - msgid "unspecified error validating eap-method file" - msgstr "验证 eap-method 文件时发生未知错误" - --#: ../panels/network/wireless-security/eap-method.c:480 -+#: panels/network/wireless-security/eap-method.c:451 - msgid "DER, PEM, or PKCS#12 private keys (*.der, *.pem, *.p12, *.key)" - msgstr "DER、PEM 或 PKCS#12 私钥 (*.der, *.pem, *.p12, *.key)" - --#: ../panels/network/wireless-security/eap-method.c:483 -+#: panels/network/wireless-security/eap-method.c:454 - msgid "DER or PEM certificates (*.der, *.pem, *.crt, *.cer)" - msgstr "DER 或 PEM 证书 (*.der, *.pem, *.crt, *.cer)" - --#: ../panels/network/wireless-security/eap-method-fast.c:72 -+#: panels/network/wireless-security/eap-method-fast.c:72 - msgid "missing EAP-FAST PAC file" - msgstr "缺失 EAP-FAST PAC 文件" - --#: ../panels/network/wireless-security/eap-method-fast.c:268 --#: ../panels/network/wireless-security/eap-method-peap.c:302 --#: ../panels/network/wireless-security/eap-method-ttls.c:333 -+#: panels/network/wireless-security/eap-method-fast.c:268 -+#: panels/network/wireless-security/eap-method-peap.c:302 -+#: panels/network/wireless-security/eap-method-ttls.c:351 - msgid "GTC" - msgstr "GTC" - --#: ../panels/network/wireless-security/eap-method-fast.c:283 --#: ../panels/network/wireless-security/eap-method-peap.c:272 --#: ../panels/network/wireless-security/eap-method-ttls.c:288 -+#: panels/network/wireless-security/eap-method-fast.c:283 -+#: panels/network/wireless-security/eap-method-peap.c:272 -+#: panels/network/wireless-security/eap-method-ttls.c:289 - msgid "MSCHAPv2" - msgstr "MSCHAPv2" - --#: ../panels/network/wireless-security/eap-method-fast.c:406 -+#: panels/network/wireless-security/eap-method-fast.c:406 - msgid "Choose a PAC file" - msgstr "选择 PAC 文件" - --#: ../panels/network/wireless-security/eap-method-fast.c:413 -+#: panels/network/wireless-security/eap-method-fast.c:413 - msgid "PAC files (*.pac)" - msgstr "PAC 文件(*.pac)" - --#: ../panels/network/wireless-security/eap-method-fast.ui.h:1 --#: ../panels/network/wireless-security/eap-method-peap.ui.h:1 --#: ../panels/network/wireless-security/eap-method-ttls.ui.h:1 --#: ../panels/network/wireless-security/ws-dynamic-wep.ui.h:1 --#: ../panels/network/wireless-security/ws-wpa-eap.ui.h:1 --#: ../panels/printers/authentication-dialog.ui.h:1 --msgid " " --msgstr " " -- --#: ../panels/network/wireless-security/eap-method-fast.ui.h:2 -+#: panels/network/wireless-security/eap-method-fast.ui:22 - msgid "Anonymous" - msgstr "匿名" - --#: ../panels/network/wireless-security/eap-method-fast.ui.h:3 -+#: panels/network/wireless-security/eap-method-fast.ui:25 - msgid "Authenticated" - msgstr "已认证" - --#: ../panels/network/wireless-security/eap-method-fast.ui.h:4 -+#: panels/network/wireless-security/eap-method-fast.ui:28 - msgid "Both" - msgstr "两者" - --#: ../panels/network/wireless-security/eap-method-fast.ui.h:6 -+#: panels/network/wireless-security/eap-method-fast.ui:76 - msgid "PAC _file" - msgstr "PAC 文件(_F)" - --#: ../panels/network/wireless-security/eap-method-fast.ui.h:7 --#: ../panels/network/wireless-security/eap-method-peap.ui.h:8 --#: ../panels/network/wireless-security/eap-method-ttls.ui.h:5 -+#: panels/network/wireless-security/eap-method-fast.ui:122 -+#: panels/network/wireless-security/eap-method-peap.ui:146 -+#: panels/network/wireless-security/eap-method-ttls.ui:97 - msgid "_Inner authentication" - msgstr "内部认证(_I)" - --#: ../panels/network/wireless-security/eap-method-fast.ui.h:8 -+#: panels/network/wireless-security/eap-method-fast.ui:156 - msgid "Allow automatic PAC pro_visioning" - msgstr "允许自动 PAC 配置(_V)" - --#: ../panels/network/wireless-security/eap-method-leap.c:65 -+#: panels/network/wireless-security/eap-method-leap.c:65 - msgid "missing EAP-LEAP username" - msgstr "缺失 EAP-LEAP 用户名" - --#: ../panels/network/wireless-security/eap-method-leap.c:74 -+#: panels/network/wireless-security/eap-method-leap.c:74 - msgid "missing EAP-LEAP password" - msgstr "缺失 EAP-LEAP 密码" - --#: ../panels/network/wireless-security/eap-method-leap.ui.h:1 --#: ../panels/network/wireless-security/eap-method-simple.ui.h:1 --#: ../panels/network/wireless-security/ws-leap.ui.h:1 --#: ../panels/user-accounts/data/account-dialog.ui.h:4 -+#: panels/network/wireless-security/eap-method-leap.ui:26 -+#: panels/network/wireless-security/eap-method-simple.ui:26 -+#: panels/network/wireless-security/ws-leap.ui:26 -+#: panels/user-accounts/data/account-dialog.ui:142 -+#: panels/user-accounts/data/account-dialog.ui:505 - msgid "_Username" - msgstr "用户名(_U)" - --#: ../panels/network/wireless-security/eap-method-leap.ui.h:3 --#: ../panels/network/wireless-security/eap-method-simple.ui.h:3 --#: ../panels/network/wireless-security/eap-method-tls.ui.h:7 --#: ../panels/network/wireless-security/ws-leap.ui.h:3 --#: ../panels/network/wireless-security/ws-wpa-psk.ui.h:3 -+#: panels/network/wireless-security/eap-method-leap.ui:68 -+#: panels/network/wireless-security/eap-method-simple.ui:85 -+#: panels/network/wireless-security/eap-method-tls.ui:164 -+#: panels/network/wireless-security/ws-leap.ui:68 -+#: panels/network/wireless-security/ws-wpa-psk.ui:76 - msgid "Sho_w password" - msgstr "显示密码(_W)" - --#: ../panels/network/wireless-security/eap-method-peap.c:63 -+#: panels/network/wireless-security/eap-method-peap.c:63 - #, c-format - msgid "invalid EAP-PEAP CA certificate: %s" - msgstr "无效的 EAP-PEAP CA 证书:%s" - --#: ../panels/network/wireless-security/eap-method-peap.c:68 -+#: panels/network/wireless-security/eap-method-peap.c:68 - msgid "invalid EAP-PEAP CA certificate: no certificate specified" - msgstr "无效的 EAP-PEAP CA 证书:未指定证书" - --#: ../panels/network/wireless-security/eap-method-peap.c:287 --#: ../panels/network/wireless-security/eap-method-ttls.c:318 --#: ../panels/network/wireless-security/wireless-security.c:439 -+#: panels/network/wireless-security/eap-method-peap.c:287 -+#: panels/network/wireless-security/eap-method-ttls.c:336 -+#: panels/network/wireless-security/wireless-security.c:441 - msgid "MD5" - msgstr "MD5" - --#: ../panels/network/wireless-security/eap-method-peap.c:381 --#: ../panels/network/wireless-security/eap-method-tls.c:501 --#: ../panels/network/wireless-security/eap-method-ttls.c:412 -+#: panels/network/wireless-security/eap-method-peap.c:381 -+#: panels/network/wireless-security/eap-method-tls.c:492 -+#: panels/network/wireless-security/eap-method-ttls.c:430 - msgid "Choose a Certificate Authority certificate" - msgstr "选择 CA 证书" - --#: ../panels/network/wireless-security/eap-method-peap.ui.h:3 -+#: panels/network/wireless-security/eap-method-peap.ui:25 - msgid "Version 0" - msgstr "版本 0" - --#: ../panels/network/wireless-security/eap-method-peap.ui.h:4 -+#: panels/network/wireless-security/eap-method-peap.ui:28 - msgid "Version 1" - msgstr "版本 1" - --#: ../panels/network/wireless-security/eap-method-peap.ui.h:6 --#: ../panels/network/wireless-security/eap-method-tls.ui.h:3 --#: ../panels/network/wireless-security/eap-method-ttls.ui.h:3 -+#: panels/network/wireless-security/eap-method-peap.ui:74 -+#: panels/network/wireless-security/eap-method-tls.ui:75 -+#: panels/network/wireless-security/eap-method-ttls.ui:57 - msgid "C_A certificate" - msgstr "C_A 证书" - --#: ../panels/network/wireless-security/eap-method-peap.ui.h:7 --#: ../panels/network/wireless-security/eap-method-tls.ui.h:4 --#: ../panels/network/wireless-security/eap-method-ttls.ui.h:4 -+#: panels/network/wireless-security/eap-method-peap.ui:96 -+#: panels/network/wireless-security/eap-method-tls.ui:97 -+#: panels/network/wireless-security/eap-method-ttls.ui:79 - msgid "No CA certificate is _required" - msgstr "不需要 CA 证书(_R)" - --#: ../panels/network/wireless-security/eap-method-peap.ui.h:9 -+#: panels/network/wireless-security/eap-method-peap.ui:114 - msgid "PEAP _version" - msgstr "PEAP 版本(_V)" - --#: ../panels/network/wireless-security/eap-method-simple.c:74 -+#: panels/network/wireless-security/eap-method-simple.c:74 - msgid "missing EAP username" - msgstr "缺失 EAP 用户名" - --#: ../panels/network/wireless-security/eap-method-simple.c:87 -+#: panels/network/wireless-security/eap-method-simple.c:87 - msgid "missing EAP password" - msgstr "缺失 EAP 密码" - --#: ../panels/network/wireless-security/eap-method-tls.c:68 -+#: panels/network/wireless-security/eap-method-tls.c:68 - msgid "missing EAP-TLS identity" - msgstr "缺失 EAP-TLS 身份" - --#: ../panels/network/wireless-security/eap-method-tls.c:77 -+#: panels/network/wireless-security/eap-method-tls.c:77 - #, c-format - msgid "invalid EAP-TLS CA certificate: %s" - msgstr "无效的 EAP-TLS CA 证书:%s" - --#: ../panels/network/wireless-security/eap-method-tls.c:84 -+#: panels/network/wireless-security/eap-method-tls.c:84 - msgid "invalid EAP-TLS CA certificate: no certificate specified" - msgstr "无效的 EAP-TLS CA 证书:未指定证书" - --#: ../panels/network/wireless-security/eap-method-tls.c:95 --msgid "invalid EAP-TLS password: missing" --msgstr "无效的 EAP-TLS 密码:缺失" -- --#: ../panels/network/wireless-security/eap-method-tls.c:109 -+#: panels/network/wireless-security/eap-method-tls.c:100 - #, c-format - msgid "invalid EAP-TLS private-key: %s" - msgstr "无效的 EAP-TLS CA 私钥:%s" - --#: ../panels/network/wireless-security/eap-method-tls.c:119 -+#: panels/network/wireless-security/eap-method-tls.c:110 - #, c-format - msgid "invalid EAP-TLS user-certificate: %s" - msgstr "无效的 EAP-TLS 用户证书:%s" - --#: ../panels/network/wireless-security/eap-method-tls.c:316 -+#: panels/network/wireless-security/eap-method-tls.c:307 - msgid "Unencrypted private keys are insecure" - msgstr "未加密的私钥不安全" - --#: ../panels/network/wireless-security/eap-method-tls.c:319 -+#: panels/network/wireless-security/eap-method-tls.c:310 - msgid "" --"The selected private key does not appear to be protected by a password. " --"This could allow your security credentials to be compromised. Please select " --"a password-protected private key.\n" -+"The selected private key does not appear to be protected by a password. This " -+"could allow your security credentials to be compromised. Please select a " -+"password-protected private key.\n" - "\n" - "(You can password-protect your private key with openssl)" --msgstr "" --"选择的私钥未设置密码,可能使您的安全凭据遭受攻击并失效。请选择一个带有密码的" --"私钥。\n" -+msgstr "选择的私钥未设置密码保护,这可能会使您的安全凭据遭受攻击。请选择一个带有密码保护的私钥。\n" - "\n" - "(您可以使用 openssl 来向私钥添加密码)" - --#: ../panels/network/wireless-security/eap-method-tls.c:495 -+#: panels/network/wireless-security/eap-method-tls.c:486 - msgid "Choose your personal certificate" - msgstr "选择您的个人证书" - --#: ../panels/network/wireless-security/eap-method-tls.c:507 -+#: panels/network/wireless-security/eap-method-tls.c:498 - msgid "Choose your private key" - msgstr "选择您的私钥" - --#: ../panels/network/wireless-security/eap-method-tls.ui.h:1 -+#: panels/network/wireless-security/eap-method-tls.ui:24 - msgid "I_dentity" - msgstr "身份(_D)" - --#: ../panels/network/wireless-security/eap-method-tls.ui.h:2 -+#: panels/network/wireless-security/eap-method-tls.ui:50 - msgid "_User certificate" - msgstr "用户证书(_U)" - --#: ../panels/network/wireless-security/eap-method-tls.ui.h:5 -+#: panels/network/wireless-security/eap-method-tls.ui:115 - msgid "Private _key" - msgstr "私钥(_K)" - --#: ../panels/network/wireless-security/eap-method-tls.ui.h:6 -+#: panels/network/wireless-security/eap-method-tls.ui:140 - msgid "_Private key password" - msgstr "私钥密码(_P)" - --#: ../panels/network/wireless-security/eap-method-ttls.c:63 -+#: panels/network/wireless-security/eap-method-ttls.c:63 - #, c-format - msgid "invalid EAP-TTLS CA certificate: %s" - msgstr "无效的 EAP-TTLS CA 证书:%s" - --#: ../panels/network/wireless-security/eap-method-ttls.c:68 -+#: panels/network/wireless-security/eap-method-ttls.c:68 - msgid "invalid EAP-TTLS CA certificate: no certificate specified" - msgstr "无效的 EAP-TTLS CA 证书:未指定证书" - --#: ../panels/network/wireless-security/eap-method-ttls.c:258 -+#: panels/network/wireless-security/eap-method-ttls.c:259 - msgid "PAP" - msgstr "PAP" - --#: ../panels/network/wireless-security/eap-method-ttls.c:273 -+#: panels/network/wireless-security/eap-method-ttls.c:274 - msgid "MSCHAP" - msgstr "MSCHAP" - --#: ../panels/network/wireless-security/eap-method-ttls.c:303 -+#: panels/network/wireless-security/eap-method-ttls.c:305 -+msgid "MSCHAPv2 (no EAP)" -+msgstr "MSCHAPv2(无 EAP)" -+ -+#: panels/network/wireless-security/eap-method-ttls.c:321 - msgid "CHAP" - msgstr "CHAP" - --#: ../panels/network/wireless-security/wireless-security.c:87 --msgid "Unknown error validating 802.1x security" -+#: panels/network/wireless-security/wireless-security.c:87 -+msgid "Unknown error validating 802.1X security" - msgstr "验证 802.1x 安全性时发生未知错误" - --#: ../panels/network/wireless-security/wireless-security.c:451 -+#: panels/network/wireless-security/wireless-security.c:453 - msgid "TLS" - msgstr "TLS" - --#: ../panels/network/wireless-security/wireless-security.c:475 -+#: panels/network/wireless-security/wireless-security.c:477 - msgid "PWD" - msgstr "PWD" - --#: ../panels/network/wireless-security/wireless-security.c:486 -+#: panels/network/wireless-security/wireless-security.c:488 - msgid "FAST" - msgstr "FAST" - --#: ../panels/network/wireless-security/wireless-security.c:497 -+#: panels/network/wireless-security/wireless-security.c:499 - msgid "Tunneled TLS" - msgstr "隧道 TLS" - --#: ../panels/network/wireless-security/wireless-security.c:508 -+#: panels/network/wireless-security/wireless-security.c:510 - msgid "Protected EAP (PEAP)" - msgstr "受保护的 EAP (PEAP)" - --#: ../panels/network/wireless-security/ws-dynamic-wep.ui.h:2 --#: ../panels/network/wireless-security/ws-wep-key.ui.h:9 --#: ../panels/network/wireless-security/ws-wpa-eap.ui.h:2 -+#: panels/network/wireless-security/ws-dynamic-wep.ui:39 -+#: panels/network/wireless-security/ws-wep-key.ui:115 -+#: panels/network/wireless-security/ws-wpa-eap.ui:33 - msgid "Au_thentication" - msgstr "认证(_T)" - --#: ../panels/network/wireless-security/ws-leap.c:63 -+#: panels/network/wireless-security/ws-leap.c:63 - msgid "missing leap-username" - msgstr "缺失 leap-username" - --#: ../panels/network/wireless-security/ws-leap.c:74 -+#: panels/network/wireless-security/ws-leap.c:74 - msgid "missing leap-password" - msgstr "缺失 leap-password" - --#: ../panels/network/wireless-security/ws-wep-key.c:107 -+#: panels/network/wireless-security/ws-wep-key.c:107 - msgid "missing wep-key" - msgstr "缺失 wep-key" - --#: ../panels/network/wireless-security/ws-wep-key.c:116 -+#: panels/network/wireless-security/ws-wep-key.c:116 - #, c-format - msgid "invalid wep-key: key with a length of %zu must contain only hex-digits" - msgstr "无效的 wep-key:%zu 长度的密钥只能包含十六进制数字" - --#: ../panels/network/wireless-security/ws-wep-key.c:124 -+#: panels/network/wireless-security/ws-wep-key.c:124 - #, c-format - msgid "" - "invalid wep-key: key with a length of %zu must contain only ascii characters" - msgstr "无效的 wep-key:%zu 长度的密钥只能包含 ASCII 字符" - --#: ../panels/network/wireless-security/ws-wep-key.c:130 -+#: panels/network/wireless-security/ws-wep-key.c:130 - #, c-format - msgid "" - "invalid wep-key: wrong key length %zu. A key must be either of length 5/13 " - "(ascii) or 10/26 (hex)" --msgstr "" --"无效的 wep-key:错误的密钥长度 %zu。密钥必须为长度 5/13 (ASCII) 或者 10/26 " --"(十六进制)" -+msgstr "无效的 wep-key:错误的密钥长度 %zu。密钥必须为长度 5/13 (ASCII) 或者 10/26 (十六进制)" - --#: ../panels/network/wireless-security/ws-wep-key.c:137 -+#: panels/network/wireless-security/ws-wep-key.c:137 - msgid "invalid wep-key: passphrase must be non-empty" - msgstr "无效的 wep-key:密码字段不能为空" - --#: ../panels/network/wireless-security/ws-wep-key.c:139 -+#: panels/network/wireless-security/ws-wep-key.c:139 - msgid "invalid wep-key: passphrase must be shorter than 64 characters" - msgstr "无效的 wep-key:密码字段必须短于 64 个字符" - --#: ../panels/network/wireless-security/ws-wep-key.ui.h:1 -+#: panels/network/wireless-security/ws-wep-key.ui:11 - msgid "1 (Default)" - msgstr "1(默认)" - --#: ../panels/network/wireless-security/ws-wep-key.ui.h:2 --msgid "2" --msgstr "2" -- --#: ../panels/network/wireless-security/ws-wep-key.ui.h:3 --msgid "3" --msgstr "3" -- --#: ../panels/network/wireless-security/ws-wep-key.ui.h:4 --msgid "4" --msgstr "4" -- --#: ../panels/network/wireless-security/ws-wep-key.ui.h:5 -+#: panels/network/wireless-security/ws-wep-key.ui:31 - msgid "Open System" - msgstr "开放系统" - --#: ../panels/network/wireless-security/ws-wep-key.ui.h:6 -+#: panels/network/wireless-security/ws-wep-key.ui:34 - msgid "Shared Key" - msgstr "共享密钥" - --#: ../panels/network/wireless-security/ws-wep-key.ui.h:7 -+#: panels/network/wireless-security/ws-wep-key.ui:56 - msgid "_Key" - msgstr "密钥(_K)" - --#: ../panels/network/wireless-security/ws-wep-key.ui.h:8 -+#: panels/network/wireless-security/ws-wep-key.ui:94 - msgid "Sho_w key" - msgstr "显示密钥(_W)" - --#: ../panels/network/wireless-security/ws-wep-key.ui.h:10 -+#: panels/network/wireless-security/ws-wep-key.ui:152 - msgid "WEP inde_x" - msgstr "WEP 索引(_X)" - --#: ../panels/network/wireless-security/ws-wpa-psk.c:70 -+#: panels/network/wireless-security/ws-wpa-psk.c:70 - #, c-format - msgid "" - "invalid wpa-psk: invalid key-length %zu. Must be [8,63] bytes or 64 hex " - "digits" --msgstr "" --"无效的 wep-psk:无效的密钥长度 %zu。必须为 [8,63] 字节或者 64 位十六进制数字" -+msgstr "无效的 wep-psk:无效的密钥长度 %zu。必须为 [8,63] 字节或者 64 位十六进制数字" - --#: ../panels/network/wireless-security/ws-wpa-psk.c:79 -+#: panels/network/wireless-security/ws-wpa-psk.c:79 - msgid "invalid wpa-psk: cannot interpret key with 64 bytes as hex" - msgstr "无效的 wep-psk:无法将 64 字节作为十六进制来解析密钥" - --#: ../panels/network/wireless-security/ws-wpa-psk.ui.h:2 -+#: panels/network/wireless-security/ws-wpa-psk.ui:50 - msgid "_Type" - msgstr "类型(_T)" - --#: ../panels/notifications/cc-notifications-panel.c:257 --#: ../panels/power/cc-power-panel.c:1974 ../panels/power/cc-power-panel.c:1981 --#: ../panels/privacy/cc-privacy-panel.c:190 --#: ../panels/privacy/cc-privacy-panel.c:257 --#: ../panels/universal-access/cc-ua-panel.c:269 --#: ../panels/universal-access/cc-ua-panel.c:590 --#: ../panels/universal-access/cc-ua-panel.c:603 --#: ../panels/universal-access/cc-ua-panel.c:615 --#: ../panels/universal-access/cc-ua-panel.c:786 --msgid "On" --msgstr "开" -- - #. This is the per application switch for message tray usage. --#: ../panels/notifications/edit-dialog.ui.h:2 -+#: panels/notifications/edit-dialog.ui:64 - msgctxt "notifications" - msgid "_Notifications" - msgstr "通知(_N)" - - #. This is the setting to configure sounds associated with notifications. --#: ../panels/notifications/edit-dialog.ui.h:4 -+#: panels/notifications/edit-dialog.ui:116 - msgctxt "notifications" - msgid "Sound _Alerts" - msgstr "声音警告(_A)" - --#: ../panels/notifications/edit-dialog.ui.h:5 -+#: panels/notifications/edit-dialog.ui:172 - msgctxt "notifications" --msgid "Notification _Banners" --msgstr "通知条幅(_B)" -+msgid "Notification _Popups" -+msgstr "通知(_P)弹出窗口" -+ -+#: panels/notifications/edit-dialog.ui:188 -+msgid "" -+"Notifications will continue to appear in the notification list when popups " -+"are disabled." -+msgstr "当弹出窗口被禁用时,通知将继续出现在通知列表中。" - --#. Banners here refers to message tray notifications in the middle of the screen. --#: ../panels/notifications/edit-dialog.ui.h:7 -+#. Popups here refers to message tray notifications in the middle of the screen. -+#: panels/notifications/edit-dialog.ui:253 - msgctxt "notifications" --msgid "Show Message _Content in Banners" --msgstr "在通知条幅中显示消息内容(_C)" -+msgid "Show Message _Content in Popups" -+msgstr "在弹出式窗口中显示消息(_C)内容" - --#: ../panels/notifications/edit-dialog.ui.h:8 -+#: panels/notifications/edit-dialog.ui:304 - msgctxt "notifications" - msgid "_Lock Screen Notifications" - msgstr "锁屏通知(_L)" - --#: ../panels/notifications/edit-dialog.ui.h:9 -+#: panels/notifications/edit-dialog.ui:355 - msgctxt "notifications" - msgid "Show Message C_ontent on Lock Screen" - msgstr "锁屏时显示显示消息内容(_O)" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/notifications/gnome-notifications-panel.desktop.in.in.h:2 --msgid "No­ti­fi­ca­tions" -+#: panels/notifications/gnome-notifications-panel.desktop.in.in:3 -+msgid "Notifications" - msgstr "通知" - --#: ../panels/notifications/gnome-notifications-panel.desktop.in.in.h:3 -+#: panels/notifications/gnome-notifications-panel.desktop.in.in:4 - msgid "Control which notifications are displayed and what they show" - msgstr "控制显示的通知种类及内容" - --#. Translators: those are keywords for the notifications control-center panel --#: ../panels/notifications/gnome-notifications-panel.desktop.in.in.h:5 -+#. 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: 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 "" --"Notifications;Banner;Message;Tray;Popup;通知;横幅;条幅;黑条;消息;托盘;弹出;" -+msgstr "Notifications;Banner;Message;Tray;Popup;" - --#: ../panels/notifications/notifications.ui.h:1 --msgid "Notification _Banners" --msgstr "通知条幅" -+#: panels/notifications/notifications.ui:84 -+msgid "Notification _Popups" -+msgstr "通知(_P)弹出窗口" - --#: ../panels/notifications/notifications.ui.h:2 -+#: panels/notifications/notifications.ui:134 - msgid "_Lock Screen Notifications" - msgstr "锁屏通知(_L)" - - #. List of applications. --#: ../panels/notifications/notifications.ui.h:4 --#: ../panels/privacy/privacy.ui.h:45 ../panels/sound/gvc-mixer-dialog.c:1781 -+#: panels/notifications/notifications.ui:180 panels/privacy/privacy.ui:875 -+#: panels/sound/gvc-mixer-dialog.c:1768 - msgid "Applications" - msgstr "应用程序" - --#: ../panels/online-accounts/cc-online-accounts-add-account-dialog.c:170 -+#: panels/online-accounts/cc-online-accounts-panel.c:148 - msgctxt "Online Account" - msgid "Other" - msgstr "其他" - --#. translators: This is the title of the "Add Account" dialog. --#: ../panels/online-accounts/cc-online-accounts-add-account-dialog.c:291 --#: ../panels/online-accounts/online-accounts.ui.h:2 --msgid "Add Account" --msgstr "添加帐号" -- --#: ../panels/online-accounts/cc-online-accounts-add-account-dialog.c:328 --msgid "Mail" --msgstr "邮件" -- --#: ../panels/online-accounts/cc-online-accounts-add-account-dialog.c:334 --msgid "Calendar" --msgstr "日历" -- --#: ../panels/online-accounts/cc-online-accounts-add-account-dialog.c:340 --msgid "Contacts" --msgstr "联系人" -- --#: ../panels/online-accounts/cc-online-accounts-add-account-dialog.c:346 --msgid "Chat" --msgstr "聊天" -- --#: ../panels/online-accounts/cc-online-accounts-add-account-dialog.c:352 --msgid "Resources" --msgstr "资源" -- --#: ../panels/online-accounts/cc-online-accounts-panel.c:640 --msgid "Error creating account" --msgstr "创建帐号出错" -+#. 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:612 -+#, c-format -+msgid "%s Account" -+msgstr "%s 帐户" - --#: ../panels/online-accounts/cc-online-accounts-panel.c:700 -+#: panels/online-accounts/cc-online-accounts-panel.c:904 - msgid "Error removing account" --msgstr "移除帐号出错" -+msgstr "移除帐户出错" - --#: ../panels/online-accounts/cc-online-accounts-panel.c:736 --msgid "Are you sure you want to remove the account?" --msgstr "确定要移除这个帐号吗?" -- --#: ../panels/online-accounts/cc-online-accounts-panel.c:738 --msgid "This will not remove the account on the server." --msgstr "这不会将该帐号从服务器上移除。" -- --#: ../panels/online-accounts/cc-online-accounts-panel.c:739 --msgid "_Remove" --msgstr "移除(_R)" -+#. Translators: The %s is the username (eg., debarshi.ray@gmail.com -+#. * or rishi). -+#. -+#: panels/online-accounts/cc-online-accounts-panel.c:969 -+#, c-format -+msgid "%s removed" -+msgstr "%s 已移除" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/online-accounts/gnome-online-accounts-panel.desktop.in.in.h:2 --msgid "On­line Accounts" --msgstr "在线帐号" -+#: panels/online-accounts/gnome-online-accounts-panel.desktop.in.in:3 -+msgid "Online Accounts" -+msgstr "在线帐户" - --#: ../panels/online-accounts/gnome-online-accounts-panel.desktop.in.in.h:3 -+#: panels/online-accounts/gnome-online-accounts-panel.desktop.in.in:4 - msgid "Connect to your online accounts and decide what to use them for" - msgstr "连接在线帐号并决定如何使用" - -+#. 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" -+ -+#. 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.h:5 -+#: 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;" --msgstr "" --"Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;" --"Kerberos;IMAP;SMTP;Pocket;ReadItLater;谷歌;脸谱;脸书;推特;雅虎;互联网;网络;在" --"线;聊天;日历;邮件;联系人;云存储;稍后阅读;" -+msgstr "Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;" - --#: ../panels/online-accounts/online-accounts.ui.h:1 --msgid "No online accounts configured" --msgstr "未设置在线帐号" -+#. Translators: This is the button which allows undoing the removal of the printer. -+#: panels/online-accounts/online-accounts.ui:38 panels/printers/printers.ui:71 -+msgid "Undo" -+msgstr "撤销" - --#: ../panels/online-accounts/online-accounts.ui.h:3 --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:11 --msgid "Remove Account" --msgstr "移除帐号" -+#: panels/online-accounts/online-accounts.ui:125 -+msgid "Connect to your data in the cloud" -+msgstr "连接到您在云中的数据" - --#: ../panels/online-accounts/online-accounts.ui.h:4 --msgid "Add an online account" --msgstr "添加在线帐号" -+#: panels/online-accounts/online-accounts.ui:137 -+msgid "No internet connection — connect to set up new online accounts" -+msgstr "没有互联网连接 -- 连接后设置新的在线账户。" - --# 统一下翻译 --#: ../panels/online-accounts/online-accounts.ui.h:5 --msgid "" --"Adding an account allows your applications to access it for documents, mail, " --"contacts, calendar, chat and more." --msgstr "添加一个帐号以让您的应用访问帐号的文档、邮件、联系人、日历、聊天等。" -+#: panels/online-accounts/online-accounts.ui:159 -+msgid "Add an account" -+msgstr "添加在线帐户" -+ -+#: panels/online-accounts/online-accounts.ui:264 -+msgid "Remove Account" -+msgstr "移除帐号" - --#: ../panels/power/cc-power-panel.c:253 -+#: panels/power/cc-power-panel.c:253 - msgid "Unknown time" - msgstr "未知时间" - --#: ../panels/power/cc-power-panel.c:259 -+#: panels/power/cc-power-panel.c:259 - #, c-format - msgid "%i minute" - msgid_plural "%i minutes" - msgstr[0] "%i 分钟" - --#: ../panels/power/cc-power-panel.c:271 -+#: panels/power/cc-power-panel.c:271 - #, c-format - msgid "%i hour" - msgid_plural "%i hours" -@@ -3767,1123 +4018,1217 @@ msgstr[0] "%i 小时" - - #. TRANSLATOR: "%i %s %i %s" are "%i hours %i minutes" - #. * Swap order with "%2$s %2$i %1$s %1$i if needed --#: ../panels/power/cc-power-panel.c:279 -+#: panels/power/cc-power-panel.c:279 - #, c-format - msgid "%i %s %i %s" - msgstr "%i %s %i %s" - --#: ../panels/power/cc-power-panel.c:280 -+#: panels/power/cc-power-panel.c:280 - msgid "hour" - msgid_plural "hours" - msgstr[0] "时" - --#: ../panels/power/cc-power-panel.c:281 -+#: panels/power/cc-power-panel.c:281 - msgid "minute" - msgid_plural "minutes" - msgstr[0] "分" - - #. TRANSLATORS: %1 is a time string, e.g. "1 hour 5 minutes" --#: ../panels/power/cc-power-panel.c:300 -+#: panels/power/cc-power-panel.c:300 - #, c-format - msgid "%s until fully charged" - msgstr "%s 后充满" - - #. TRANSLATORS: %1 is a time string, e.g. "1 hour 5 minutes" --#: ../panels/power/cc-power-panel.c:307 -+#: panels/power/cc-power-panel.c:307 - #, c-format - msgid "Caution: %s remaining" - msgstr "注意:剩余 %s 的电量" - - #. TRANSLATORS: %1 is a time string, e.g. "1 hour 5 minutes" --#: ../panels/power/cc-power-panel.c:312 -+#: panels/power/cc-power-panel.c:312 - #, c-format - msgid "%s remaining" - msgstr "剩余 %s" - - #. TRANSLATORS: primary battery --#: ../panels/power/cc-power-panel.c:317 ../panels/power/cc-power-panel.c:345 -+#: panels/power/cc-power-panel.c:317 panels/power/cc-power-panel.c:345 - msgid "Fully charged" - msgstr "已充满" - - #. TRANSLATORS: primary battery --#: ../panels/power/cc-power-panel.c:321 ../panels/power/cc-power-panel.c:349 -+#: panels/power/cc-power-panel.c:321 panels/power/cc-power-panel.c:349 - msgid "Empty" - msgstr "电池已耗尽" - - #. TRANSLATORS: primary battery --#: ../panels/power/cc-power-panel.c:336 -+#: panels/power/cc-power-panel.c:336 - msgid "Charging" - msgstr "正在充电" - - #. TRANSLATORS: primary battery --#: ../panels/power/cc-power-panel.c:341 -+#: panels/power/cc-power-panel.c:341 - msgid "Discharging" - msgstr "正在放电" - --#: ../panels/power/cc-power-panel.c:464 -+#: panels/power/cc-power-panel.c:464 - msgctxt "Battery name" - msgid "Main" - msgstr "主电池" - --#: ../panels/power/cc-power-panel.c:466 -+#: panels/power/cc-power-panel.c:466 - msgctxt "Battery name" - msgid "Extra" - msgstr "附加电池" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:537 -+#: panels/power/cc-power-panel.c:537 - msgid "Wireless mouse" - msgstr "无线鼠标" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:540 -+#: panels/power/cc-power-panel.c:540 - msgid "Wireless keyboard" - msgstr "无线键盘" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:543 -+#: panels/power/cc-power-panel.c:543 - msgid "Uninterruptible power supply" - msgstr "不间断电源 (UPS)" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:546 -+#: panels/power/cc-power-panel.c:546 - msgid "Personal digital assistant" - msgstr "个人数字助理(PDA)" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:549 -+#: panels/power/cc-power-panel.c:549 - msgid "Cellphone" - msgstr "手机" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:552 -+#: panels/power/cc-power-panel.c:552 - msgid "Media player" - msgstr "媒体播放器" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:555 -+#: panels/power/cc-power-panel.c:555 panels/wacom/cc-wacom-panel.c:837 - msgid "Tablet" - msgstr "手写板" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:558 -+#: panels/power/cc-power-panel.c:558 - msgid "Computer" - msgstr "计算机" - -+#. TRANSLATORS: secondary battery -+#: panels/power/cc-power-panel.c:561 -+msgid "Gaming input device" -+msgstr "游戏输入设备" -+ - #. TRANSLATORS: secondary battery, misc --#: ../panels/power/cc-power-panel.c:561 ../panels/power/cc-power-panel.c:801 --#: ../panels/power/cc-power-panel.c:2366 -+#: panels/power/cc-power-panel.c:564 panels/power/cc-power-panel.c:804 -+#: panels/power/cc-power-panel.c:2380 - msgid "Battery" - msgstr "电池" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:615 -+#: panels/power/cc-power-panel.c:618 - msgctxt "Battery power" - msgid "Charging" - msgstr "正在充电" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:622 -+#: panels/power/cc-power-panel.c:625 - msgctxt "Battery power" - msgid "Caution" - msgstr "警告" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:627 -+#: panels/power/cc-power-panel.c:630 - msgctxt "Battery power" - msgid "Low" - msgstr "低" - - #. TRANSLATORS: secondary battery --#: ../panels/power/cc-power-panel.c:632 -+#: panels/power/cc-power-panel.c:635 - msgctxt "Battery power" - msgid "Good" - msgstr "充足" - - #. TRANSLATORS: primary battery --#: ../panels/power/cc-power-panel.c:637 -+#: panels/power/cc-power-panel.c:640 - msgctxt "Battery power" - msgid "Fully charged" - msgstr "已充满" - - #. TRANSLATORS: primary battery --#: ../panels/power/cc-power-panel.c:641 -+#: panels/power/cc-power-panel.c:644 - msgctxt "Battery power" - msgid "Empty" - msgstr "电池已耗尽" - --#: ../panels/power/cc-power-panel.c:799 -+#: panels/power/cc-power-panel.c:802 - msgid "Batteries" - msgstr "电池" - --#: ../panels/power/cc-power-panel.c:1227 -+#: panels/power/cc-power-panel.c:1242 - msgid "When _idle" - msgstr "空闲时(_I)" - --#: ../panels/power/cc-power-panel.c:1681 -+#: panels/power/cc-power-panel.c:1696 - msgid "Power Saving" - msgstr "节电" - --#: ../panels/power/cc-power-panel.c:1716 -+#: panels/power/cc-power-panel.c:1727 - msgid "_Screen brightness" - msgstr "屏幕亮度(_S)" - --#: ../panels/power/cc-power-panel.c:1735 -+#: panels/power/cc-power-panel.c:1746 - msgid "Automatic brightness" - msgstr "自动亮度" - --#: ../panels/power/cc-power-panel.c:1755 -+#: panels/power/cc-power-panel.c:1766 - msgid "_Keyboard brightness" - msgstr "键盘亮度(_K)" - --#: ../panels/power/cc-power-panel.c:1765 -+#: panels/power/cc-power-panel.c:1776 - msgid "_Dim screen when inactive" - msgstr "无操作时使屏幕变暗(_D)" - --#: ../panels/power/cc-power-panel.c:1790 -+#: panels/power/cc-power-panel.c:1801 - msgid "_Blank screen" - msgstr "空白屏幕(_B)" - --#: ../panels/power/cc-power-panel.c:1827 -+#: panels/power/cc-power-panel.c:1838 - msgid "_Wi-Fi" - msgstr "_Wi-Fi" - --#: ../panels/power/cc-power-panel.c:1832 -+#: panels/power/cc-power-panel.c:1843 - msgid "Turn off Wi-Fi to save power." - msgstr "关闭 Wi-Fi 以节省电源。" - --#: ../panels/power/cc-power-panel.c:1857 -+#: panels/power/cc-power-panel.c:1868 - msgid "_Mobile broadband" - msgstr "移动宽带(_M)" - --#: ../panels/power/cc-power-panel.c:1862 -+#: panels/power/cc-power-panel.c:1873 - msgid "Turn off mobile broadband (3G, 4G, LTE, etc.) to save power." - msgstr "关闭移动宽带(3G、4G、WiMax 等)以节省电源。" - --#: ../panels/power/cc-power-panel.c:1907 -+#: panels/power/cc-power-panel.c:1926 - msgid "_Bluetooth" - msgstr "蓝牙(_B)" - --#: ../panels/power/cc-power-panel.c:1970 -+#: panels/power/cc-power-panel.c:1931 -+msgid "Turn off Bluetooth to save power." -+msgstr "关闭蓝牙以省电。" -+ -+#: panels/power/cc-power-panel.c:1990 - msgid "When on battery power" - msgstr "电池供电时" - --#: ../panels/power/cc-power-panel.c:1972 -+#: panels/power/cc-power-panel.c:1992 - msgid "When plugged in" - msgstr "插入电源时" - --#: ../panels/power/cc-power-panel.c:2067 -+#: panels/power/cc-power-panel.c:2087 - msgid "Suspend" - msgstr "挂起" - --#: ../panels/power/cc-power-panel.c:2068 -+#: panels/power/cc-power-panel.c:2088 -+msgid "Power Off" -+msgstr "电源关闭" -+ -+#: panels/power/cc-power-panel.c:2089 - msgid "Hibernate" - msgstr "休眠" - --#: ../panels/power/cc-power-panel.c:2069 -+#: panels/power/cc-power-panel.c:2090 - msgid "Nothing" - msgstr "不处理" - - #. Frame header --#: ../panels/power/cc-power-panel.c:2183 -+#: panels/power/cc-power-panel.c:2204 - msgid "Suspend & Power Button" - msgstr "挂起和关机按钮" - --#: ../panels/power/cc-power-panel.c:2226 -+#: panels/power/cc-power-panel.c:2243 - msgid "_Automatic suspend" - msgstr "自动挂起(_A)" - --#: ../panels/power/cc-power-panel.c:2227 -+#: panels/power/cc-power-panel.c:2244 - msgid "Automatic suspend" - msgstr "自动挂起" - --#: ../panels/power/cc-power-panel.c:2294 -+#: panels/power/cc-power-panel.c:2311 - msgid "_When the Power Button is pressed" - msgstr "按下电源按钮时(_W)" - --#: ../panels/power/cc-power-panel.c:2420 ../shell/alt/cc-window.c:270 --#: ../shell/panel-list.ui.h:1 -+#: panels/power/cc-power-panel.c:2430 shell/cc-window.c:216 -+#: shell/panel-list.ui:45 - msgid "Devices" - msgstr "设备" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/power/gnome-power-panel.desktop.in.in.h:2 --msgid "Po­wer" -+#: panels/power/gnome-power-panel.desktop.in.in:3 -+msgid "Power" - msgstr "电源" - --#: ../panels/power/gnome-power-panel.desktop.in.in.h:3 -+#: panels/power/gnome-power-panel.desktop.in.in:4 - msgid "View your battery status and change power saving settings" - msgstr "查看电池状态并更改省电设置" - --#. Translators: those are keywords for the power control-center panel --#: ../panels/power/gnome-power-panel.desktop.in.in.h:5 -+#. 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: 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 "" --"Power;Sleep;Suspend;Hibernate;Battery;Brightness;Dim;Blank;Monitor;DPMS;Idle;" --"电源;睡眠;挂起;休眠;电池;亮度;暗;空白;显示器;空闲;" -+msgstr "Power;Sleep;Suspend;Hibernate;Battery;Brightness;Dim;Blank;Monitor;DPMS;Idle;" -+ -+#: panels/power/power.ui:17 -+msgid "20 minutes" -+msgstr "20 分钟" - --#: ../panels/power/power.ui.h:3 -+#: panels/power/power.ui:21 -+msgid "25 minutes" -+msgstr "25 分钟" -+ -+#: panels/power/power.ui:29 - msgid "45 minutes" - msgstr "45 分钟" - --#: ../panels/power/power.ui.h:4 ../panels/privacy/privacy.ui.h:8 -+#: panels/power/power.ui:33 panels/privacy/privacy.ui:42 -+#: panels/privacy/privacy.ui:56 - msgid "1 hour" - msgstr "1 小时" - --#: ../panels/power/power.ui.h:5 -+#: panels/power/power.ui:37 - msgid "80 minutes" - msgstr "80 分钟" - --#: ../panels/power/power.ui.h:6 -+#: panels/power/power.ui:41 - msgid "90 minutes" - msgstr "90 分钟" - --#: ../panels/power/power.ui.h:7 -+#: panels/power/power.ui:45 - msgid "100 minutes" - msgstr "100 分钟" - --#: ../panels/power/power.ui.h:8 -+#: panels/power/power.ui:49 - msgid "2 hours" - msgstr "2 小时" - --#: ../panels/power/power.ui.h:9 ../panels/privacy/privacy.ui.h:3 -+#: panels/power/power.ui:63 panels/privacy/privacy.ui:22 - msgid "1 minute" - msgstr "1 分钟" - --#: ../panels/power/power.ui.h:10 ../panels/privacy/privacy.ui.h:4 -+#: panels/power/power.ui:67 panels/privacy/privacy.ui:26 - msgid "2 minutes" - msgstr "2 分钟" - --#: ../panels/power/power.ui.h:11 ../panels/privacy/privacy.ui.h:5 -+#: panels/power/power.ui:71 panels/privacy/privacy.ui:30 - msgid "3 minutes" - msgstr "3 分钟" - --#: ../panels/power/power.ui.h:12 -+#: panels/power/power.ui:75 - msgid "4 minutes" - msgstr "4 分钟" - --#: ../panels/power/power.ui.h:13 ../panels/privacy/privacy.ui.h:6 -+#: panels/power/power.ui:79 panels/privacy/privacy.ui:34 - msgid "5 minutes" - msgstr "5 分钟" - --#: ../panels/power/power.ui.h:14 -+#: panels/power/power.ui:83 - msgid "8 minutes" - msgstr "8 分钟" - --#: ../panels/power/power.ui.h:15 -+#: panels/power/power.ui:87 - msgid "10 minutes" - msgstr "10 分钟" - --#: ../panels/power/power.ui.h:16 -+#: panels/power/power.ui:91 - msgid "12 minutes" - msgstr "12 分钟" - --#: ../panels/power/power.ui.h:18 -+#: panels/power/power.ui:155 - msgid "Automatic Suspend" - msgstr "自动挂起" - --#: ../panels/power/power.ui.h:19 -+#: panels/power/power.ui:180 - msgid "_Plugged In" - msgstr "已插入电源(_P)" - --#: ../panels/power/power.ui.h:20 -+#: panels/power/power.ui:196 - msgid "On _Battery Power" - msgstr "使用电池时(_B)" - --#: ../panels/power/power.ui.h:21 ../panels/universal-access/uap.ui.h:33 -+#: panels/power/power.ui:241 panels/power/power.ui:301 -+#: panels/universal-access/uap.ui:1501 - msgid "Delay" - msgstr "延迟" - --#: ../panels/printers/authentication-dialog.ui.h:3 -+#: panels/printers/authentication-dialog.ui:11 -+msgid " " -+msgstr " " -+ -+#: panels/printers/authentication-dialog.ui:42 - msgid "Authenticate" - msgstr "认证" - --#: ../panels/printers/authentication-dialog.ui.h:6 -+#. Translators: This is a username on a print server. -+#: panels/printers/authentication-dialog.ui:80 -+#: panels/printers/jobs-dialog.ui:57 panels/printers/new-printer-dialog.ui:361 -+msgid "Username" -+msgstr "用户名" -+ -+#. Translators: This is a password needed for printing. -+#: panels/printers/authentication-dialog.ui:96 -+#: panels/printers/jobs-dialog.ui:70 panels/printers/new-printer-dialog.ui:382 -+#: panels/user-accounts/data/account-dialog.ui:240 -+msgid "Password" -+msgstr "密码" -+ -+#: panels/printers/authentication-dialog.ui:139 -+#: panels/printers/new-printer-dialog.ui:336 - msgid "Authentication Required" - msgstr "需要认证" - --#. Translators: The printer is low on toner --#: ../panels/printers/cc-printers-panel.c:684 --msgid "Low on toner" --msgstr "墨粉不足" -+#. Translators: %s is the printer name -+#: panels/printers/cc-printers-panel.c:842 -+#, c-format -+msgid "Printer “%s” has been deleted" -+msgstr "打印机 \"%s\" 已被删除" - --#. Translators: The printer has no toner left --#: ../panels/printers/cc-printers-panel.c:686 --msgid "Out of toner" --msgstr "墨粉用尽" -+#. Translators: Addition of the new printer failed. -+#: panels/printers/cc-printers-panel.c:1142 -+msgid "Failed to add new printer." -+msgstr "添加新打印机失败。" - --#. Translators: "Developer" is a chemical for photo development, --#. * http://en.wikipedia.org/wiki/Photographic_developer --#: ../panels/printers/cc-printers-panel.c:689 --msgid "Low on developer" --msgstr "显影剂不足" -+#. Translators: The XML file containing user interface can not be loaded -+#: panels/printers/cc-printers-panel.c:1514 -+#, c-format -+msgid "Could not load ui: %s" -+msgstr "无法载入界面:%s" - --#. Translators: "Developer" is a chemical for photo development, --#. * http://en.wikipedia.org/wiki/Photographic_developer --#: ../panels/printers/cc-printers-panel.c:692 --msgid "Out of developer" --msgstr "显影剂用尽" -+#: panels/printers/details-dialog.ui:63 panels/printers/printer-entry.ui:223 -+msgid "Location" -+msgstr "位置" - --#. Translators: "marker" is one color bin of the printer --#: ../panels/printers/cc-printers-panel.c:694 --msgid "Low on a marker supply" --msgstr "标记墨水不足" -+#. Translators: Name of column showing printer drivers -+#: panels/printers/details-dialog.ui:111 -+#: panels/printers/pp-ppd-selection-dialog.c:250 -+msgid "Driver" -+msgstr "驱动" - --#. Translators: "marker" is one color bin of the printer --#: ../panels/printers/cc-printers-panel.c:696 --msgid "Out of a marker supply" --msgstr "标记墨水用尽" -+#: panels/printers/details-dialog.ui:147 -+msgid "Searching for preferred drivers…" -+msgstr "正在搜索首选驱动…..." - --#. Translators: One or more covers on the printer are open --#: ../panels/printers/cc-printers-panel.c:698 --msgid "Open cover" --msgstr "打开上盖" -+#: panels/printers/details-dialog.ui:169 -+msgid "Search for Drivers" -+msgstr "搜索驱动" - --#. Translators: One or more doors on the printer are open --#: ../panels/printers/cc-printers-panel.c:700 --msgid "Open door" --msgstr "打开后盖" -+#: panels/printers/details-dialog.ui:177 -+msgid "Select from Database…" -+msgstr "从数据库选择…..." - --#. Translators: At least one input tray is low on media --#: ../panels/printers/cc-printers-panel.c:702 --msgid "Low on paper" --msgstr "纸张不足" -+#: panels/printers/details-dialog.ui:185 -+msgid "Install PPD File…" -+msgstr "安装 PPD 文件…..." - --#. Translators: At least one input tray is empty --#: ../panels/printers/cc-printers-panel.c:704 --msgid "Out of paper" --msgstr "纸张用尽" -+#: panels/printers/gnome-printers-panel.desktop.in.in:3 -+msgid "Printers" -+msgstr "打印机" - --#. Translators: The printer is offline --#: ../panels/printers/cc-printers-panel.c:706 --msgctxt "printer state" --msgid "Offline" --msgstr "离线" -+#: panels/printers/gnome-printers-panel.desktop.in.in:4 -+msgid "Add printers, view printer jobs and decide how you want to print" -+msgstr "添加打印机,查看打印任务和管理打印" - --#. Translators: Someone has stopped the Printer --#. Translators: Printer's state (no jobs can be processed) --#: ../panels/printers/cc-printers-panel.c:708 --#: ../panels/printers/cc-printers-panel.c:898 --msgctxt "printer state" --msgid "Stopped" --msgstr "已停止" -+#. 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 "打印机" - --#. Translators: The printer marker supply waste receptacle is almost full --#: ../panels/printers/cc-printers-panel.c:710 --msgid "Waste receptacle almost full" --msgstr "废粉仓将满" -+#. 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 "Printer;Queue;Print;Paper;Ink;Toner;" - --#. Translators: The printer marker supply waste receptacle is full --#: ../panels/printers/cc-printers-panel.c:712 --msgid "Waste receptacle full" --msgstr "废粉仓已满" -+#. Translators: This is a windows domain used with SMB protocol. -+#: panels/printers/jobs-dialog.ui:44 -+msgid "Domain" -+msgstr "域" - --#. Translators: Optical photo conductors are used in laser printers --#: ../panels/printers/cc-printers-panel.c:714 --msgid "The optical photo conductor is near end of life" --msgstr "感光鼓使用寿命已快耗尽" -+#. Translators: This button authenticates all print jobs and send them for printing. -+#: panels/printers/jobs-dialog.ui:123 -+msgid "A_uthenticate" -+msgstr "认证(_u)" - --#. Translators: Optical photo conductors are used in laser printers --#: ../panels/printers/cc-printers-panel.c:716 --msgid "The optical photo conductor is no longer functioning" --msgstr "感光鼓故障" -+#. Translators: this action removes (purges) all the listed jobs from the list. -+#: panels/printers/jobs-dialog.ui:163 -+msgid "Clear All" -+msgstr "全部清除" - --#. Translators: Printer's state (printer is being configured right now) --#: ../panels/printers/cc-printers-panel.c:825 --msgctxt "printer state" --msgid "Configuring" --msgstr "正在配置" -+#. Translators: This button pop up authentication dialog for print jobs which need credentials. -+#: panels/printers/jobs-dialog.ui:225 -+msgid "_Authenticate" -+msgstr "(_A)认证" - --#. Translators: Printer's state (can start new job without waiting) --#: ../panels/printers/cc-printers-panel.c:884 --msgctxt "printer state" --msgid "Ready" --msgstr "就绪" -+#. Translators: this label describes the dialog empty state, with no jobs listed. -+#: panels/printers/jobs-dialog.ui:354 -+msgid "No Active Printer Jobs" -+msgstr "没有活动的打印机任务" - --#. Translators: Printer's state (printer is ready but doesn't accept new jobs) --#: ../panels/printers/cc-printers-panel.c:889 --msgctxt "printer state" --msgid "Does not accept jobs" --msgstr "不接收任务" -+#. Translators: This is the title presented at top of the dialog. -+#: panels/printers/new-printer-dialog.ui:29 -+#: panels/printers/pp-new-printer-dialog.c:384 -+#: panels/printers/pp-new-printer-dialog.c:456 -+msgid "Add Printer" -+msgstr "添加打印机" - --#. Translators: Printer's state (jobs are processing) --#: ../panels/printers/cc-printers-panel.c:894 --msgctxt "printer state" --msgid "Processing" --msgstr "正在处理" -+#. Translators: This button opens authentication dialog for selected server. -+#. Translators: This buttons submits the credentials for the selected server. -+#: panels/printers/new-printer-dialog.ui:96 -+#: panels/printers/new-printer-dialog.ui:111 -+msgid "_Unlock" -+msgstr "解锁(_U)" - --# 以下几个level似乎译为“量”更好 --#. Translators: Toner supply --#: ../panels/printers/cc-printers-panel.c:1014 --msgid "Toner Level" --msgstr "碳粉量" -+#. Translators: No printers were detected -+#: panels/printers/new-printer-dialog.ui:210 -+msgid "No Printers Found" -+msgstr "没有找到打印机" - --#. Translators: Ink supply --#: ../panels/printers/cc-printers-panel.c:1017 --msgid "Ink Level" --msgstr "墨水量" -+#. Translators: The entered text should contain network address of a printer or a text which will filter found devices (their names and locations) -+#: panels/printers/new-printer-dialog.ui:283 -+msgid "Enter a network address or search for a printer" -+msgstr "输入网络地址或搜索打印机" - --#. Translators: By supply we mean ink, toner, staples, water, ... --#: ../panels/printers/cc-printers-panel.c:1020 --msgid "Supply Level" --msgstr "耗材量" -+#: panels/printers/new-printer-dialog.ui:352 -+msgid "Enter username and password to view printers on Print Server." -+msgstr "输入用户名和密码以查看打印服务器上的打印机。" - --#. Translators: Printer's state (printer is being installed right now) --#: ../panels/printers/cc-printers-panel.c:1038 --msgctxt "printer state" --msgid "Installing" --msgstr "正在安装" -+#. Translators: This button triggers the printing of a test page. -+#. Translators: Name of job which makes printer to print test page -+#: panels/printers/options-dialog.ui:22 panels/printers/pp-options-dialog.c:893 -+msgid "Test Page" -+msgstr "测试页" - --#. Translators: there is n active print jobs on this printer --#: ../panels/printers/cc-printers-panel.c:1552 -+#. Translators: This is the title of the dialog. %s is the printer name. -+#: panels/printers/pp-details-dialog.c:135 -+#: panels/printers/pp-details-dialog.c:435 - #, c-format --msgid "%u active" --msgid_plural "%u active" --msgstr[0] "%u 项活动任务" -+msgid "%s Details" -+msgstr "%s 详细信息" - --#. Translators: Addition of the new printer failed. --#: ../panels/printers/cc-printers-panel.c:1893 --msgid "Failed to add new printer." --msgstr "添加新打印机失败。" -+#: panels/printers/pp-details-dialog.c:184 -+msgid "No suitable driver found" -+msgstr "未找到合适的驱动" - --#: ../panels/printers/cc-printers-panel.c:2074 -+#: panels/printers/pp-details-dialog.c:328 - msgid "Select PPD File" - msgstr "选择 PPD 文件" - --#: ../panels/printers/cc-printers-panel.c:2083 -+#: panels/printers/pp-details-dialog.c:337 - msgid "" - "PostScript Printer Description files (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *." - "PPD.GZ)" - msgstr "PostScript 打印机描述文件 (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *.PPD.GZ)" - --#: ../panels/printers/cc-printers-panel.c:2390 --msgid "No suitable driver found" --msgstr "未找到合适的驱动" -- --#: ../panels/printers/cc-printers-panel.c:2461 --msgid "Searching for preferred drivers…" --msgstr "正在搜索首选驱动…" -- --#: ../panels/printers/cc-printers-panel.c:2482 --msgid "Select from database…" --msgstr "从数据库选择…" -- --#: ../panels/printers/cc-printers-panel.c:2491 --msgid "Provide PPD File…" --msgstr "提供 PPD 文件…" -- --#. Translators: Name of job which makes printer to print test page --#: ../panels/printers/cc-printers-panel.c:2638 --#: ../panels/printers/cc-printers-panel.c:2661 --msgid "Test page" --msgstr "测试页" -- --#. Translators: The XML file containing user interface can not be loaded --#: ../panels/printers/cc-printers-panel.c:3116 --#, c-format --msgid "Could not load ui: %s" --msgstr "无法载入界面:%s" -- --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/printers/gnome-printers-panel.desktop.in.in.h:2 --msgid "Prin­ters" --msgstr "打印机" -- --#: ../panels/printers/gnome-printers-panel.desktop.in.in.h:3 --msgid "Add printers, view printer jobs and decide how you want to print" --msgstr "添加打印机,查看打印任务和管理打印" -- --#. Translators: those are keywords for the printing control-center panel --#: ../panels/printers/gnome-printers-panel.desktop.in.in.h:5 --msgid "Printer;Queue;Print;Paper;Ink;Toner;" --msgstr "" --"Printer;Queue;Print;Paper;Ink;Toner;打印机;队列;打印;纸张;墨水;墨粉;硒鼓;墨" --"盒;" -- --#. Translators: this action removes (purges) all the listed jobs from the list. --#: ../panels/printers/jobs-dialog.ui.h:2 --msgid "Clear All" --msgstr "全部清除" -- --#. Translators: this label describes the dialog empty state, with no jobs listed. --#: ../panels/printers/jobs-dialog.ui.h:4 --msgid "No Active Printer Jobs" --msgstr "没有活动的打印机任务" -- --#: ../panels/printers/new-printer-dialog.ui.h:1 --msgid "Add a New Printer" --msgstr "添加打印机" -- --#. Translators: This button opens authentication dialog for selected server. --#: ../panels/printers/new-printer-dialog.ui.h:5 --msgid "A_uthenticate" --msgstr "认证(_U)" -- --#. Translators: No printers were found --#: ../panels/printers/new-printer-dialog.ui.h:7 --msgid "No printers detected." --msgstr "未检测到打印机。" -- --#. Translators: The entered text should contain network address of a printer or a text which will filter found devices (their names and locations) --#: ../panels/printers/new-printer-dialog.ui.h:9 --msgid "Enter a network address or search for a printer" --msgstr "输入网络地址或搜索打印机" -- --#: ../panels/printers/options-dialog.ui.h:1 --msgid "Loading options…" --msgstr "正在载入选项…" -- --#: ../panels/printers/ppd-selection-dialog.ui.h:1 -+#: panels/printers/ppd-selection-dialog.ui:10 - msgid "Select Printer Driver" - msgstr "选择打印机驱动" - --#: ../panels/printers/ppd-selection-dialog.ui.h:3 --#: ../panels/user-accounts/um-photo-dialog.c:96 -+#: panels/printers/ppd-selection-dialog.ui:40 -+#: panels/user-accounts/um-photo-dialog.c:105 - msgid "Select" - msgstr "选择" - --#: ../panels/printers/ppd-selection-dialog.ui.h:4 --msgid "Loading drivers database..." --msgstr "正在载入驱动数据库…" -+#: panels/printers/ppd-selection-dialog.ui:73 -+msgid "Loading drivers database…" -+msgstr "正在载入驱动数据库…..." - - #. Translators: The found device is a JetDirect printer --#: ../panels/printers/pp-host.c:526 -+#: panels/printers/pp-host.c:539 - msgid "JetDirect Printer" - msgstr "JetDirect 打印机" - - #. Translators: The found device is a Line Printer Daemon printer --#: ../panels/printers/pp-host.c:782 -+#: panels/printers/pp-host.c:795 - msgid "LPD Printer" - msgstr "LPD 打印机" - - #. Translators: this is an option of "Two Sided" --#: ../panels/printers/pp-ipp-option-widget.c:66 --#: ../panels/printers/pp-ppd-option-widget.c:70 -+#: panels/printers/pp-ipp-option-widget.c:66 -+#: panels/printers/pp-ppd-option-widget.c:70 - msgid "One Sided" - msgstr "单面" - - #. Translators: this is an option of "Two Sided" --#: ../panels/printers/pp-ipp-option-widget.c:68 --#: ../panels/printers/pp-ppd-option-widget.c:72 -+#: panels/printers/pp-ipp-option-widget.c:68 -+#: panels/printers/pp-ppd-option-widget.c:72 - msgid "Long Edge (Standard)" - msgstr "长边(标准)" - - #. Translators: this is an option of "Two Sided" --#: ../panels/printers/pp-ipp-option-widget.c:70 --#: ../panels/printers/pp-ppd-option-widget.c:74 -+#: panels/printers/pp-ipp-option-widget.c:70 -+#: panels/printers/pp-ppd-option-widget.c:74 - msgid "Short Edge (Flip)" - msgstr "短边(翻转)" - - #. Translators: this is an option of "Orientation" --#: ../panels/printers/pp-ipp-option-widget.c:72 -+#: panels/printers/pp-ipp-option-widget.c:72 - msgid "Portrait" - msgstr "纵向" - - #. Translators: this is an option of "Orientation" --#: ../panels/printers/pp-ipp-option-widget.c:74 -+#: panels/printers/pp-ipp-option-widget.c:74 - msgid "Landscape" - msgstr "横向" - - #. Translators: this is an option of "Orientation" --#: ../panels/printers/pp-ipp-option-widget.c:76 -+#: panels/printers/pp-ipp-option-widget.c:76 - msgid "Reverse landscape" - msgstr "横向倒转" - - #. Translators: this is an option of "Orientation" --#: ../panels/printers/pp-ipp-option-widget.c:78 -+#: panels/printers/pp-ipp-option-widget.c:78 - msgid "Reverse portrait" - msgstr "纵向倒转" - - #. Translators: Job's state (job is waiting to be printed) --#: ../panels/printers/pp-jobs-dialog.c:103 -+#: panels/printers/pp-jobs-dialog.c:234 - msgctxt "print job" - msgid "Pending" - msgstr "等待中" - - #. Translators: Job's state (job is held for printing) --#: ../panels/printers/pp-jobs-dialog.c:107 -+#: panels/printers/pp-jobs-dialog.c:240 - msgctxt "print job" - msgid "Paused" - msgstr "暂停" - -+#. Translators: Job's state (job needs authentication to proceed further) -+#: panels/printers/pp-jobs-dialog.c:245 -+msgctxt "print job" -+msgid "Authentication required" -+msgstr "需要认证" -+ - #. Translators: Job's state (job is currently printing) --#: ../panels/printers/pp-jobs-dialog.c:111 -+#: panels/printers/pp-jobs-dialog.c:250 - msgctxt "print job" - msgid "Processing" - msgstr "正在处理" - - #. Translators: Job's state (job has been stopped) --#: ../panels/printers/pp-jobs-dialog.c:115 -+#: panels/printers/pp-jobs-dialog.c:254 - msgctxt "print job" - msgid "Stopped" - msgstr "已停止" - - #. Translators: Job's state (job has been canceled) --#: ../panels/printers/pp-jobs-dialog.c:119 -+#: panels/printers/pp-jobs-dialog.c:258 - msgctxt "print job" - msgid "Canceled" - msgstr "已取消" - - #. Translators: Job's state (job has aborted due to error) --#: ../panels/printers/pp-jobs-dialog.c:123 -+#: panels/printers/pp-jobs-dialog.c:262 - msgctxt "print job" - msgid "Aborted" - msgstr "已中止" - - #. Translators: Job's state (job has completed successfully) --#: ../panels/printers/pp-jobs-dialog.c:127 -+#: panels/printers/pp-jobs-dialog.c:266 - msgctxt "print job" - msgid "Completed" - msgstr "已完成" - -+#. Translators: This label shows how many jobs of this printer needs to be authenticated to be printed. -+#: panels/printers/pp-jobs-dialog.c:390 -+#, c-format -+msgid "%u Job Requires Authentication" -+msgid_plural "%u Jobs Require Authentication" -+msgstr[0] "%u 作业需要认证" -+ - #. Translators: This is the printer name for which we are showing the active jobs --#: ../panels/printers/pp-jobs-dialog.c:289 -+#: panels/printers/pp-jobs-dialog.c:620 - #, c-format - msgctxt "Printer jobs dialog title" --msgid "%s - Active Jobs" --msgstr "%s 项活动任务" -+msgid "%s — Active Jobs" -+msgstr "%s — 活跃的作业" -+ -+#. Translators: The printer needs authentication info to print. -+#: panels/printers/pp-jobs-dialog.c:625 -+#, c-format -+msgid "Enter credentials to print from %s." -+msgstr "输入从 %s 打印的凭证。" -+ -+#: panels/printers/pp-new-printer-dialog.c:402 -+msgid "Unlock Print Server" -+msgstr "解锁打印服务器" -+ -+#. Translators: Samba server needs authentication of the user to show list of its printers. -+#: panels/printers/pp-new-printer-dialog.c:406 -+#, c-format -+msgid "Unlock %s." -+msgstr "解锁 %s。" -+ -+#. Translators: Samba server needs authentication of the user to show list of its printers. -+#: panels/printers/pp-new-printer-dialog.c:411 -+#, c-format -+msgid "Enter username and password to view printers on %s." -+msgstr "输入用户名和密码以查看 %s 上可用的打印机。" -+ -+#: panels/printers/pp-new-printer-dialog.c:876 -+msgid "Searching for Printers" -+msgstr "搜索打印机" - - #. Translators: The found device is a printer connected via USB --#: ../panels/printers/pp-new-printer-dialog.c:1659 -+#: panels/printers/pp-new-printer-dialog.c:1799 - msgid "USB" - msgstr "USB" - - #. Translators: The found device is a printer connected via serial port --#: ../panels/printers/pp-new-printer-dialog.c:1664 -+#: panels/printers/pp-new-printer-dialog.c:1804 - msgid "Serial Port" - msgstr "串口" - - #. Translators: The found device is a printer connected via parallel port --#: ../panels/printers/pp-new-printer-dialog.c:1671 -+#: panels/printers/pp-new-printer-dialog.c:1811 - msgid "Parallel Port" - msgstr "并口" - --#. Translators: The found device is a printer connected via Bluetooth --#: ../panels/printers/pp-new-printer-dialog.c:1676 --msgid "Bluetooth" --msgstr "蓝牙" -- - #. Translators: Location of found network printer (e.g. Kitchen, Reception) --#: ../panels/printers/pp-new-printer-dialog.c:1713 -+#: panels/printers/pp-new-printer-dialog.c:1853 - #, c-format - msgid "Location: %s" - msgstr "位置:%s" - - #. Translators: Network address of found printer --#: ../panels/printers/pp-new-printer-dialog.c:1718 -+#: panels/printers/pp-new-printer-dialog.c:1858 - #, c-format - msgid "Address: %s" - msgstr "地址:%s" - - #. Translators: This item is a server which needs authentication to show its printers --#: ../panels/printers/pp-new-printer-dialog.c:1747 -+#: panels/printers/pp-new-printer-dialog.c:1887 - msgid "Server requires authentication" - msgstr "服务器要求认证" - --#: ../panels/printers/pp-options-dialog.c:81 -+#: panels/printers/pp-options-dialog.c:83 - msgid "Two Sided" - msgstr "双面" - --#: ../panels/printers/pp-options-dialog.c:82 -+#: panels/printers/pp-options-dialog.c:84 - msgid "Paper Type" - msgstr "纸张类型" - --#: ../panels/printers/pp-options-dialog.c:83 -+#: panels/printers/pp-options-dialog.c:85 - msgid "Paper Source" - msgstr "纸张来源" - --#: ../panels/printers/pp-options-dialog.c:84 -+#: panels/printers/pp-options-dialog.c:86 - msgid "Output Tray" - msgstr "出纸托盘" - --#: ../panels/printers/pp-options-dialog.c:86 -+#: panels/printers/pp-options-dialog.c:88 - msgid "GhostScript pre-filtering" - msgstr "GhostScript 预过滤" - - #. Translators: This option sets number of pages printed on one sheet --#: ../panels/printers/pp-options-dialog.c:533 -+#: panels/printers/pp-options-dialog.c:534 - msgid "Pages per side" - msgstr "每面页数" - - #. Translators: This option sets whether to print on both sides of paper --#: ../panels/printers/pp-options-dialog.c:545 -+#: panels/printers/pp-options-dialog.c:546 - msgid "Two-sided" - msgstr "双面" - --# 左撇子有歧视色彩。 --#. Translators: This option sets orientation of print (portrait, landscape...) --#: ../panels/printers/pp-options-dialog.c:557 --msgid "Orientation" --msgstr "方向" -- - #. Translators: "General" tab contains general printer options --#: ../panels/printers/pp-options-dialog.c:654 -+#: panels/printers/pp-options-dialog.c:655 - msgctxt "Printer Option Group" - msgid "General" - msgstr "常规" - - #. Translators: "Page Setup" tab contains settings related to pages (page size, paper source, etc.) --#: ../panels/printers/pp-options-dialog.c:657 -+#: panels/printers/pp-options-dialog.c:658 - msgctxt "Printer Option Group" - msgid "Page Setup" - msgstr "页面设置" - - #. Translators: "Installable Options" tab contains settings of presence of installed options (amount of RAM, duplex unit, etc.) --#: ../panels/printers/pp-options-dialog.c:660 -+#: panels/printers/pp-options-dialog.c:661 - msgctxt "Printer Option Group" - msgid "Installable Options" - msgstr "可安装选项" - - #. Translators: "Job" tab contains settings for jobs --#: ../panels/printers/pp-options-dialog.c:663 -+#: panels/printers/pp-options-dialog.c:664 - msgctxt "Printer Option Group" - msgid "Job" - msgstr "任务" - - #. Translators: "Image Quality" tab contains settings for quality of output print (e.g. resolution) --#: ../panels/printers/pp-options-dialog.c:666 -+#: panels/printers/pp-options-dialog.c:667 - msgctxt "Printer Option Group" - msgid "Image Quality" - msgstr "图像质量" - - #. Translators: "Color" tab contains color settings (e.g. color printing) --#: ../panels/printers/pp-options-dialog.c:669 -+#: panels/printers/pp-options-dialog.c:670 - msgctxt "Printer Option Group" - msgid "Color" - msgstr "色彩" - - #. Translators: "Finishing" tab contains finishing settings (e.g. booklet printing) --#: ../panels/printers/pp-options-dialog.c:672 -+#: panels/printers/pp-options-dialog.c:673 - msgctxt "Printer Option Group" - msgid "Finishing" - msgstr "正在完成" - - #. Translators: "Advanced" tab contains all others settings --#: ../panels/printers/pp-options-dialog.c:675 -+#: panels/printers/pp-options-dialog.c:676 - msgctxt "Printer Option Group" - msgid "Advanced" - msgstr "高级" - -+#. Translators: Name of job which makes printer to print test page -+#: panels/printers/pp-options-dialog.c:908 -+msgid "Test page" -+msgstr "测试页" -+ - #. Translators: this is an option of "Paper Source" --#: ../panels/printers/pp-ppd-option-widget.c:76 --#: ../panels/printers/pp-ppd-option-widget.c:78 --#: ../panels/printers/pp-ppd-option-widget.c:86 -+#: panels/printers/pp-ppd-option-widget.c:76 -+#: panels/printers/pp-ppd-option-widget.c:78 -+#: panels/printers/pp-ppd-option-widget.c:86 - msgid "Auto Select" - msgstr "自动选择" - - #. Translators: this is an option of "Paper Source" - #. Translators: this is an option of "Resolution" --#: ../panels/printers/pp-ppd-option-widget.c:80 --#: ../panels/printers/pp-ppd-option-widget.c:82 --#: ../panels/printers/pp-ppd-option-widget.c:84 --#: ../panels/printers/pp-ppd-option-widget.c:88 -+#: panels/printers/pp-ppd-option-widget.c:80 -+#: panels/printers/pp-ppd-option-widget.c:82 -+#: panels/printers/pp-ppd-option-widget.c:84 -+#: panels/printers/pp-ppd-option-widget.c:88 - msgid "Printer Default" - msgstr "打印机默认设置" - - #. Translators: this is an option of "GhostScript" --#: ../panels/printers/pp-ppd-option-widget.c:90 -+#: panels/printers/pp-ppd-option-widget.c:90 - msgid "Embed GhostScript fonts only" - msgstr "仅内嵌 GhostScript 字体" - - #. Translators: this is an option of "GhostScript" --#: ../panels/printers/pp-ppd-option-widget.c:92 -+#: panels/printers/pp-ppd-option-widget.c:92 - msgid "Convert to PS level 1" - msgstr "转换为 PS 等级 1" - - #. Translators: this is an option of "GhostScript" --#: ../panels/printers/pp-ppd-option-widget.c:94 -+#: panels/printers/pp-ppd-option-widget.c:94 - msgid "Convert to PS level 2" --msgstr "转换为 PS 等级 1" -+msgstr "转换为 PS 等级 2" - - #. Translators: this is an option of "GhostScript" --#: ../panels/printers/pp-ppd-option-widget.c:96 -+#: panels/printers/pp-ppd-option-widget.c:96 - msgid "No pre-filtering" - msgstr "无预过滤" - - #. Translators: Name of column showing printer manufacturers --#: ../panels/printers/pp-ppd-selection-dialog.c:233 -+#: panels/printers/pp-ppd-selection-dialog.c:233 - msgid "Manufacturer" - msgstr "厂商" - --#. Translators: Name of column showing printer drivers --#: ../panels/printers/pp-ppd-selection-dialog.c:250 --msgid "Driver" --msgstr "驱动" -+#. Translators: This is the label of the button that opens the Jobs Dialog. -+#: panels/printers/pp-printer-entry.c:613 panels/printers/printer-entry.ui:166 -+msgid "No Active Jobs" -+msgstr "没有活跃的作业" - --#. Translators: Samba server needs authentication of the user to show list of its printers. --#: ../panels/printers/pp-samba.c:248 -+#. Translators: This is the label of the button that opens the Jobs Dialog. -+#: panels/printers/pp-printer-entry.c:618 - #, c-format --msgid "Enter your username and password to view printers available on %s." --msgstr "输入用户名和密码以查看 %s 上可用的打印机。" -+msgid "%u Job" -+msgid_plural "%u Jobs" -+msgstr[0] "%u 作业" - --#: ../panels/printers/printers.ui.h:1 --msgid "Add Printer" --msgstr "添加打印机" -+#. Translators: Name of job which makes printer to clean its heads -+#: panels/printers/pp-printer-entry.c:752 -+msgid "Clean print heads" -+msgstr "清洁打印头" - --#: ../panels/printers/printers.ui.h:2 --msgid "Remove Printer" --msgstr "移除打印机" -+#. Translators: The printer is low on toner -+#: panels/printers/pp-printer-entry.c:804 -+msgid "Low on toner" -+msgstr "墨粉不足" - --#. Translators: By supply we mean ink, toner, staples, water, ... --#: ../panels/printers/printers.ui.h:4 --msgid "Supply" --msgstr "耗材" -+#. Translators: The printer has no toner left -+#: panels/printers/pp-printer-entry.c:806 -+msgid "Out of toner" -+msgstr "墨粉用尽" - --#. Translators: Location of the printer (e.g. Lab, 1st floor,...). --#: ../panels/printers/printers.ui.h:6 --msgid "Location" --msgstr "位置" -+#. Translators: "Developer" is a chemical for photo development, -+#. * http://en.wikipedia.org/wiki/Photographic_developer -+#: panels/printers/pp-printer-entry.c:809 -+msgid "Low on developer" -+msgstr "显影剂不足" -+ -+#. Translators: "Developer" is a chemical for photo development, -+#. * http://en.wikipedia.org/wiki/Photographic_developer -+#: panels/printers/pp-printer-entry.c:812 -+msgid "Out of developer" -+msgstr "显影剂用尽" - --#. Translators: This checkbox is checked when the default printer is selected. --#: ../panels/printers/printers.ui.h:8 --msgid "_Default printer" --msgstr "默认打印机(_D)" -+#. Translators: "marker" is one color bin of the printer -+#: panels/printers/pp-printer-entry.c:814 -+msgid "Low on a marker supply" -+msgstr "标记墨水不足" - --#: ../panels/printers/printers.ui.h:9 --msgid "Jobs" --msgstr "任务" -+#. Translators: "marker" is one color bin of the printer -+#: panels/printers/pp-printer-entry.c:816 -+msgid "Out of a marker supply" -+msgstr "标记墨水用尽" -+ -+#. Translators: One or more covers on the printer are open -+#: panels/printers/pp-printer-entry.c:818 -+msgid "Open cover" -+msgstr "打开上盖" -+ -+#. Translators: One or more doors on the printer are open -+#: panels/printers/pp-printer-entry.c:820 -+msgid "Open door" -+msgstr "打开后盖" -+ -+#. Translators: At least one input tray is low on media -+#: panels/printers/pp-printer-entry.c:822 -+msgid "Low on paper" -+msgstr "纸张不足" -+ -+#. Translators: At least one input tray is empty -+#: panels/printers/pp-printer-entry.c:824 -+msgid "Out of paper" -+msgstr "纸张用尽" -+ -+#. Translators: The printer is offline -+#: panels/printers/pp-printer-entry.c:826 -+msgctxt "printer state" -+msgid "Offline" -+msgstr "离线" -+ -+#. Translators: Someone has stopped the Printer -+#. Translators: Printer's state (no jobs can be processed) -+#: panels/printers/pp-printer-entry.c:828 -+#: panels/printers/pp-printer-entry.c:971 -+msgctxt "printer state" -+msgid "Stopped" -+msgstr "已停止" -+ -+#. Translators: The printer marker supply waste receptacle is almost full -+#: panels/printers/pp-printer-entry.c:830 -+msgid "Waste receptacle almost full" -+msgstr "废粉仓将满" -+ -+#. Translators: The printer marker supply waste receptacle is full -+#: panels/printers/pp-printer-entry.c:832 -+msgid "Waste receptacle full" -+msgstr "废粉仓已满" -+ -+#. Translators: Optical photo conductors are used in laser printers -+#: panels/printers/pp-printer-entry.c:834 -+msgid "The optical photo conductor is near end of life" -+msgstr "感光鼓使用寿命已快耗尽" -+ -+#. Translators: Optical photo conductors are used in laser printers -+#: panels/printers/pp-printer-entry.c:836 -+msgid "The optical photo conductor is no longer functioning" -+msgstr "感光鼓故障" -+ -+#. Translators: Printer's state (can start new job without waiting) -+#: panels/printers/pp-printer-entry.c:957 -+msgctxt "printer state" -+msgid "Ready" -+msgstr "就绪" - --#. Translators: Opens a dialog containing printer --#: ../panels/printers/printers.ui.h:11 --msgid "Show _Jobs" --msgstr "显示任务(_J)" -+#. Translators: Printer's state (printer is ready but doesn't accept new jobs) -+#: panels/printers/pp-printer-entry.c:962 -+msgctxt "printer state" -+msgid "Does not accept jobs" -+msgstr "不接收任务" -+ -+#. Translators: Printer's state (jobs are processing) -+#: panels/printers/pp-printer-entry.c:967 -+msgctxt "printer state" -+msgid "Processing" -+msgstr "正在处理" -+ -+#: panels/printers/printer-entry.ui:14 -+msgid "Printing Options" -+msgstr "打印选项" -+ -+#: panels/printers/printer-entry.ui:26 -+msgid "Printer Details" -+msgstr "打印机详情" -+ -+#. Set this printer as default -+#: panels/printers/printer-entry.ui:38 -+msgid "Use Printer by Default" -+msgstr "默认使用打印机" -+ -+#. Translators: This button executes command which cleans print heads of the printer. -+#: panels/printers/printer-entry.ui:50 -+msgid "Clean Print Heads" -+msgstr "取消打印头" -+ -+#: panels/printers/printer-entry.ui:61 -+msgid "Remove Printer" -+msgstr "移除打印机" - --#: ../panels/printers/printers.ui.h:12 -+#: panels/printers/printer-entry.ui:193 - msgid "Model" - msgstr "型号" - --#: ../panels/printers/printers.ui.h:15 --msgid "label" --msgstr "标签" -- --#: ../panels/printers/printers.ui.h:17 --msgid "Setting new driver…" --msgstr "正在设置新驱动…" -+#: panels/printers/printer-entry.ui:251 -+msgid "Ink Level" -+msgstr "墨水量" - --#: ../panels/printers/printers.ui.h:18 --msgid "page 3" --msgstr "第 3 页" -+#. Translators: This is the message which follows the printer error. -+#: panels/printers/printer-entry.ui:312 -+msgid "Please restart when the problem is resolved." -+msgstr "问题解决后请重启。" - --#. Translators: This button executes command which prints test page. --#: ../panels/printers/printers.ui.h:20 --msgid "Print _Test Page" --msgstr "打印测试页(_T)" -+#. Translators: This is the button which restarts the printer. -+#: panels/printers/printer-entry.ui:319 -+msgid "Restart" -+msgstr "重启" - --#. Translators: This button opens printer --#: ../panels/printers/printers.ui.h:22 ../panels/region/region.ui.h:6 --msgid "_Options" --msgstr "选项(_O)" -+#. Translators: This button adds new printer. -+#: panels/printers/printers.ui:20 -+msgid "Add…" -+msgstr "添加......" - --#: ../panels/printers/printers.ui.h:23 -+#: panels/printers/printers.ui:186 - msgid "No printers" - msgstr "无打印机" - - #. Translators: This button adds new printer. --#: ../panels/printers/printers.ui.h:25 --msgid "Add a Printer" --msgstr "添加打印机" -+#: panels/printers/printers.ui:200 -+msgid "Add a Printer…" -+msgstr "添加一个打印机......" - - #. Translators: The CUPS server is not running (we can not connect to it). --#: ../panels/printers/printers.ui.h:27 -+#: panels/printers/printers.ui:232 - msgid "" - "Sorry! The system printing service\n" --"doesn't seem to be available." -+"doesn’t seem to be available." - msgstr "抱歉,系统打印服务似乎不可用。" - --#: ../panels/privacy/cc-privacy-panel.c:387 ../panels/privacy/privacy.ui.h:24 -+#: panels/privacy/cc-privacy-panel.c:387 panels/privacy/privacy.ui:280 - msgid "Screen Lock" - msgstr "锁屏" - --#: ../panels/privacy/cc-privacy-panel.c:438 -+#: panels/privacy/cc-privacy-panel.c:438 - msgid "In use" - msgstr "已占用" - --#: ../panels/privacy/cc-privacy-panel.c:443 -+#: panels/privacy/cc-privacy-panel.c:443 - msgctxt "Location services status" - msgid "On" - msgstr "开启" - --#: ../panels/privacy/cc-privacy-panel.c:444 -+#: panels/privacy/cc-privacy-panel.c:444 - msgctxt "Location services status" - msgid "Off" - msgstr "关闭" - --#: ../panels/privacy/cc-privacy-panel.c:823 ../panels/privacy/privacy.ui.h:42 -+#: panels/privacy/cc-privacy-panel.c:823 panels/privacy/privacy.ui:745 - msgid "Location Services" - msgstr "定位服务" - --#: ../panels/privacy/cc-privacy-panel.c:942 ../panels/privacy/privacy.ui.h:19 -+#: panels/privacy/cc-privacy-panel.c:946 panels/privacy/privacy.ui:127 - msgid "Usage & History" - msgstr "用量及历史" - --#: ../panels/privacy/cc-privacy-panel.c:1067 -+#: panels/privacy/cc-privacy-panel.c:1075 - msgid "Empty all items from Trash?" - msgstr "清空回收站中的所有项目吗?" - --#: ../panels/privacy/cc-privacy-panel.c:1068 -+#: panels/privacy/cc-privacy-panel.c:1076 - msgid "All items in the Trash will be permanently deleted." - msgstr "回收站内的所有项目将会永久删除。" - --#: ../panels/privacy/cc-privacy-panel.c:1069 ../panels/privacy/privacy.ui.h:34 -+#: panels/privacy/cc-privacy-panel.c:1077 - msgid "_Empty Trash" - msgstr "清空回收站(_E)" - --#: ../panels/privacy/cc-privacy-panel.c:1092 -+#: panels/privacy/cc-privacy-panel.c:1100 - msgid "Delete all the temporary files?" - msgstr "删除所有临时文件吗?" - --#: ../panels/privacy/cc-privacy-panel.c:1093 -+#: panels/privacy/cc-privacy-panel.c:1101 - msgid "All the temporary files will be permanently deleted." - msgstr "所有临时文件将会永久删除。" - --#: ../panels/privacy/cc-privacy-panel.c:1094 ../panels/privacy/privacy.ui.h:35 -+#: panels/privacy/cc-privacy-panel.c:1102 - msgid "_Purge Temporary Files" - msgstr "清理临时文件(_P)" - --#: ../panels/privacy/cc-privacy-panel.c:1116 ../panels/privacy/privacy.ui.h:29 -+#: panels/privacy/cc-privacy-panel.c:1124 panels/privacy/privacy.ui:432 - msgid "Purge Trash & Temporary Files" - msgstr "清理回收站及临时文件" - --#: ../panels/privacy/cc-privacy-panel.c:1156 ../panels/privacy/privacy.ui.h:36 -+#: panels/privacy/cc-privacy-panel.c:1164 panels/privacy/privacy.ui:637 - msgid "Software Usage" - msgstr "软件使用统计" - --#: ../panels/privacy/cc-privacy-panel.c:1197 ../panels/privacy/privacy.ui.h:46 -+#: panels/privacy/cc-privacy-panel.c:1205 panels/privacy/privacy.ui:959 - msgid "Problem Reporting" - msgstr "报告问题" - - #. translators: '%s' is the distributor's name, such as 'Fedora' --#: ../panels/privacy/cc-privacy-panel.c:1211 -+#: panels/privacy/cc-privacy-panel.c:1219 - #, c-format - msgid "" - "Sending reports of technical problems helps us improve %s. Reports are sent " - "anonymously and are scrubbed of personal data." - msgstr "发送匿名的技术问题报告能帮助我们改进 %s,这些报告中不含个人数据。" - --#: ../panels/privacy/cc-privacy-panel.c:1223 ../panels/privacy/privacy.ui.h:41 -+#: panels/privacy/cc-privacy-panel.c:1231 panels/privacy/privacy.ui:719 - msgid "Privacy Policy" - msgstr "隐私政策" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/privacy/gnome-privacy-panel.desktop.in.in.h:2 --msgid "Pri­va­cy" -+#: panels/privacy/gnome-privacy-panel.desktop.in.in:3 -+msgid "Privacy" - msgstr "隐私" - --#: ../panels/privacy/gnome-privacy-panel.desktop.in.in.h:3 -+#: panels/privacy/gnome-privacy-panel.desktop.in.in:4 - msgid "Protect your personal information and control what others might see" - msgstr "保护个人信息并控制他人可见的信息" - --#. Translators: those are keywords for the privacy control-center panel --#: ../panels/privacy/gnome-privacy-panel.desktop.in.in.h:5 -+#. FIXME -+#. 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: 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;" --msgstr "" --"screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;" --"network;identity;屏幕;锁定;诊断;崩溃;私有;最近;临时;索引;名称;网络;认证;" -+msgstr "screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;network;identity;屏幕;锁定;诊断;崩溃;私有;最近;临时;索引;名称;网络;认证;" - --#: ../panels/privacy/privacy.ui.h:1 -+#: panels/privacy/privacy.ui:14 - msgid "Screen Turns Off" - msgstr "关闭屏幕" - --#: ../panels/privacy/privacy.ui.h:2 -+#: panels/privacy/privacy.ui:18 - msgid "30 seconds" - msgstr "30 秒" - --#: ../panels/privacy/privacy.ui.h:9 -+#: panels/privacy/privacy.ui:60 panels/privacy/privacy.ui:106 - msgid "1 day" - msgstr "1 天" - --#: ../panels/privacy/privacy.ui.h:10 -+#: panels/privacy/privacy.ui:64 - msgid "2 days" - msgstr "2 天" - --#: ../panels/privacy/privacy.ui.h:11 -+#: panels/privacy/privacy.ui:68 - msgid "3 days" - msgstr "3 天" - --#: ../panels/privacy/privacy.ui.h:12 -+#: panels/privacy/privacy.ui:72 - msgid "4 days" - msgstr "4 天" - --#: ../panels/privacy/privacy.ui.h:13 -+#: panels/privacy/privacy.ui:76 - msgid "5 days" - msgstr "5 天" - --#: ../panels/privacy/privacy.ui.h:14 -+#: panels/privacy/privacy.ui:80 - msgid "6 days" - msgstr "6 天" - --#: ../panels/privacy/privacy.ui.h:15 -+#: panels/privacy/privacy.ui:84 panels/privacy/privacy.ui:110 - msgid "7 days" - msgstr "7 天" - --#: ../panels/privacy/privacy.ui.h:16 -+#: panels/privacy/privacy.ui:88 - msgid "14 days" - msgstr "14 天" - --#: ../panels/privacy/privacy.ui.h:17 -+#: panels/privacy/privacy.ui:92 panels/privacy/privacy.ui:114 - msgid "30 days" - msgstr "30 天" - --#: ../panels/privacy/privacy.ui.h:18 -+#: panels/privacy/privacy.ui:118 - msgid "Forever" - msgstr "永久" - --#: ../panels/privacy/privacy.ui.h:20 -+#: panels/privacy/privacy.ui:148 - msgid "" - "Remembering your history makes things easier to find again. These items are " - "never shared over the network." - msgstr "记住历史能够在下次使用时方便查找。这些条目永远不会通过网络共享。" - --#: ../panels/privacy/privacy.ui.h:21 -+#: panels/privacy/privacy.ui:176 - msgid "_Recently Used" - msgstr "最近使用(_R)" - --#: ../panels/privacy/privacy.ui.h:22 -+#: panels/privacy/privacy.ui:207 - msgid "Retain _History" - msgstr "保留历史(_H)" - --#: ../panels/privacy/privacy.ui.h:23 -+#: panels/privacy/privacy.ui:247 - msgid "Cl_ear Recent History" - msgstr "清理最近历史(_E)" - --#: ../panels/privacy/privacy.ui.h:25 -+#: panels/privacy/privacy.ui:301 - msgid "The Screen Lock protects your privacy when you are away." - msgstr "离开时锁定屏幕可以保护隐私。" - --#: ../panels/privacy/privacy.ui.h:26 -+#: panels/privacy/privacy.ui:328 - msgid "Automatic Screen _Lock" - msgstr "自动锁屏(_L)" - --#: ../panels/privacy/privacy.ui.h:27 -+#: panels/privacy/privacy.ui:362 - msgid "Lock screen _after blank for" - msgstr "黑屏至锁屏的等待时间(_A)" - --#: ../panels/privacy/privacy.ui.h:28 -+#: panels/privacy/privacy.ui:394 - msgid "Show _Notifications" - msgstr "显示通知(_N)" - --#: ../panels/privacy/privacy.ui.h:30 -+#: panels/privacy/privacy.ui:454 - msgid "" - "Automatically purge the Trash and temporary files to help keep your computer " - "free of unnecessary sensitive information." - msgstr "自动清理回收站和临时文件,避免计算机保存不必要的敏感信息。" - --#: ../panels/privacy/privacy.ui.h:31 -+#: panels/privacy/privacy.ui:483 - msgid "Automatically empty _Trash" - msgstr "自动清空回收站(_T)" - --#: ../panels/privacy/privacy.ui.h:32 -+#: panels/privacy/privacy.ui:515 - msgid "Automatically purge Temporary _Files" - msgstr "自动清理临时文件(_F)" - --#: ../panels/privacy/privacy.ui.h:33 -+#: panels/privacy/privacy.ui:546 - msgid "Purge _After" - msgstr "清理延时(_A)" - --#: ../panels/privacy/privacy.ui.h:37 -+#: panels/privacy/privacy.ui:590 -+msgid "_Empty Trash…" -+msgstr "(_E)清空回收站......" -+ -+#: panels/privacy/privacy.ui:606 -+msgid "_Purge Temporary Files…" -+msgstr "(_P)清除临时文件......" -+ -+#: panels/privacy/privacy.ui:654 - msgid "" - "Sending us information about which software you use helps us provide you " - "with more accurate recommendations. It also helps us to improve our " -@@ -4891,1661 +5236,1694 @@ msgid "" - "\n" - "All the information we collect is made anonymous, and we will never share " - "your data with third parties." --msgstr "" --"发送软件的使用情况有助于我们向提供更准确的推荐,帮助改进软件。\n" -+msgstr "发送软件的使用情况有助于我们向提供更准确的推荐,帮助改进软件。\n" - "\n" - "信息均为匿名收集,不会与他人分享。" - --#: ../panels/privacy/privacy.ui.h:40 -+#: panels/privacy/privacy.ui:681 - msgid "_Send software usage statistics" - msgstr "发送软件使用统计信息(_S)" - --#: ../panels/privacy/privacy.ui.h:43 -+#: panels/privacy/privacy.ui:764 - msgid "" - "Location services allow applications to know your location. Using Wi-Fi and " - "mobile broadband increases accuracy." --msgstr "" --"定位服务允许应用得知您的地理位置。使用 Wi-Fi 和移动宽带可以提高精确度。" -+msgstr "定位服务允许应用得知您的地理位置。使用 Wi-Fi 和移动宽带可以提高精确度。" - --#: ../panels/privacy/privacy.ui.h:44 -+#: panels/privacy/privacy.ui:778 -+msgid "" -+"Uses Mozilla Location Service: Privacy Policy" -+msgstr "使用 Mozilla 位置服务:隐私政策" -+ -+#: panels/privacy/privacy.ui:828 - msgid "_Location Services" - msgstr "定位服务(_L)" - --#: ../panels/privacy/privacy.ui.h:47 -+#: panels/privacy/privacy.ui:1026 - msgid "_Automatic Problem Reporting" - msgstr "自动报告问题(_A)" - --#: ../panels/region/cc-format-chooser.c:120 -+#: panels/region/cc-format-chooser.c:118 - msgctxt "measurement format" - msgid "Imperial" - msgstr "英制" - --#: ../panels/region/cc-format-chooser.c:122 -+#: panels/region/cc-format-chooser.c:120 - msgctxt "measurement format" - msgid "Metric" --msgstr "公制" -+msgstr "Metric" - --#: ../panels/region/cc-format-chooser.c:287 -+#: panels/region/cc-format-chooser.c:285 - msgid "No regions found" - msgstr "无可用区域" - --#: ../panels/region/cc-input-chooser.c:182 -+#: panels/region/cc-input-chooser.c:182 - msgid "No input sources found" - msgstr "无输入源" - --#: ../panels/region/cc-input-chooser.c:992 -+#: panels/region/cc-input-chooser.c:1012 - msgctxt "Input Source" - msgid "Other" - msgstr "其他" - --#: ../panels/region/cc-region-panel.c:247 --#: ../panels/user-accounts/um-user-panel.c:1087 --msgid "Your session needs to be restarted for changes to take effect" --msgstr "修改需要重启会话才能生效" -- --#: ../panels/region/cc-region-panel.c:251 --#: ../panels/user-accounts/um-user-panel.c:1091 --msgid "Restart Now" --msgstr "现在重启" -- --#: ../panels/region/cc-region-panel.c:888 -+#: panels/region/cc-region-panel.c:881 - msgid "No input source selected" - msgstr "未选择输入源" - --#: ../panels/region/cc-region-panel.c:1779 -+#: panels/region/cc-region-panel.c:1773 - msgid "Login _Screen" - msgstr "登录屏幕(_S)" - --#: ../panels/region/format-chooser.ui.h:1 -+#: panels/region/format-chooser.ui:7 - msgid "Formats" - msgstr "格式" - --#: ../panels/region/format-chooser.ui.h:4 -+#: panels/region/format-chooser.ui:120 - msgid "Preview" - msgstr "预览" - --#: ../panels/region/format-chooser.ui.h:5 -+#: panels/region/format-chooser.ui:137 - msgid "Dates" - msgstr "日期" - --#: ../panels/region/format-chooser.ui.h:6 -+#: panels/region/format-chooser.ui:168 - msgid "Times" - msgstr "时间" - --#: ../panels/region/format-chooser.ui.h:7 -+#: panels/region/format-chooser.ui:199 -+msgid "Dates & Times" -+msgstr "日期和时间" -+ -+#: panels/region/format-chooser.ui:230 - msgid "Numbers" - msgstr "数字" - --#: ../panels/region/format-chooser.ui.h:8 -+#: panels/region/format-chooser.ui:247 - msgid "Measurement" - msgstr "度量" - --#: ../panels/region/format-chooser.ui.h:9 -+#: panels/region/format-chooser.ui:264 - msgid "Paper" - msgstr "纸张" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/region/gnome-region-panel.desktop.in.in.h:2 --msgid "Re­gion & Lan­guage" -+#: panels/region/gnome-region-panel.desktop.in.in:3 -+msgid "Region & Language" - msgstr "区域和语言" - --#: ../panels/region/gnome-region-panel.desktop.in.in.h:3 -+#: panels/region/gnome-region-panel.desktop.in.in:4 - msgid "" - "Select your display language, formats, keyboard layouts and input sources" - msgstr "选择您的显示语言、格式、键盘布局和输入源" - --#. Translators: those are keywords for the region control-center panel --#: ../panels/region/gnome-region-panel.desktop.in.in.h:5 -+#. 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: 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 "Language;Layout;Keyboard;Input;语言;布局;键盘;输入;" - --#: ../panels/region/input-chooser.ui.h:1 -+#: panels/region/input-chooser.ui:5 - msgid "Add an Input Source" - msgstr "添加输入源" - --#: ../panels/region/input-chooser.ui.h:4 --msgid "Input methods can't be used on the login screen" --msgstr "不能在登录屏幕使用输入法" -+#: panels/region/input-chooser.ui:76 -+msgid "Input methods can’t be used on the login screen" -+msgstr "在登录屏幕中不能使用输入法" - --#: ../panels/region/input-options.ui.h:1 -+#: panels/region/input-options.ui:7 - msgid "Input Source Options" - msgstr "输入源选项" - --#: ../panels/region/input-options.ui.h:2 -+#: panels/region/input-options.ui:27 - msgid "Use the _same source for all windows" - msgstr "所有窗口使用相同的输入源(_S)" - --#: ../panels/region/input-options.ui.h:3 -+#: panels/region/input-options.ui:45 - msgid "Allow _different sources for each window" - msgstr "每个窗口使用不同的输入源(_D)" - --#: ../panels/region/input-options.ui.h:4 ../shell/cc-application.c:251 --msgid "Keyboard Shortcuts" --msgstr "键盘快捷键" -- --#: ../panels/region/input-options.ui.h:5 -+#: panels/region/input-options.ui:85 - msgid "Switch to previous source" - msgstr "切换至上个输入源" - --#: ../panels/region/input-options.ui.h:6 -+#: panels/region/input-options.ui:102 - msgid "Super+Shift+Space" - msgstr "Super+Shift+Space" - --#: ../panels/region/input-options.ui.h:7 -+#: panels/region/input-options.ui:116 - msgid "Switch to next source" - msgstr "切换至下个输入源" - --#: ../panels/region/input-options.ui.h:8 -+#: panels/region/input-options.ui:133 - msgid "Super+Space" - msgstr "Super+Space" - --#: ../panels/region/input-options.ui.h:9 -+#: panels/region/input-options.ui:147 - msgid "You can change these shortcuts in the keyboard settings" - msgstr "可以在键盘设置中修改快捷键" - --#: ../panels/region/input-options.ui.h:10 -+#: panels/region/input-options.ui:164 - msgid "Alternative switch to next source" - msgstr "切换至下个源第二组快捷键" - --#: ../panels/region/input-options.ui.h:11 -+#: panels/region/input-options.ui:181 - msgid "Left+Right Alt" - msgstr "左+右 Alt" - --#: ../panels/region/region.ui.h:1 --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:9 -+#: panels/region/region.ui:67 -+#: panels/user-accounts/data/user-accounts-dialog.ui:348 - msgid "_Language" - msgstr "语言(_L)" - --#: ../panels/region/region.ui.h:2 -+#: panels/region/region.ui:85 - msgid "English (United Kingdom)" - msgstr "英语(英国)" - --#: ../panels/region/region.ui.h:3 -+#: panels/region/region.ui:112 -+msgid "Restart the session for changes to take effect" -+msgstr "重启会话以使修改生效" -+ -+#: panels/region/region.ui:134 -+msgid "Restart…" -+msgstr "重启......" -+ -+#: panels/region/region.ui:169 - msgid "_Formats" - msgstr "格式(_F)" - --#: ../panels/region/region.ui.h:4 -+#: panels/region/region.ui:187 - msgid "United Kingdom" - msgstr "英国" - --#: ../panels/region/region.ui.h:5 -+#: panels/region/region.ui:229 - msgid "Input Sources" - msgstr "输入源" - --#: ../panels/region/region.ui.h:7 -+#: panels/region/region.ui:245 -+msgid "_Options" -+msgstr "选项(_O)" -+ -+#: panels/region/region.ui:311 - msgid "Add input source" - msgstr "添加输入源" - --#: ../panels/region/region.ui.h:8 -+#: panels/region/region.ui:336 - msgid "Remove input source" - msgstr "移除输入源" - --#: ../panels/region/region.ui.h:9 -+#: panels/region/region.ui:386 - msgid "Move input source up" - msgstr "上移输入源" - --#: ../panels/region/region.ui.h:10 -+#: panels/region/region.ui:411 - msgid "Move input source down" - msgstr "下移输入源" - --#: ../panels/region/region.ui.h:11 -+#: panels/region/region.ui:461 - msgid "Configure input source" - msgstr "配置输入源" - --#: ../panels/region/region.ui.h:12 -+#: panels/region/region.ui:486 - msgid "Show input source keyboard layout" - msgstr "显示输入源键盘布局" - --#: ../panels/region/region.ui.h:13 -+#: panels/region/region.ui:530 - msgid "Login settings are used by all users when logging into the system" - msgstr "登录设置将对所有于本机登录的用户共享" - --#: ../panels/search/cc-search-locations-dialog.c:634 -+#: panels/search/cc-search-locations-dialog.c:639 - msgid "Select Location" - msgstr "选择位置" - --#: ../panels/search/cc-search-locations-dialog.c:638 -+#: panels/search/cc-search-locations-dialog.c:643 - msgid "_OK" - msgstr "确定(_O)" - --#: ../panels/search/cc-search-panel.c:177 -+#: panels/search/cc-search-panel.c:178 - msgid "No applications found" - msgstr "未找到应用" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/search/gnome-search-panel.desktop.in.in.h:2 --msgid "Search" --msgstr "搜索" -- --#: ../panels/search/gnome-search-panel.desktop.in.in.h:3 -+#: panels/search/gnome-search-panel.desktop.in.in:4 - msgid "" - "Control which applications show search results in the Activities Overview" - msgstr "控制在活动总览中显示哪些程序的搜索结果" - --#. Translators: those are keywords for the search control-center panel --#: ../panels/search/gnome-search-panel.desktop.in.in.h:5 -+#. 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: 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 "" --"Search;Find;Index;Hide;Privacy;Results;搜索;查找;寻找;索引;隐藏;隐私;结果;" -+msgstr "Search;Find;Index;Hide;Privacy;Results;搜索;查找;寻找;索引;隐藏;隐私;结果;" - --#: ../panels/search/search-locations-dialog.ui.h:1 -+#: panels/search/search-locations-dialog.ui:9 - msgid "Search Locations" - msgstr "搜索位置" - --#: ../panels/search/search-locations-dialog.ui.h:2 -+#: panels/search/search-locations-dialog.ui:43 - msgid "Places" - msgstr "位置" - --#: ../panels/search/search-locations-dialog.ui.h:3 -+#: panels/search/search-locations-dialog.ui:73 - msgid "Bookmarks" - msgstr "书签" - --#: ../panels/search/search-locations-dialog.ui.h:4 -+#: panels/search/search-locations-dialog.ui:130 - msgid "Other" - msgstr "其他" - --#: ../panels/search/search.ui.h:1 -+#: panels/search/search.ui:66 - msgid "Move Up" - msgstr "上移" - --#: ../panels/search/search.ui.h:2 -+#: panels/search/search.ui:83 - msgid "Move Down" - msgstr "下移" - --#: ../panels/search/search.ui.h:3 -+#: panels/search/search.ui:119 - msgid "Preferences" - msgstr "首选项" - - #. Label --#: ../panels/sharing/cc-sharing-networks.c:303 -+#: panels/sharing/cc-sharing-networks.c:305 - msgid "No networks selected for sharing" - msgstr "未选择要共享的网络" - --#: ../panels/sharing/cc-sharing-panel.c:263 -+#: panels/sharing/cc-sharing-panel.c:283 - msgctxt "service is enabled" - msgid "On" - msgstr "已开启" - --#: ../panels/sharing/cc-sharing-panel.c:265 --#: ../panels/sharing/cc-sharing-panel.c:292 -+#: panels/sharing/cc-sharing-panel.c:285 panels/sharing/cc-sharing-panel.c:312 - msgctxt "service is disabled" - msgid "Off" - msgstr "已关闭" - --#: ../panels/sharing/cc-sharing-panel.c:295 -+#: panels/sharing/cc-sharing-panel.c:315 - msgctxt "service is enabled" - msgid "Enabled" - msgstr "已启用" - --#: ../panels/sharing/cc-sharing-panel.c:298 -+#: panels/sharing/cc-sharing-panel.c:318 - msgctxt "service is active" - msgid "Active" - msgstr "活动" - --#: ../panels/sharing/cc-sharing-panel.c:369 -+#: panels/sharing/cc-sharing-panel.c:389 - msgid "Choose a Folder" - msgstr "选择文件夹" - --#: ../panels/sharing/cc-sharing-panel.c:680 -+#: panels/sharing/cc-sharing-panel.c:701 - #, c-format - msgid "" --"Personal File Sharing allows you to share your Public folder with others on " --"your current network using: dav://%s" --msgstr "" --"个人网络共享允许您与当前网络中的其他人共享自己的共享文件夹,使用地址:dav://%s" -+"File Sharing allows you to share your Public folder with others on your " -+"current network using: dav://%s" -+msgstr "文件共享允许您与当前网络上的其他人共享您的公共文件夹,使用:dav://%s" - --#: ../panels/sharing/cc-sharing-panel.c:682 -+#: panels/sharing/cc-sharing-panel.c:703 - #, c-format - msgid "" - "When remote login is enabled, remote users can connect using the Secure " - "Shell command:\n" - "ssh %s" --msgstr "" --"当启用远程登录是,远程用户可以使用 SSH 命令来连接:\n" -+msgstr "当启用远程登录是,远程用户可以使用 SSH 命令来连接:\n" - "ssh %s" - --#: ../panels/sharing/cc-sharing-panel.c:684 -+#: panels/sharing/cc-sharing-panel.c:705 - #, c-format - msgid "" - "Screen sharing allows remote users to view or control your screen by " - "connecting to vnc://%s" --msgstr "" --"屏幕共享允许远程用户查看或控制您的屏幕通过连接到:vnc://" --"%s " -+msgstr "屏幕共享允许远程用户查看或控制您的屏幕通过连接到:vnc://%s" - --#: ../panels/sharing/cc-sharing-panel.c:796 -+#: panels/sharing/cc-sharing-panel.c:817 - msgid "Copy" - msgstr "复制" - --#: ../panels/sharing/cc-sharing-panel.c:1122 -+#: panels/sharing/cc-sharing-panel.c:1294 -+#: panels/sharing/gnome-sharing-panel.desktop.in.in:3 - msgid "Sharing" - msgstr "共享" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/sharing/gnome-sharing-panel.desktop.in.in.h:2 --msgid "Sha­ring" --msgstr "共享" -- --#: ../panels/sharing/gnome-sharing-panel.desktop.in.in.h:3 -+#: panels/sharing/gnome-sharing-panel.desktop.in.in:4 - msgid "Control what you want to share with others" - msgstr "控制想要与其他用户共享的内容" - --#. Translators: those are keywords for the sharing control-center panel --#: ../panels/sharing/gnome-sharing-panel.desktop.in.in.h:5 -+#. 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: 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;" --msgstr "" --"share;sharing;ssh;host;name;remote;desktop;media;audio;video;pictures;photos;" --"movies;server;renderer;共享;主机;名称;远程;桌面;媒体;音频;视频;图片;照片;电" --"影;服务器;渲染;" -+msgstr "share;sharing;ssh;host;name;remote;desktop;media;audio;video;pictures;photos;movies;server;renderer;共享;主机;名称;远程;桌面;媒体;音频;视频;图片;照片;电影;服务器;渲染;" - --#: ../panels/sharing/networks.ui.h:1 -+#: panels/sharing/networks.ui:19 - msgid "Networks" - msgstr "网络" - --#: ../panels/sharing/org.gnome.controlcenter.remote-login-helper.policy.in.in.h:1 -+#: panels/sharing/org.gnome.controlcenter.remote-login-helper.policy.in.in:11 - msgid "Enable or disable remote login" - msgstr "启用或禁用远程登录" - --#: ../panels/sharing/org.gnome.controlcenter.remote-login-helper.policy.in.in.h:2 -+#: panels/sharing/org.gnome.controlcenter.remote-login-helper.policy.in.in:12 - msgid "Authentication is required to enable or disable remote login" - msgstr "启用或禁用远程登录需要认证" - --#: ../panels/sharing/sharing.ui.h:1 -+#: panels/sharing/sharing.ui:46 - msgid "_Computer Name" - msgstr "计算机名(_C)" - --#: ../panels/sharing/sharing.ui.h:2 -+#: panels/sharing/sharing.ui:104 - msgid "_File Sharing" - msgstr "文件共享(_F)" - --#: ../panels/sharing/sharing.ui.h:3 -+#: panels/sharing/sharing.ui:147 - msgid "_Screen Sharing" - msgstr "屏幕共享(_S)" - --#: ../panels/sharing/sharing.ui.h:4 -+#: panels/sharing/sharing.ui:190 - msgid "_Media Sharing" - msgstr "媒体共享(_M)" - --#: ../panels/sharing/sharing.ui.h:5 -+#: panels/sharing/sharing.ui:233 - msgid "_Remote Login" - msgstr "远程登录(_R)" - --#: ../panels/sharing/sharing.ui.h:6 -+#: panels/sharing/sharing.ui:272 - msgid "Some services are disabled because of no network access." - msgstr "因为没有网络,一些服务已经禁用。" - --#: ../panels/sharing/sharing.ui.h:7 -+#: panels/sharing/sharing.ui:286 panels/sharing/sharing.ui:413 - msgid "File Sharing" - msgstr "文件共享" - --#: ../panels/sharing/sharing.ui.h:8 -+#: panels/sharing/sharing.ui:333 - msgid "_Require Password" - msgstr "需要密码(_R)" - --#: ../panels/sharing/sharing.ui.h:10 -+#: panels/sharing/sharing.ui:424 panels/sharing/sharing.ui:496 - msgid "Remote Login" - msgstr "远程登录" - --#: ../panels/sharing/sharing.ui.h:11 -+#: panels/sharing/sharing.ui:519 panels/sharing/sharing.ui:765 - msgid "Screen Sharing" - msgstr "屏幕共享" - --#: ../panels/sharing/sharing.ui.h:12 -+#: panels/sharing/sharing.ui:577 - msgid "_Allow connections to control the screen" - msgstr "允许连接控制屏幕(_A)" - --#: ../panels/sharing/sharing.ui.h:13 -+#: panels/sharing/sharing.ui:622 - msgid "_Password:" - msgstr "密码(_P):" - --#: ../panels/sharing/sharing.ui.h:14 -+#: panels/sharing/sharing.ui:652 - msgid "_Show Password" - msgstr "显示密码(_S)" - --#: ../panels/sharing/sharing.ui.h:15 -+#: panels/sharing/sharing.ui:683 - msgid "Access Options" - msgstr "访问选项" - --#: ../panels/sharing/sharing.ui.h:16 -+#: panels/sharing/sharing.ui:697 - msgid "_New connections must ask for access" - msgstr "建立新连接前必须询问访问权限(_N)" - --#: ../panels/sharing/sharing.ui.h:17 -+#: panels/sharing/sharing.ui:715 - msgid "_Require a password" - msgstr "需要密码(_R)" - --#: ../panels/sharing/sharing.ui.h:18 -+#: panels/sharing/sharing.ui:776 panels/sharing/sharing.ui:870 - msgid "Media Sharing" - msgstr "媒体共享" - --#: ../panels/sharing/sharing.ui.h:19 -+#: panels/sharing/sharing.ui:809 - msgid "Share music, photos and videos over the network." - msgstr "通过网络共享音乐、照片和视频。" - --#: ../panels/sharing/sharing.ui.h:20 -+#: panels/sharing/sharing.ui:824 - msgid "Folders" - msgstr "文件夹" - --#: ../panels/sound/data/gnome-sound-panel.desktop.in.in.h:1 -+#: panels/sound/data/gnome-sound-panel.desktop.in.in:3 - msgid "Sound" - msgstr "声音" - --#: ../panels/sound/data/gnome-sound-panel.desktop.in.in.h:2 -+#: panels/sound/data/gnome-sound-panel.desktop.in.in:4 - msgid "Change sound levels, inputs, outputs, and alert sounds" - msgstr "更改音频音量、音频输入输出和事件声音" - --#. Translators: those are keywords for the sound control-center panel --#: ../panels/sound/data/gnome-sound-panel.desktop.in.in.h:4 -+#. 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: 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 "" --"Card;Microphone;Volume;Fade;Balance;Bluetooth;Headset;声卡;麦克风;话筒;音量;" --"淡入淡出;均衡;蓝牙;耳机;耳麦;音频;" -+msgstr "Card;Microphone;Volume;Fade;Balance;Bluetooth;Headset;声卡;麦克风;话筒;音量;淡入淡出;均衡;蓝牙;耳机;耳麦;音频;" - - #. Translators: This is the name of an audio file that sounds like the bark of a dog. - #. You might want to translate it into the equivalent words of your language. --#: ../panels/sound/data/sounds/gnome-sounds-default.xml.in.in.h:3 -+#: panels/sound/data/sounds/gnome-sounds-default.xml.in.in:6 - msgid "Bark" - msgstr "犬吠" - - #. Translators: This is the name of an audio file that sounds like a water drip. - #. You might want to translate it into the equivalent words of your language. --#: ../panels/sound/data/sounds/gnome-sounds-default.xml.in.in.h:6 -+#: panels/sound/data/sounds/gnome-sounds-default.xml.in.in:12 - msgid "Drip" - msgstr "雨滴" - - #. Translators: This is the name of an audio file that sounds like tapping glass. - #. You might want to translate it into the equivalent words of your language. --#: ../panels/sound/data/sounds/gnome-sounds-default.xml.in.in.h:9 -+#: panels/sound/data/sounds/gnome-sounds-default.xml.in.in:18 - msgid "Glass" - msgstr "玻璃" - - #. Translators: This is the name of an audio file that sounds sort of like a submarine sonar ping. - #. You might want to translate it into the equivalent words of your language. --#: ../panels/sound/data/sounds/gnome-sounds-default.xml.in.in.h:12 -+#: panels/sound/data/sounds/gnome-sounds-default.xml.in.in:24 - msgid "Sonar" - msgstr "声纳" - --#: ../panels/sound/gvc-balance-bar.c:105 -+#: panels/sound/gvc-balance-bar.c:104 - msgctxt "balance" - msgid "Left" - msgstr "左" - --#: ../panels/sound/gvc-balance-bar.c:106 -+#: panels/sound/gvc-balance-bar.c:105 - msgctxt "balance" - msgid "Right" - msgstr "右" - --#: ../panels/sound/gvc-balance-bar.c:109 -+#: panels/sound/gvc-balance-bar.c:108 - msgctxt "balance" - msgid "Rear" - msgstr "后" - --#: ../panels/sound/gvc-balance-bar.c:110 -+#: panels/sound/gvc-balance-bar.c:109 - msgctxt "balance" - msgid "Front" - msgstr "前" - --#: ../panels/sound/gvc-balance-bar.c:113 -+#: panels/sound/gvc-balance-bar.c:112 - msgctxt "balance" - msgid "Minimum" - msgstr "最小" - --#: ../panels/sound/gvc-balance-bar.c:114 -+#: panels/sound/gvc-balance-bar.c:113 - msgctxt "balance" - msgid "Maximum" - msgstr "最大" - --#: ../panels/sound/gvc-balance-bar.c:289 -+#: panels/sound/gvc-balance-bar.c:288 - msgid "_Balance:" - msgstr "均衡(_B):" - --#: ../panels/sound/gvc-balance-bar.c:292 -+#: panels/sound/gvc-balance-bar.c:291 - msgid "_Fade:" - msgstr "淡出淡入(_F):" - --#: ../panels/sound/gvc-balance-bar.c:295 -+#: panels/sound/gvc-balance-bar.c:294 - msgid "_Subwoofer:" - msgstr "重低音(_S):" - --#: ../panels/sound/gvc-channel-bar.c:611 ../panels/sound/gvc-channel-bar.c:620 -+#: panels/sound/gvc-channel-bar.c:610 panels/sound/gvc-channel-bar.c:619 - msgctxt "volume" - msgid "100%" - msgstr "100%" - --#: ../panels/sound/gvc-channel-bar.c:615 -+#: panels/sound/gvc-channel-bar.c:614 - msgctxt "volume" - msgid "Unamplified" - msgstr "减弱" - --#: ../panels/sound/gvc-combo-box.c:166 ../panels/sound/gvc-mixer-dialog.c:249 --#: ../panels/sound/gvc-mixer-dialog.c:515 -+#: panels/sound/gvc-combo-box.c:166 panels/sound/gvc-mixer-dialog.c:253 -+#: panels/sound/gvc-mixer-dialog.c:520 - msgid "_Profile:" - msgstr "配置(_P):" - --#. translators: --#. * The number of sound outputs on a particular device --#: ../panels/sound/gvc/gvc-mixer-control.c:1837 --#, c-format --msgid "%u Output" --msgid_plural "%u Outputs" --msgstr[0] "%u 路输出" -- --#. translators: --#. * The number of sound inputs on a particular device --#: ../panels/sound/gvc/gvc-mixer-control.c:1847 --#, c-format --msgid "%u Input" --msgid_plural "%u Inputs" --msgstr[0] "%u 路输入" -- --#: ../panels/sound/gvc/gvc-mixer-control.c:2373 --msgid "System Sounds" --msgstr "系统声音" -- --#: ../panels/sound/gvc-mixer-dialog.c:251 -+#: panels/sound/gvc-mixer-dialog.c:255 - msgid "_Test Speakers" - msgstr "测试扬声器(_T)" - --#: ../panels/sound/gvc-mixer-dialog.c:420 -+#: panels/sound/gvc-mixer-dialog.c:424 - msgid "Peak detect" - msgstr "峰值检测" - --#: ../panels/sound/gvc-mixer-dialog.c:1512 -+#: panels/sound/gvc-mixer-dialog.c:1499 - msgid "Device" - msgstr "设备" - --#: ../panels/sound/gvc-mixer-dialog.c:1575 -+#: panels/sound/gvc-mixer-dialog.c:1562 - #, c-format - msgid "Speaker Testing for %s" - msgstr "%s 扬声器测试" - --#: ../panels/sound/gvc-mixer-dialog.c:1631 -+#: panels/sound/gvc-mixer-dialog.c:1617 - msgid "_Output volume:" - msgstr "输出音量(_O):" - --#: ../panels/sound/gvc-mixer-dialog.c:1645 -+#: panels/sound/gvc-mixer-dialog.c:1631 - msgid "Output" - msgstr "输出" - --#: ../panels/sound/gvc-mixer-dialog.c:1650 -+#: panels/sound/gvc-mixer-dialog.c:1636 - msgid "C_hoose a device for sound output:" - msgstr "选择音频输出设备(_H):" - --#: ../panels/sound/gvc-mixer-dialog.c:1672 -+#: panels/sound/gvc-mixer-dialog.c:1658 - msgid "Settings for the selected device:" - msgstr "选中设备的设置:" - --#: ../panels/sound/gvc-mixer-dialog.c:1683 -+#: panels/sound/gvc-mixer-dialog.c:1669 - msgid "Input" - msgstr "输入" - --#: ../panels/sound/gvc-mixer-dialog.c:1690 -+#: panels/sound/gvc-mixer-dialog.c:1676 - msgid "_Input volume:" - msgstr "输入音量(_I):" - --#: ../panels/sound/gvc-mixer-dialog.c:1711 -+#: panels/sound/gvc-mixer-dialog.c:1697 - msgid "Input level:" - msgstr "输入等级:" - --#: ../panels/sound/gvc-mixer-dialog.c:1737 -+#: panels/sound/gvc-mixer-dialog.c:1723 - msgid "C_hoose a device for sound input:" - msgstr "选择音频输入设备(_H):" - --#: ../panels/sound/gvc-mixer-dialog.c:1761 -+#: panels/sound/gvc-mixer-dialog.c:1747 - msgid "Sound Effects" - msgstr "声音效果" - --#: ../panels/sound/gvc-mixer-dialog.c:1768 -+#: panels/sound/gvc-mixer-dialog.c:1754 - msgid "_Alert volume:" - msgstr "警告音量(_A):" - --#: ../panels/sound/gvc-mixer-dialog.c:1785 -+#: panels/sound/gvc-mixer-dialog.c:1775 - msgid "No application is currently playing or recording audio." - msgstr "没有正在播放或录制音频的程序。" - --#: ../panels/sound/gvc-sound-theme-chooser.c:188 -+#: panels/sound/gvc-sound-theme-chooser.c:187 - msgid "Built-in" - msgstr "内置" - --#: ../panels/sound/gvc-sound-theme-chooser.c:454 --#: ../panels/sound/gvc-sound-theme-chooser.c:466 --#: ../panels/sound/gvc-sound-theme-chooser.c:478 -+#: panels/sound/gvc-sound-theme-chooser.c:446 -+#: panels/sound/gvc-sound-theme-chooser.c:458 -+#: panels/sound/gvc-sound-theme-chooser.c:470 - msgid "Sound Preferences" - msgstr "声音首选项" - --#: ../panels/sound/gvc-sound-theme-chooser.c:457 --#: ../panels/sound/gvc-sound-theme-chooser.c:468 --#: ../panels/sound/gvc-sound-theme-chooser.c:480 -+#: panels/sound/gvc-sound-theme-chooser.c:449 -+#: panels/sound/gvc-sound-theme-chooser.c:460 -+#: panels/sound/gvc-sound-theme-chooser.c:472 - msgid "Testing event sound" - msgstr "测试事件声音" - --#: ../panels/sound/gvc-sound-theme-chooser.c:554 -+#: panels/sound/gvc-sound-theme-chooser.c:544 -+#: panels/wacom/wacom-stylus-page.ui:25 - msgid "Default" - msgstr "默认" - --#: ../panels/sound/gvc-sound-theme-chooser.c:555 -+#: panels/sound/gvc-sound-theme-chooser.c:545 - msgid "From theme" - msgstr "来自主题" - --#: ../panels/sound/gvc-sound-theme-chooser.c:740 -+#: panels/sound/gvc-sound-theme-chooser.c:720 - msgid "C_hoose an alert sound:" - msgstr "选择警告声音(_H):" - --#: ../panels/sound/gvc-speaker-test.c:231 -+#: panels/sound/gvc-speaker-test.c:229 - msgid "Stop" - msgstr "停止" - --#: ../panels/sound/gvc-speaker-test.c:231 --#: ../panels/sound/gvc-speaker-test.c:343 -+#: panels/sound/gvc-speaker-test.c:229 panels/sound/gvc-speaker-test.c:341 - msgid "Test" - msgstr "测试" - --#: ../panels/sound/gvc-speaker-test.c:239 -+#: panels/sound/gvc-speaker-test.c:237 - msgid "Subwoofer" - msgstr "重低音" - --#: ../panels/sound/sound-theme-file-utils.c:304 -+#: panels/sound/sound-theme-file-utils.c:288 - msgid "Custom" - msgstr "自定义" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/universal-access/gnome-universal-access-panel.desktop.in.in.h:2 --msgid "Uni­ver­sal Access" --msgstr "通用辅助功能" -+#. translators: the labels will read: -+#. * Cursor Size: Default -+#: panels/universal-access/cc-ua-panel.c:353 -+msgctxt "cursor size" -+msgid "Default" -+msgstr "默认" -+ -+#: panels/universal-access/cc-ua-panel.c:356 -+msgctxt "cursor size" -+msgid "Medium" -+msgstr "中" -+ -+#: panels/universal-access/cc-ua-panel.c:359 -+msgctxt "cursor size" -+msgid "Large" -+msgstr "大" -+ -+#: panels/universal-access/cc-ua-panel.c:362 -+msgctxt "cursor size" -+msgid "Larger" -+msgstr "更大" -+ -+#: panels/universal-access/cc-ua-panel.c:365 -+msgctxt "cursor size" -+msgid "Largest" -+msgstr "最大" - --#: ../panels/universal-access/gnome-universal-access-panel.desktop.in.in.h:3 -+#: panels/universal-access/cc-ua-panel.c:369 -+#, c-format -+msgid "%d pixel" -+msgid_plural "%d pixels" -+msgstr[0] "%d 像素" -+ -+#: panels/universal-access/gnome-universal-access-panel.desktop.in.in:4 - msgid "Make it easier to see, hear, type, point and click" - msgstr "辅助视觉、听觉、打字和指点操作" - --#. Translators: those are keywords for the universal access control-center panel --#: ../panels/universal-access/gnome-universal-access-panel.desktop.in.in.h:5 -+#. 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: 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;" --msgstr "" --"Keyboard;Mouse;a11y;Accessibility;Contrast;Zoom;Screen Reader;text;font;size;" --"AccessX;Sticky Keys;Slow Keys;Bounce Keys;Mouse Keys;键盘;辅助功能;对比度;缩" --"放;屏幕读取器;文本;字体;大小;粘滞键;慢速键;回弹键;鼠标;" -+"AccessX;Sticky;Keys;Slow;Bounce;Mouse;Double;click;Delay;Assist;Repeat;Blink;" -+msgstr "Keyboard;Mouse;a11y;Accessibility;Contrast;Zoom;Screen;Reader;text;font;size;AccessX;Sticky;Keys;Slow;Bounce;Mouse;Double;click;Delay;Assist;Repeat;Blink;" - --#: ../panels/universal-access/uap.ui.h:1 -+#: panels/universal-access/uap.ui:89 - msgid "_Always Show Universal Access Menu" - msgstr "始终显示通用辅助功能菜单(_A)" - --#: ../panels/universal-access/uap.ui.h:2 -+#: panels/universal-access/uap.ui:131 - msgid "Seeing" - msgstr "视觉" - --#: ../panels/universal-access/uap.ui.h:3 -+#: panels/universal-access/uap.ui:177 - msgid "_High Contrast" - msgstr "高对比度(_H)" - --#: ../panels/universal-access/uap.ui.h:4 -+#: panels/universal-access/uap.ui:224 - msgid "_Large Text" - msgstr "大号文本(_L)" - --#: ../panels/universal-access/uap.ui.h:5 --#: ../panels/universal-access/zoom-options.ui.h:7 -+#: panels/universal-access/uap.ui:269 -+msgid "C_ursor Size" -+msgstr "(_u)光标大小" -+ -+#: panels/universal-access/uap.ui:316 -+#: panels/universal-access/zoom-options.ui:98 - msgid "_Zoom" - msgstr "缩放(_Z)" - --#: ../panels/universal-access/uap.ui.h:7 -+#: panels/universal-access/uap.ui:362 - msgid "Screen _Reader" - msgstr "屏幕朗读(_R)" - --#: ../panels/universal-access/uap.ui.h:8 -+#: panels/universal-access/uap.ui:408 panels/universal-access/uap.ui:1237 - msgid "_Sound Keys" - msgstr "发声键(_S)" - --#: ../panels/universal-access/uap.ui.h:9 -+#: panels/universal-access/uap.ui:470 - msgid "Hearing" - msgstr "听觉" - --#: ../panels/universal-access/uap.ui.h:10 -+#: panels/universal-access/uap.ui:514 panels/universal-access/uap.ui:1340 - msgid "_Visual Alerts" - msgstr "视觉警告(_V)" - --#: ../panels/universal-access/uap.ui.h:12 -+#: panels/universal-access/uap.ui:622 - msgid "Screen _Keyboard" - msgstr "屏幕键盘(_K)" - --#: ../panels/universal-access/uap.ui.h:13 -+#: panels/universal-access/uap.ui:667 - msgid "R_epeat Keys" - msgstr "重复键(_E)" - --#: ../panels/universal-access/uap.ui.h:14 -+#: panels/universal-access/uap.ui:713 - msgid "Cursor _Blinking" - msgstr "光标闪烁(_B)" - --#: ../panels/universal-access/uap.ui.h:15 -+#: panels/universal-access/uap.ui:759 - msgid "_Typing Assist (AccessX)" - msgstr "AccessX 打字助手(_T)" - --#: ../panels/universal-access/uap.ui.h:16 -+#: panels/universal-access/uap.ui:820 - msgid "Pointing & Clicking" - msgstr "指向和点击" - --#: ../panels/universal-access/uap.ui.h:17 -+#: panels/universal-access/uap.ui:866 - msgid "_Mouse Keys" - msgstr "鼠标键(_M)" - --#: ../panels/universal-access/uap.ui.h:18 -+#: panels/universal-access/uap.ui:911 - msgid "_Click Assist" - msgstr "点击助手(_C)" - --#: ../panels/universal-access/uap.ui.h:19 -+#: panels/universal-access/uap.ui:957 - msgid "_Double-Click Delay" - msgstr "双击延时(_D)" - --#: ../panels/universal-access/uap.ui.h:20 -+#: panels/universal-access/uap.ui:977 - msgid "Double-Click Delay" - msgstr "双击延时" - --#: ../panels/universal-access/uap.ui.h:21 -+#: panels/universal-access/uap.ui:1042 -+msgid "Cursor Size" -+msgstr "光标大小" -+ -+#: panels/universal-access/uap.ui:1069 -+msgid "" -+"Cursor size can be combined with zoom to make it easier to see the cursor." -+msgstr "光标的大小可以与缩放相结合,使其更容易看到光标。" -+ -+#: panels/universal-access/uap.ui:1105 - msgid "Screen Reader" - msgstr "屏幕朗读" - --#: ../panels/universal-access/uap.ui.h:22 -+#: panels/universal-access/uap.ui:1122 - msgid "The screen reader reads displayed text as you move the focus." - msgstr "移动焦点时朗读显示的文本。" - --#: ../panels/universal-access/uap.ui.h:23 -+#: panels/universal-access/uap.ui:1155 - msgid "_Screen Reader" - msgstr "屏幕朗读(_S)" - --#: ../panels/universal-access/uap.ui.h:24 -+#: panels/universal-access/uap.ui:1194 - msgid "Sound Keys" - msgstr "发声键" - --#: ../panels/universal-access/uap.ui.h:25 -+#: panels/universal-access/uap.ui:1212 - msgid "Beep when Num Lock or Caps Lock are turned on or off." - msgstr "数字键盘锁定或大小写锁定开启或关闭时发出蜂鸣声。" - --#: ../panels/universal-access/uap.ui.h:26 -+#: panels/universal-access/uap.ui:1282 - msgid "Visual Alerts" - msgstr "视觉警告" - --#: ../panels/universal-access/uap.ui.h:27 -+#: panels/universal-access/uap.ui:1286 - msgid "_Test flash" - msgstr "测试闪烁(_T)" - --#: ../panels/universal-access/uap.ui.h:28 -+#: panels/universal-access/uap.ui:1315 - msgid "Use a visual indication when an alert sound occurs." - msgstr "发出警告声时使用视觉提示。" - --#: ../panels/universal-access/uap.ui.h:29 -+#: panels/universal-access/uap.ui:1366 - msgid "Flash the _window title" - msgstr "闪烁窗口标题栏(_W)" - --#: ../panels/universal-access/uap.ui.h:30 -+#: panels/universal-access/uap.ui:1384 - msgid "Flash the entire _screen" - msgstr "闪烁整个屏幕(_S)" - --#: ../panels/universal-access/uap.ui.h:31 -+#: panels/universal-access/uap.ui:1429 - msgid "Repeat Keys" - msgstr "重复" - --#: ../panels/universal-access/uap.ui.h:32 -+#: panels/universal-access/uap.ui:1459 - msgid "Key presses repeat when key is held down." - msgstr "按住某一键时重复该键。" - --#: ../panels/universal-access/uap.ui.h:34 -+#: panels/universal-access/uap.ui:1538 - msgid "Repeat keys delay" - msgstr "重复键延时" - --#: ../panels/universal-access/uap.ui.h:35 -+#: panels/universal-access/uap.ui:1586 panels/universal-access/uap.ui:1719 - msgid "Speed" - msgstr "速度" - --#: ../panels/universal-access/uap.ui.h:36 -+#: panels/universal-access/uap.ui:1623 - msgid "Repeat keys speed" - msgstr "重复键速度" - --#: ../panels/universal-access/uap.ui.h:37 -+#: panels/universal-access/uap.ui:1647 - msgid "Cursor Blinking" - msgstr "光标闪烁" - --#: ../panels/universal-access/uap.ui.h:38 -+#: panels/universal-access/uap.ui:1677 - msgid "Cursor blinks in text fields." - msgstr "文本字段中光标闪烁。" - --#: ../panels/universal-access/uap.ui.h:39 -+#: panels/universal-access/uap.ui:1756 - msgid "Cursor blinking speed" - msgstr "光标闪烁速度" - --#: ../panels/universal-access/uap.ui.h:40 -+#: panels/universal-access/uap.ui:1792 - msgid "Typing Assist" - msgstr "打字助手" - --#: ../panels/universal-access/uap.ui.h:41 -+#: panels/universal-access/uap.ui:1831 - msgid "_Sticky Keys" - msgstr "粘滞键(_S)" - --#: ../panels/universal-access/uap.ui.h:42 -+#: panels/universal-access/uap.ui:1848 - msgid "Treats a sequence of modifier keys as a key combination" - msgstr "将一系列按键当作组合键" - --#: ../panels/universal-access/uap.ui.h:43 -+#: panels/universal-access/uap.ui:1872 - msgid "_Disable if two keys are pressed together" - msgstr "同时按下两个键时禁用输入(_D)" - --#: ../panels/universal-access/uap.ui.h:44 -+#: panels/universal-access/uap.ui:1890 - msgid "Beep when a _modifier key is pressed" - msgstr "按修饰键时蜂鸣(_M)" - --#: ../panels/universal-access/uap.ui.h:45 -+#: panels/universal-access/uap.ui:1938 - msgid "S_low Keys" - msgstr "慢速键(_L)" - --#: ../panels/universal-access/uap.ui.h:46 -+#: panels/universal-access/uap.ui:1955 - msgid "Puts a delay between when a key is pressed and when it is accepted" - msgstr "在按下按键和接受按键之间添加延迟" - --#: ../panels/universal-access/uap.ui.h:47 -+#: panels/universal-access/uap.ui:1988 panels/universal-access/uap.ui:2201 -+#: panels/universal-access/uap.ui:2538 - msgid "A_cceptance delay:" - msgstr "按键接受延迟(_C):" - --#: ../panels/universal-access/uap.ui.h:48 -+#: panels/universal-access/uap.ui:2010 - msgctxt "slow keys delay" - msgid "Short" - msgstr "短" - --#: ../panels/universal-access/uap.ui.h:49 -+#: panels/universal-access/uap.ui:2029 - msgid "Slow keys typing delay" - msgstr "慢速键输入延迟" - --#: ../panels/universal-access/uap.ui.h:50 -+#: panels/universal-access/uap.ui:2044 - msgctxt "slow keys delay" - msgid "Long" - msgstr "长" - --#: ../panels/universal-access/uap.ui.h:51 -+#: panels/universal-access/uap.ui:2071 - msgid "Beep when a key is pr_essed" - msgstr "按键时蜂鸣(_E)" - --#: ../panels/universal-access/uap.ui.h:52 -+#: panels/universal-access/uap.ui:2088 - msgid "Beep when a key is _accepted" - msgstr "按键被接受时蜂鸣(_A)" - --#: ../panels/universal-access/uap.ui.h:53 -+#: panels/universal-access/uap.ui:2105 panels/universal-access/uap.ui:2284 - msgid "Beep when a key is _rejected" - msgstr "按键被拒绝时蜂鸣(_R)" - --#: ../panels/universal-access/uap.ui.h:54 -+#: panels/universal-access/uap.ui:2151 - msgid "_Bounce Keys" - msgstr "重复键(_B)" - --#: ../panels/universal-access/uap.ui.h:55 -+#: panels/universal-access/uap.ui:2168 - msgid "Ignores fast duplicate keypresses" - msgstr "忽略快速重复按键" - --#: ../panels/universal-access/uap.ui.h:56 -+#: panels/universal-access/uap.ui:2223 - msgctxt "bounce keys delay" - msgid "Short" - msgstr "短" - --#: ../panels/universal-access/uap.ui.h:57 -+#: panels/universal-access/uap.ui:2242 - msgid "Bounce keys typing delay" - msgstr "重复键输入延迟" - --#: ../panels/universal-access/uap.ui.h:58 -+#: panels/universal-access/uap.ui:2257 - msgctxt "bounce keys delay" - msgid "Long" - msgstr "长" - --#: ../panels/universal-access/uap.ui.h:59 -+#: panels/universal-access/uap.ui:2370 - msgid "_Enable by Keyboard" - msgstr "通过键盘启用(_E)" - --#: ../panels/universal-access/uap.ui.h:60 -+#: panels/universal-access/uap.ui:2387 - msgid "Turn accessibility features on and off using the keyboard" - msgstr "通过键盘开关辅助功能特性" - --#: ../panels/universal-access/uap.ui.h:61 -+#: panels/universal-access/uap.ui:2451 - msgid "Click Assist" - msgstr "点击助手" - --#: ../panels/universal-access/uap.ui.h:62 -+#: panels/universal-access/uap.ui:2487 - msgid "_Simulated Secondary Click" - msgstr "模拟右键点击(_S)" - --#: ../panels/universal-access/uap.ui.h:63 -+#: panels/universal-access/uap.ui:2505 - msgid "Trigger a secondary click by holding down the primary button" - msgstr "按住鼠标主键不放时触发右键点击" - --#: ../panels/universal-access/uap.ui.h:64 -+#: panels/universal-access/uap.ui:2559 - msgctxt "secondary click" - msgid "Short" - msgstr "短" - --#: ../panels/universal-access/uap.ui.h:65 -+#: panels/universal-access/uap.ui:2578 - msgid "Secondary click delay" - msgstr "右键点击延迟" - --#: ../panels/universal-access/uap.ui.h:66 -+#: panels/universal-access/uap.ui:2593 - msgctxt "secondary click delay" - msgid "Long" - msgstr "长" - --#: ../panels/universal-access/uap.ui.h:67 -+#: panels/universal-access/uap.ui:2650 - msgid "_Hover Click" - msgstr "悬停点击(_H)" - --#: ../panels/universal-access/uap.ui.h:68 -+#: panels/universal-access/uap.ui:2668 - msgid "Trigger a click when the pointer hovers" - msgstr "指针悬停时触发点击。" - --#: ../panels/universal-access/uap.ui.h:69 -+#: panels/universal-access/uap.ui:2701 - msgid "D_elay:" - msgstr "延迟(_E):" - --#: ../panels/universal-access/uap.ui.h:70 -+#: panels/universal-access/uap.ui:2723 - msgctxt "dwell click delay" - msgid "Short" - msgstr "短" - --#: ../panels/universal-access/uap.ui.h:71 -+#: panels/universal-access/uap.ui:2754 - msgctxt "dwell click delay" - msgid "Long" - msgstr "长" - --#: ../panels/universal-access/uap.ui.h:72 -+#: panels/universal-access/uap.ui:2790 - msgid "Motion _threshold:" - msgstr "运动阈值(_T):" - --#: ../panels/universal-access/uap.ui.h:73 -+#: panels/universal-access/uap.ui:2812 - msgctxt "dwell click threshold" - msgid "Small" - msgstr "小" - --#: ../panels/universal-access/uap.ui.h:74 -+#: panels/universal-access/uap.ui:2843 - msgctxt "dwell click threshold" - msgid "Large" - msgstr "大" - --#: ../panels/universal-access/zoom-options.c:333 -+#: panels/universal-access/zoom-options.c:333 - msgctxt "Distance" - msgid "Short" - msgstr "短" - --#: ../panels/universal-access/zoom-options.c:334 -+#: panels/universal-access/zoom-options.c:334 - msgctxt "Distance" - msgid "¼ Screen" - msgstr "¼ 屏幕" - --#: ../panels/universal-access/zoom-options.c:335 -+#: panels/universal-access/zoom-options.c:335 - msgctxt "Distance" - msgid "½ Screen" - msgstr "½ 屏幕" - --#: ../panels/universal-access/zoom-options.c:336 -+#: panels/universal-access/zoom-options.c:336 - msgctxt "Distance" - msgid "¾ Screen" - msgstr "¾ 屏幕" - --#: ../panels/universal-access/zoom-options.c:337 -+#: panels/universal-access/zoom-options.c:337 - msgctxt "Distance" - msgid "Long" - msgstr "长" - --#: ../panels/universal-access/zoom-options.ui.h:1 -+#: panels/universal-access/zoom-options.ui:48 - msgid "Full Screen" - msgstr "全屏" - --#: ../panels/universal-access/zoom-options.ui.h:2 -+#: panels/universal-access/zoom-options.ui:53 - msgid "Top Half" - msgstr "上半部分" - --#: ../panels/universal-access/zoom-options.ui.h:3 -+#: panels/universal-access/zoom-options.ui:58 - msgid "Bottom Half" - msgstr "下半部分" - --#: ../panels/universal-access/zoom-options.ui.h:4 -+#: panels/universal-access/zoom-options.ui:63 - msgid "Left Half" - msgstr "左半部分" - --#: ../panels/universal-access/zoom-options.ui.h:5 -+#: panels/universal-access/zoom-options.ui:68 - msgid "Right Half" - msgstr "右半部分" - --#: ../panels/universal-access/zoom-options.ui.h:6 -+#: panels/universal-access/zoom-options.ui:77 - msgid "Zoom Options" - msgstr "缩放选项" - --#: ../panels/universal-access/zoom-options.ui.h:8 -+#: panels/universal-access/zoom-options.ui:186 - msgid "_Magnification:" - msgstr "放大比率(_M):" - --#: ../panels/universal-access/zoom-options.ui.h:9 -+#: panels/universal-access/zoom-options.ui:250 - msgid "_Follow mouse cursor" - msgstr "跟随鼠标光标(_F)" - --#: ../panels/universal-access/zoom-options.ui.h:10 -+#: panels/universal-access/zoom-options.ui:270 - msgid "_Screen part:" - msgstr "屏幕区域(_S):" - --#: ../panels/universal-access/zoom-options.ui.h:11 -+#: panels/universal-access/zoom-options.ui:332 - msgid "Magnifier _extends outside of screen" - msgstr "放大镜可延伸至屏幕外(_E)" - --#: ../panels/universal-access/zoom-options.ui.h:12 -+#: panels/universal-access/zoom-options.ui:351 - msgid "_Keep magnifier cursor centered" - msgstr "保持放大镜光标居中(_K)" - --#: ../panels/universal-access/zoom-options.ui.h:13 -+#: panels/universal-access/zoom-options.ui:370 - msgid "Magnifier cursor _pushes contents around" - msgstr "放大镜光标推动内容(_P)" - --#: ../panels/universal-access/zoom-options.ui.h:14 -+#: panels/universal-access/zoom-options.ui:389 - msgid "Magnifier cursor moves with _contents" - msgstr "放大镜光标与内容同步移动(_C)" - --#: ../panels/universal-access/zoom-options.ui.h:15 -+#: panels/universal-access/zoom-options.ui:423 - msgid "Magnifier Position:" - msgstr "放大镜位置:" - --#: ../panels/universal-access/zoom-options.ui.h:16 -+#: panels/universal-access/zoom-options.ui:444 - msgid "Magnifier" - msgstr "放大镜" - --#: ../panels/universal-access/zoom-options.ui.h:17 -+#: panels/universal-access/zoom-options.ui:490 - msgid "_Thickness:" - msgstr "粗细(_T):" - --#: ../panels/universal-access/zoom-options.ui.h:18 -+#: panels/universal-access/zoom-options.ui:516 - msgctxt "universal access, thickness" - msgid "Thin" - msgstr "细" - --#: ../panels/universal-access/zoom-options.ui.h:19 -+#: panels/universal-access/zoom-options.ui:548 - msgctxt "universal access, thickness" - msgid "Thick" - msgstr "粗" - --#: ../panels/universal-access/zoom-options.ui.h:20 -+#: panels/universal-access/zoom-options.ui:574 - msgid "_Length:" - msgstr "长度(_L):" - - #. The color of the accessibility crosshair --#: ../panels/universal-access/zoom-options.ui.h:22 -+#: panels/universal-access/zoom-options.ui:626 - msgid "Co_lor:" - msgstr "颜色(_L):" - --#: ../panels/universal-access/zoom-options.ui.h:23 -+#: panels/universal-access/zoom-options.ui:690 - msgid "_Crosshairs:" - msgstr "十字光标(_C):" - --#: ../panels/universal-access/zoom-options.ui.h:24 -+#: panels/universal-access/zoom-options.ui:741 - msgid "_Overlaps mouse cursor" - msgstr "光标与鼠标指针重叠(——O)" - --#: ../panels/universal-access/zoom-options.ui.h:25 -+#: panels/universal-access/zoom-options.ui:779 - msgid "Crosshairs" - msgstr "十字光标" - --#: ../panels/universal-access/zoom-options.ui.h:26 -+#: panels/universal-access/zoom-options.ui:827 - msgid "_White on black:" - msgstr "白底黑字(_W):" - --#: ../panels/universal-access/zoom-options.ui.h:27 -+#: panels/universal-access/zoom-options.ui:850 - msgid "_Brightness:" - msgstr "亮度(_B):" - --#: ../panels/universal-access/zoom-options.ui.h:28 -+#: panels/universal-access/zoom-options.ui:874 - msgid "_Contrast:" - msgstr "对比度(_C):" - - #. The contrast scale goes from Color to None (grayscale) --#: ../panels/universal-access/zoom-options.ui.h:30 -+#: panels/universal-access/zoom-options.ui:897 - msgctxt "universal access, contrast" - msgid "Co_lor" - msgstr "色彩(_L)" - --#: ../panels/universal-access/zoom-options.ui.h:31 -+#: panels/universal-access/zoom-options.ui:925 - msgctxt "universal access, color" - msgid "None" - msgstr "无" - --#: ../panels/universal-access/zoom-options.ui.h:32 -+#: panels/universal-access/zoom-options.ui:957 - msgctxt "universal access, color" - msgid "Full" - msgstr "完全" - --#: ../panels/universal-access/zoom-options.ui.h:33 -+#: panels/universal-access/zoom-options.ui:1023 - msgctxt "universal access, brightness" - msgid "Low" - msgstr "低" - --#: ../panels/universal-access/zoom-options.ui.h:34 -+#: panels/universal-access/zoom-options.ui:1056 - msgctxt "universal access, brightness" - msgid "High" - msgstr "高" - --#: ../panels/universal-access/zoom-options.ui.h:35 -+#: panels/universal-access/zoom-options.ui:1087 - msgctxt "universal access, contrast" - msgid "Low" - msgstr "低" - --#: ../panels/universal-access/zoom-options.ui.h:36 -+#: panels/universal-access/zoom-options.ui:1120 - msgctxt "universal access, contrast" - msgid "High" - msgstr "高" - --#: ../panels/universal-access/zoom-options.ui.h:37 -+#: panels/universal-access/zoom-options.ui:1156 - msgid "Color Effects:" - msgstr "色彩效果:" - --#: ../panels/universal-access/zoom-options.ui.h:38 -+#: panels/universal-access/zoom-options.ui:1181 - msgid "Color Effects" - msgstr "色彩效果" - --#: ../panels/user-accounts/data/account-dialog.ui.h:1 --#: ../panels/user-accounts/data/join-dialog.ui.h:1 -+#: panels/user-accounts/data/account-dialog.ui:18 -+#: panels/user-accounts/data/join-dialog.ui:11 - msgid "Add User" - msgstr "添加用户" - --#: ../panels/user-accounts/data/account-dialog.ui.h:5 -+#: panels/user-accounts/data/account-dialog.ui:171 - msgid "_Full Name" - msgstr "全名(_F)" - --#: ../panels/user-accounts/data/account-dialog.ui.h:6 --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:2 -+#: panels/user-accounts/data/account-dialog.ui:197 -+#: panels/user-accounts/data/user-accounts-dialog.ui:146 - msgid "Standard" - msgstr "标准" - --#: ../panels/user-accounts/data/account-dialog.ui.h:7 --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:3 -+#: panels/user-accounts/data/account-dialog.ui:207 -+#: panels/user-accounts/data/user-accounts-dialog.ui:155 - msgid "Administrator" - msgstr "管理员" - --#: ../panels/user-accounts/data/account-dialog.ui.h:8 --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:4 -+#: panels/user-accounts/data/account-dialog.ui:223 -+#: panels/user-accounts/data/user-accounts-dialog.ui:173 - msgid "Account _Type" - msgstr "帐号类型(_T)" - --#: ../panels/user-accounts/data/account-dialog.ui.h:10 -+#: panels/user-accounts/data/account-dialog.ui:260 - msgid "Allow user to set a password when they next _login" - msgstr "允许用户下次登录时更改密码(_L)" - --#: ../panels/user-accounts/data/account-dialog.ui.h:11 -+#: panels/user-accounts/data/account-dialog.ui:274 - msgid "Set a password _now" - msgstr "现在设置密码(_N)" - --#: ../panels/user-accounts/data/account-dialog.ui.h:13 -+#: panels/user-accounts/data/account-dialog.ui:387 - msgid "_Confirm" - msgstr "确认(_C)" - --#: ../panels/user-accounts/data/account-dialog.ui.h:14 -+#: panels/user-accounts/data/account-dialog.ui:463 -+#: panels/user-accounts/data/account-dialog.ui:667 - msgid "" - "Enterprise login allows an existing centrally managed user account to be " - "used on this device. You can also use this account to access company " - "resources on the internet." --msgstr "" --"企业登录允许在本设备上使用已有的、集中管理的用户帐号。您也可以使用此账号访问" --"公司在互联网上的资源。" -+msgstr "企业登录允许在本设备上使用已有的、集中管理的用户帐号。您也可以使用此账号访问公司在互联网上的资源。" - --#: ../panels/user-accounts/data/account-dialog.ui.h:15 --#: ../panels/user-accounts/data/join-dialog.ui.h:9 -+#: panels/user-accounts/data/account-dialog.ui:485 -+#: panels/user-accounts/data/join-dialog.ui:116 - msgid "_Domain" - msgstr "域(_D)" - --#: ../panels/user-accounts/data/account-dialog.ui.h:16 -+#: panels/user-accounts/data/account-dialog.ui:707 - msgid "You are Offline" - msgstr "您已离线" - --#: ../panels/user-accounts/data/account-dialog.ui.h:17 -+#: panels/user-accounts/data/account-dialog.ui:726 - msgid "You must be online in order to add enterprise users." - msgstr "您必须在线以添加企业登录帐号。" - --#: ../panels/user-accounts/data/account-dialog.ui.h:18 -+#: panels/user-accounts/data/account-dialog.ui:760 - msgid "_Enterprise Login" - msgstr "企业登录(_E)" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:1 -+#: panels/user-accounts/data/account-fingerprint.ui:12 - msgid "Left thumb" - msgstr "左手拇指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:2 -+#: panels/user-accounts/data/account-fingerprint.ui:15 - msgid "Left middle finger" - msgstr "左手中指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:3 -+#: panels/user-accounts/data/account-fingerprint.ui:18 - msgid "Left ring finger" - msgstr "左手无名指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:4 -+#: panels/user-accounts/data/account-fingerprint.ui:21 - msgid "Left little finger" - msgstr "左手小指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:5 -+#: panels/user-accounts/data/account-fingerprint.ui:24 - msgid "Right thumb" - msgstr "右手拇指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:6 -+#: panels/user-accounts/data/account-fingerprint.ui:27 - msgid "Right middle finger" - msgstr "右手中指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:7 -+#: panels/user-accounts/data/account-fingerprint.ui:30 - msgid "Right ring finger" - msgstr "右手无名指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:8 -+#: panels/user-accounts/data/account-fingerprint.ui:33 - msgid "Right little finger" - msgstr "右手小指" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:9 --#: ../panels/user-accounts/um-fingerprint-dialog.c:687 -+#: panels/user-accounts/data/account-fingerprint.ui:39 -+#: panels/user-accounts/um-fingerprint-dialog.c:677 - msgid "Enable Fingerprint Login" - msgstr "启用指纹登录" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:10 -+#: panels/user-accounts/data/account-fingerprint.ui:89 - msgid "_Right index finger" - msgstr "右手食指(_R)" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:11 -+#: panels/user-accounts/data/account-fingerprint.ui:105 - msgid "_Left index finger" - msgstr "左手食指(_L)" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:12 -+#: panels/user-accounts/data/account-fingerprint.ui:126 - msgid "_Other finger:" - msgstr "其他手指(_O):" - --#: ../panels/user-accounts/data/account-fingerprint.ui.h:13 -+#: 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." - msgstr "您的指纹已成功保存,从现在起可以使用指纹登录。" - --#: ../panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in.h:1 -+#: panels/user-accounts/data/avatar-chooser.ui:27 -+msgid "Take a Picture…" -+msgstr "拍照…..." -+ -+#: panels/user-accounts/data/avatar-chooser.ui:34 -+msgid "Select a File…" -+msgstr "选择一个文件......" -+ -+#: panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in:3 - msgid "Users" - msgstr "用户" - --#: ../panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in.h:2 -+#: panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in:4 - msgid "Add or remove users and change your password" - msgstr "添加或删除用户及更改密码" - --#. Translators: those are keywords for the user accounts control-center panel --#: ../panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in.h:4 -+#. 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: 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 "" --"Login;Name;Fingerprint;Avatar;Logo;Face;Password;登录;名称;指纹;头像;标志;密" --"码;" -+msgstr "Login;Name;Fingerprint;Avatar;Logo;Face;Password;登录;名称;指纹;头像;标志;密码;" - - #. Translators: This button enrolls the computer in the domain in order to use enterprise logins. --#: ../panels/user-accounts/data/join-dialog.ui.h:4 -+#: panels/user-accounts/data/join-dialog.ui:39 - msgid "_Enroll" - msgstr "登记(_E)" - --#: ../panels/user-accounts/data/join-dialog.ui.h:5 -+#: panels/user-accounts/data/join-dialog.ui:75 - msgid "Domain Administrator Login" - msgstr "域管理员登录" - --#: ../panels/user-accounts/data/join-dialog.ui.h:6 -+#: panels/user-accounts/data/join-dialog.ui:93 - msgid "" - "In order to use enterprise logins, this computer needs to be\n" - "enrolled in the domain. Please have your network administrator\n" - "type their domain password here." --msgstr "" --"要使用企业登录,需要在域中注册该计算机。\n" --"请要求网络管理员在此输入域密码。" -+msgstr "要使用企业登录, 需要在域中\n" -+"注册该计算机。请要求网络管理员\n" -+"在此输入域密码。" - --#: ../panels/user-accounts/data/join-dialog.ui.h:10 -+#: panels/user-accounts/data/join-dialog.ui:150 - msgid "Administrator _Name" - msgstr "管理员名称(_N)" - --#: ../panels/user-accounts/data/join-dialog.ui.h:11 -+#: panels/user-accounts/data/join-dialog.ui:185 - msgid "Administrator Password" - msgstr "管理员密码" - --#: ../panels/user-accounts/data/password-dialog.ui.h:1 -+#: panels/user-accounts/data/password-dialog.ui:7 - msgid "Change Password" - msgstr "更改密码" - --#: ../panels/user-accounts/data/password-dialog.ui.h:3 -+#: panels/user-accounts/data/password-dialog.ui:38 - msgid "Ch_ange" - msgstr "更改(_A)" - --#: ../panels/user-accounts/data/password-dialog.ui.h:4 -+#: panels/user-accounts/data/password-dialog.ui:142 - msgid "_Verify New Password" - msgstr "确认新密码(_V)" - --#: ../panels/user-accounts/data/password-dialog.ui.h:5 -+#: panels/user-accounts/data/password-dialog.ui:159 - msgid "_New Password" - msgstr "新密码(_N)" - --#: ../panels/user-accounts/data/password-dialog.ui.h:6 -+#: panels/user-accounts/data/password-dialog.ui:208 - msgid "Current _Password" - msgstr "当前密码(_P)" - --#: ../panels/user-accounts/data/password-dialog.ui.h:7 -+#: panels/user-accounts/data/password-dialog.ui:243 - msgid "Allow user to change their password on next login" - msgstr "允许用户下次登录时更改密码" - --#: ../panels/user-accounts/data/password-dialog.ui.h:8 -+#: panels/user-accounts/data/password-dialog.ui:256 - msgid "Set a password now" - msgstr "现在设置密码" - --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:1 -+#: panels/user-accounts/data/user-accounts-dialog.ui:20 - msgid "_Add User…" - msgstr "添加用户(_A)…" - --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:6 -+#: panels/user-accounts/data/user-accounts-dialog.ui:69 -+msgid "Your session needs to be restarted for changes to take effect" -+msgstr "修改需要重启会话才能生效" -+ -+#: panels/user-accounts/data/user-accounts-dialog.ui:77 -+msgid "Restart Now" -+msgstr "现在重启" -+ -+#: panels/user-accounts/data/user-accounts-dialog.ui:244 - msgid "A_utomatic Login" - msgstr "自动登录(_U)" - --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:7 -+#: panels/user-accounts/data/user-accounts-dialog.ui:285 - msgid "_Fingerprint Login" - msgstr "指纹登录(_F)" - --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:8 -+#: panels/user-accounts/data/user-accounts-dialog.ui:311 -+#: panels/user-accounts/data/user-accounts-dialog.ui:324 - msgid "User Icon" - msgstr "用户图标" - --#: ../panels/user-accounts/data/user-accounts-dialog.ui.h:10 -+#: panels/user-accounts/data/user-accounts-dialog.ui:387 - msgid "Last Login" - msgstr "最近登录" - --#: ../panels/user-accounts/org.gnome.controlcenter.user-accounts.policy.in.h:1 -+#: panels/user-accounts/data/user-accounts-dialog.ui:434 -+msgid "Remove User…" -+msgstr "移除用户......" -+ -+#. Translators: This is the empty state page label which states that there are no users to show in the panel. -+#: panels/user-accounts/data/user-accounts-dialog.ui:466 -+msgid "No Users Found" -+msgstr "没有找到用户" -+ -+#: panels/user-accounts/data/user-accounts-dialog.ui:476 -+msgid "Unlock to add a user account." -+msgstr "解锁以添加一个用户帐户" -+ -+#: panels/user-accounts/org.gnome.controlcenter.user-accounts.policy.in:11 - msgid "Manage user accounts" - msgstr "管理用户帐号" - --#: ../panels/user-accounts/org.gnome.controlcenter.user-accounts.policy.in.h:2 -+#: panels/user-accounts/org.gnome.controlcenter.user-accounts.policy.in:12 - msgid "Authentication is required to change user data" - msgstr "改变用户数据需要认证" - --#: ../panels/user-accounts/pw-utils.c:81 -+#: panels/user-accounts/pw-utils.c:81 - msgctxt "Password hint" - msgid "The new password needs to be different from the old one." - msgstr "新密码不能和旧密码相同。" - --#: ../panels/user-accounts/pw-utils.c:83 -+#: panels/user-accounts/pw-utils.c:83 - msgctxt "Password hint" - msgid "Try changing some letters and numbers." - msgstr "请改动一些字母和数字。" - --#: ../panels/user-accounts/pw-utils.c:85 ../panels/user-accounts/pw-utils.c:93 -+#: panels/user-accounts/pw-utils.c:85 panels/user-accounts/pw-utils.c:93 - msgctxt "Password hint" - msgid "Try changing the password a bit more." - msgstr "请进一步修改密码。" - --#: ../panels/user-accounts/pw-utils.c:87 -+#: panels/user-accounts/pw-utils.c:87 - msgctxt "Password hint" - msgid "A password without your user name would be stronger." - msgstr "不包含用户名的密码更安全。" - --#: ../panels/user-accounts/pw-utils.c:89 -+#: panels/user-accounts/pw-utils.c:89 - msgctxt "Password hint" - msgid "Try to avoid using your name in the password." - msgstr "请勿在密码中使用您的名字。" - --#: ../panels/user-accounts/pw-utils.c:91 -+#: panels/user-accounts/pw-utils.c:91 - msgctxt "Password hint" - msgid "Try to avoid some of the words included in the password." - msgstr "请勿在密码中使用单词。" - --#: ../panels/user-accounts/pw-utils.c:95 -+#: panels/user-accounts/pw-utils.c:95 - msgctxt "Password hint" - msgid "Try to avoid common words." - msgstr "请勿使用常用单词。" - --#: ../panels/user-accounts/pw-utils.c:97 -+#: panels/user-accounts/pw-utils.c:97 - msgctxt "Password hint" - msgid "Try to avoid reordering existing words." - msgstr "请勿仅变更现有单词顺序。" - --#: ../panels/user-accounts/pw-utils.c:99 -+#: panels/user-accounts/pw-utils.c:99 - msgctxt "Password hint" - msgid "Try to use more numbers." - msgstr "请使用更多数字。" - --#: ../panels/user-accounts/pw-utils.c:101 -+#: panels/user-accounts/pw-utils.c:101 - msgctxt "Password hint" - msgid "Try to use more uppercase letters." - msgstr "请使用更多大写字母。" - --#: ../panels/user-accounts/pw-utils.c:103 -+#: panels/user-accounts/pw-utils.c:103 - msgctxt "Password hint" - msgid "Try to use more lowercase letters." - msgstr "请使用更多小写字母。" - --#: ../panels/user-accounts/pw-utils.c:105 -+#: panels/user-accounts/pw-utils.c:105 - msgctxt "Password hint" - msgid "Try to use more special characters, like punctuation." - msgstr "请使用更多特殊字符,如标点符号。" - --#: ../panels/user-accounts/pw-utils.c:107 -+#: panels/user-accounts/pw-utils.c:107 - msgctxt "Password hint" - msgid "Try to use a mixture of letters, numbers and punctuation." - msgstr "请混用字母、数字和标点符号。" - --#: ../panels/user-accounts/pw-utils.c:109 -+#: panels/user-accounts/pw-utils.c:109 - msgctxt "Password hint" - msgid "Try to avoid repeating the same character." - msgstr "请避免重复相同的字符。" - --#: ../panels/user-accounts/pw-utils.c:111 -+#: panels/user-accounts/pw-utils.c:111 - msgctxt "Password hint" - msgid "" - "Try to avoid repeating the same type of character: you need to mix up " - "letters, numbers and punctuation." - msgstr "请避免重复相同类型的字符:你需要混合字母、数字和标点符号。" - --#: ../panels/user-accounts/pw-utils.c:113 -+#: panels/user-accounts/pw-utils.c:113 - msgctxt "Password hint" - msgid "Try to avoid sequences like 1234 or abcd." - msgstr "请避免使用如 1234 或 abcd 的有规律序列。" - --#: ../panels/user-accounts/pw-utils.c:115 -+#: panels/user-accounts/pw-utils.c:115 - msgctxt "Password hint" --msgid "Try to add more letters, numbers and symbols." --msgstr "请使用更多字母、数字和符号。" -+msgid "" -+"Password needs to be longer. Try to add more letters, numbers and " -+"punctuation." -+msgstr "密码太短。添加更多的字母、数字和标点符号。" - --#: ../panels/user-accounts/pw-utils.c:117 -+#: panels/user-accounts/pw-utils.c:117 - msgctxt "Password hint" - msgid "Mix uppercase and lowercase and try to use a number or two." - msgstr "密码需要大小写字母混用并试着使用一到两个数字。" - --#: ../panels/user-accounts/pw-utils.c:119 -+#: panels/user-accounts/pw-utils.c:119 - msgctxt "Password hint" - msgid "" --"Good password! Adding more letters, numbers and punctuation will make it " --"stronger." --msgstr "密码不错!增加更多字母、数字和标点可进一步提高密码强度。" -- --#: ../panels/user-accounts/pw-utils.c:141 --#: ../panels/user-accounts/pw-utils.c:171 --msgctxt "Password strength" --msgid "Strength: Weak" --msgstr "强度:较弱" -- --#: ../panels/user-accounts/pw-utils.c:145 --#: ../panels/user-accounts/pw-utils.c:172 --msgctxt "Password strength" --msgid "Strength: Low" --msgstr "强度:较低" -- --#: ../panels/user-accounts/pw-utils.c:148 --#: ../panels/user-accounts/pw-utils.c:173 --msgctxt "Password strength" --msgid "Strength: Medium" --msgstr "强度:中等" -- --#: ../panels/user-accounts/pw-utils.c:151 --#: ../panels/user-accounts/pw-utils.c:174 --msgctxt "Password strength" --msgid "Strength: Good" --msgstr "强度:良好" -- --#: ../panels/user-accounts/pw-utils.c:154 --#: ../panels/user-accounts/pw-utils.c:175 --msgctxt "Password strength" --msgid "Strength: High" --msgstr "强度:较高" -- --#: ../panels/user-accounts/run-passwd.c:422 -+"Adding more letters, numbers and punctuation will make the password stronger." -+msgstr "加入更多的字母、数字和标点符号会使密码更加牢固。" -+ -+#: panels/user-accounts/run-passwd.c:422 - msgid "Authentication failed" - msgstr "认证失败" - --#: ../panels/user-accounts/run-passwd.c:502 -+#: panels/user-accounts/run-passwd.c:502 - #, c-format - msgid "The new password is too short" - msgstr "新密码太短" - --#: ../panels/user-accounts/run-passwd.c:508 -+#: panels/user-accounts/run-passwd.c:508 - #, c-format - msgid "The new password is too simple" - msgstr "新密码太简单" - --#: ../panels/user-accounts/run-passwd.c:514 -+#: panels/user-accounts/run-passwd.c:514 - #, c-format - msgid "The old and new passwords are too similar" - msgstr "新密码和旧密码太相似" - --#: ../panels/user-accounts/run-passwd.c:517 -+#: panels/user-accounts/run-passwd.c:517 - #, c-format - msgid "The new password has already been used recently." - msgstr "新的密码最近已使用过。" - --#: ../panels/user-accounts/run-passwd.c:520 -+#: panels/user-accounts/run-passwd.c:520 - #, c-format - msgid "The new password must contain numeric or special characters" - msgstr "新密码必须包含数字或特殊字符" - --#: ../panels/user-accounts/run-passwd.c:524 -+#: panels/user-accounts/run-passwd.c:524 - #, c-format - msgid "The old and new passwords are the same" - msgstr "新旧密码相同" - --#: ../panels/user-accounts/run-passwd.c:528 -+#: panels/user-accounts/run-passwd.c:528 - #, c-format - msgid "Your password has been changed since you initially authenticated!" - msgstr "密码在您首次认证后已经更改!" - --#: ../panels/user-accounts/run-passwd.c:532 -+#: panels/user-accounts/run-passwd.c:532 - #, c-format - msgid "The new password does not contain enough different characters" - msgstr "新密码必须一定量不同的字符" - --#: ../panels/user-accounts/run-passwd.c:536 -+#: panels/user-accounts/run-passwd.c:536 - #, c-format - msgid "Unknown error" - msgstr "未知错误" - --#: ../panels/user-accounts/um-account-dialog.c:34 -+#: panels/user-accounts/um-account-dialog.c:34 - msgid "Should match the web address of your login provider." - msgstr "应与您登录提供商的网络地址相同。" - --#: ../panels/user-accounts/um-account-dialog.c:228 -+#: panels/user-accounts/um-account-dialog.c:229 - msgid "Failed to add account" - msgstr "添加帐号失败" - --#: ../panels/user-accounts/um-account-dialog.c:448 -+#: panels/user-accounts/um-account-dialog.c:462 - msgid "Passwords do not match." - msgstr "密码不匹配。" - --#: ../panels/user-accounts/um-account-dialog.c:702 --#: ../panels/user-accounts/um-account-dialog.c:748 --#: ../panels/user-accounts/um-account-dialog.c:769 -+#: panels/user-accounts/um-account-dialog.c:717 -+#: panels/user-accounts/um-account-dialog.c:763 -+#: panels/user-accounts/um-account-dialog.c:784 - msgid "Failed to register account" - msgstr "注册用户失败" - --#: ../panels/user-accounts/um-account-dialog.c:892 -+#: panels/user-accounts/um-account-dialog.c:907 - msgid "No supported way to authenticate with this domain" - msgstr "没有支持该域的验证方法" - --#: ../panels/user-accounts/um-account-dialog.c:965 -+#: panels/user-accounts/um-account-dialog.c:980 - msgid "Failed to join domain" - msgstr "加入域失败" - --#: ../panels/user-accounts/um-account-dialog.c:1026 -+#: panels/user-accounts/um-account-dialog.c:1041 - msgid "" --"That login name didn't work.\n" -+"That login name didn’t work.\n" - "Please try again." --msgstr "登录名不正确,请重试。" -+msgstr "登录名不正确。\n" -+"请重试。" - --#: ../panels/user-accounts/um-account-dialog.c:1033 -+#: panels/user-accounts/um-account-dialog.c:1048 - msgid "" --"That login password didn't work.\n" -+"That login password didn’t work.\n" - "Please try again." --msgstr "登录密码不正确,请重试。" -+msgstr "登录密码不正确。\n" -+"请重试。" - --#: ../panels/user-accounts/um-account-dialog.c:1041 -+#: panels/user-accounts/um-account-dialog.c:1056 - msgid "Failed to log into domain" - msgstr "登录到域失败" - --#: ../panels/user-accounts/um-account-dialog.c:1099 --msgid "Unable find the domain. Maybe you misspelled it?" --msgstr "找不到该域名,也许拼写有误?" -+#: panels/user-accounts/um-account-dialog.c:1114 -+msgid "Unable to find the domain. Maybe you misspelled it?" -+msgstr "找不到域名。拼写有误?" - --#: ../panels/user-accounts/um-account-type.c:34 -+#: panels/user-accounts/um-account-type.c:34 - msgctxt "Account type" - msgid "Standard" - msgstr "标准" - --#: ../panels/user-accounts/um-account-type.c:36 -+#: panels/user-accounts/um-account-type.c:36 - msgctxt "Account type" - msgid "Administrator" - msgstr "管理员" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:138 -+#: panels/user-accounts/um-fingerprint-dialog.c:139 - msgid "" - "You are not allowed to access the device. Contact your system administrator." - msgstr "您未被允许访问该设备。请联系系统管理员。" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:140 -+#: panels/user-accounts/um-fingerprint-dialog.c:141 - msgid "The device is already in use." - msgstr "设备正被占用。" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:142 -+#: panels/user-accounts/um-fingerprint-dialog.c:143 - msgid "An internal error occurred." - msgstr "发生了一个内部错误。" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:216 -+#: panels/user-accounts/um-fingerprint-dialog.c:214 - msgid "Enabled" - msgstr "已启用" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:264 -+#: panels/user-accounts/um-fingerprint-dialog.c:260 - msgid "Delete registered fingerprints?" - msgstr "要删除已记录的指纹吗?" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:268 -+#: panels/user-accounts/um-fingerprint-dialog.c:264 - msgid "_Delete Fingerprints" - msgstr "删除指纹(_D)" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:274 -+#: panels/user-accounts/um-fingerprint-dialog.c:270 - msgid "" - "Do you want to delete your registered fingerprints so fingerprint login is " - "disabled?" - msgstr "确定要删除已登记的指纹吗?这将禁用指纹登录。" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:444 -+#: panels/user-accounts/um-fingerprint-dialog.c:440 - msgid "Done!" - msgstr "完成!" - - #. translators: - #. * The variable is the name of the device, for example: - #. * "Could you not access "Digital Persona U.are.U 4000/4000B" device --#: ../panels/user-accounts/um-fingerprint-dialog.c:505 --#: ../panels/user-accounts/um-fingerprint-dialog.c:547 -+#: panels/user-accounts/um-fingerprint-dialog.c:501 -+#: panels/user-accounts/um-fingerprint-dialog.c:543 - #, c-format --msgid "Could not access '%s' device" --msgstr "无法访问设备“%s”" -+msgid "Could not access “%s” device" -+msgstr "无法访问“%s”设备" - - #. translators: - #. * The variable is the name of the device, for example: - #. * "Could you not access "Digital Persona U.are.U 4000/4000B" device --#: ../panels/user-accounts/um-fingerprint-dialog.c:588 -+#: panels/user-accounts/um-fingerprint-dialog.c:584 - #, c-format --msgid "Could not start finger capture on '%s' device" -+msgid "Could not start finger capture on “%s” device" - msgstr "无法在设备“%s”上启动指纹采集" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:638 -+#: panels/user-accounts/um-fingerprint-dialog.c:628 - msgid "Could not access any fingerprint readers" - msgstr "无法访问指纹读取器" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:639 -+#: panels/user-accounts/um-fingerprint-dialog.c:629 - msgid "Please contact your system administrator for help." - msgstr "请联系系统管理员以寻求帮助。" - -@@ -6554,26 +6932,26 @@ msgstr "请联系系统管理员以寻求帮助。" - #. * "To enable fingerprint login, you need to save one of your fingerprints, using the - #. * 'Digital Persona U.are.U 4000/4000B' device." - #. --#: ../panels/user-accounts/um-fingerprint-dialog.c:721 -+#: panels/user-accounts/um-fingerprint-dialog.c:711 - #, c-format - msgid "" - "To enable fingerprint login, you need to save one of your fingerprints, " --"using the '%s' device." -+"using the “%s” device." - msgstr "要启用指纹登录,您需要使用设备“%s”保存一个指纹。" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:728 -+#: panels/user-accounts/um-fingerprint-dialog.c:718 - msgid "Selecting finger" - msgstr "选择手指" - --#: ../panels/user-accounts/um-fingerprint-dialog.c:729 -+#: panels/user-accounts/um-fingerprint-dialog.c:719 - msgid "Enrolling fingerprints" - msgstr "正在登记指纹" - --#: ../panels/user-accounts/um-history-dialog.c:70 -+#: panels/user-accounts/um-history-dialog.c:70 - msgid "This Week" - msgstr "本周" - --#: ../panels/user-accounts/um-history-dialog.c:73 -+#: panels/user-accounts/um-history-dialog.c:73 - msgid "Last Week" - msgstr "上周" - -@@ -6581,702 +6959,1036 @@ msgstr "上周" - #. shown as the first day of a week on login history dialog. - #. Translators: This is a date format string in the style of "Feb 24", - #. shown as the last day of a week on login history dialog. --#: ../panels/user-accounts/um-history-dialog.c:79 --#: ../panels/user-accounts/um-history-dialog.c:83 -+#: panels/user-accounts/um-history-dialog.c:79 -+#: panels/user-accounts/um-history-dialog.c:83 - msgctxt "login history week label" - msgid "%b %e" - msgstr "%b %e" - - #. Translators: This is a date format string in the style of "Feb 24, 2013", - #. shown as the last day of a week on login history dialog. --#: ../panels/user-accounts/um-history-dialog.c:88 -+#: panels/user-accounts/um-history-dialog.c:88 - msgctxt "login history week label" - msgid "%b %e, %Y" --msgstr "%Y %b %e" -+msgstr "%b %e, %Y" - - #. Translators: This indicates a week label on a login history. - #. The first %s is the first day of a week, and the second %s the last day. --#: ../panels/user-accounts/um-history-dialog.c:93 -+#: panels/user-accounts/um-history-dialog.c:93 - #, c-format - msgctxt "login history week label" --msgid "%s - %s" --msgstr "%s - %s" -+msgid "%s — %s" -+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:841 -+#: panels/user-accounts/um-history-dialog.c:177 -+#: panels/user-accounts/um-user-panel.c:766 - msgctxt "login date-time" - msgid "%k:%M" - 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:845 -+#: panels/user-accounts/um-history-dialog.c:180 -+#: panels/user-accounts/um-user-panel.c:770 - #, c-format - msgctxt "login date-time" - msgid "%s, %s" - msgstr "%s, %s" - --#: ../panels/user-accounts/um-history-dialog.c:250 -+#: panels/user-accounts/um-history-dialog.c:250 - msgid "Session Ended" - msgstr "会话结束" - --#: ../panels/user-accounts/um-history-dialog.c:256 -+#: panels/user-accounts/um-history-dialog.c:256 - msgid "Session Started" - msgstr "会话开始" - - #. Translators: This is the title of the "Account Activity" dialog. - #. The %s is the user real name. --#: ../panels/user-accounts/um-history-dialog.c:299 -+#: panels/user-accounts/um-history-dialog.c:299 - #, c-format --msgid "%s - Account Activity" --msgstr "%s - 账号活动" -+msgid "%s — Account Activity" -+msgstr "%s - 账户活动" - --#: ../panels/user-accounts/um-password-dialog.c:145 -+#: panels/user-accounts/um-password-dialog.c:144 - msgid "Please choose another password." - msgstr "请选择另一个密码。" - --#: ../panels/user-accounts/um-password-dialog.c:154 -+#: panels/user-accounts/um-password-dialog.c:153 - msgid "Please type your current password again." - msgstr "请再次输入当前密码。" - --#: ../panels/user-accounts/um-password-dialog.c:160 -+#: panels/user-accounts/um-password-dialog.c:159 - msgid "Password could not be changed" - msgstr "无法更改密码" - --#: ../panels/user-accounts/um-password-dialog.c:286 -+#: panels/user-accounts/um-password-dialog.c:285 - msgid "The passwords do not match." - msgstr "密码不匹配。" - --#: ../panels/user-accounts/um-photo-dialog.c:214 -+#: panels/user-accounts/um-photo-dialog.c:227 - msgid "Browse for more pictures" - msgstr "浏览更多图片" - --#: ../panels/user-accounts/um-photo-dialog.c:448 --msgid "Disable image" --msgstr "禁用图像" -- --#: ../panels/user-accounts/um-photo-dialog.c:466 --msgid "Take a photo…" --msgstr "拍张照片…" -- --#: ../panels/user-accounts/um-photo-dialog.c:484 --msgid "Browse for more pictures…" --msgstr "浏览更多图片…" -- --#: ../panels/user-accounts/um-photo-dialog.c:708 --#, c-format --msgid "Used by %s" --msgstr "已被 %s 使用" -- --#: ../panels/user-accounts/um-realm-manager.c:350 -+#: panels/user-accounts/um-realm-manager.c:350 - msgid "Cannot automatically join this type of domain" - msgstr "无法自动加入此类域" - --#: ../panels/user-accounts/um-realm-manager.c:413 -+#: panels/user-accounts/um-realm-manager.c:413 - #, c-format - msgid "No such domain or realm found" - msgstr "无此域或 Realm" - --#: ../panels/user-accounts/um-realm-manager.c:815 --#: ../panels/user-accounts/um-realm-manager.c:829 -+#: panels/user-accounts/um-realm-manager.c:815 -+#: panels/user-accounts/um-realm-manager.c:829 - #, c-format - msgid "Cannot log in as %s at the %s domain" - msgstr "无法以 %s 的身份登录域 %s" - --#: ../panels/user-accounts/um-realm-manager.c:821 -+#: panels/user-accounts/um-realm-manager.c:821 - msgid "Invalid password, please try again" - msgstr "无效密码,请重试" - --#: ../panels/user-accounts/um-realm-manager.c:834 -+#: panels/user-accounts/um-realm-manager.c:834 - #, c-format --msgid "Couldn't connect to the %s domain: %s" -+msgid "Couldn’t connect to the %s domain: %s" - msgstr "无法连接到 %s 域:%s" - --#: ../panels/user-accounts/um-user-panel.c:239 --msgid "Other Accounts" --msgstr "其他帐号" -+#: panels/user-accounts/um-user-panel.c:200 -+msgid "Your account" -+msgstr "您的账户" - --#: ../panels/user-accounts/um-user-panel.c:447 -+#: panels/user-accounts/um-user-panel.c:380 - msgid "Failed to delete user" - msgstr "删除用户失败" - --#: ../panels/user-accounts/um-user-panel.c:507 --#: ../panels/user-accounts/um-user-panel.c:566 --#: ../panels/user-accounts/um-user-panel.c:618 -+#: 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 "吊销远程管理的用户失败" - --#: ../panels/user-accounts/um-user-panel.c:674 -+#: panels/user-accounts/um-user-panel.c:603 - msgid "You cannot delete your own account." - msgstr "不能删除自己的帐号。" - --#: ../panels/user-accounts/um-user-panel.c:683 -+#: panels/user-accounts/um-user-panel.c:612 - #, c-format - msgid "%s is still logged in" - msgstr "%s 已经登录" - --#: ../panels/user-accounts/um-user-panel.c:687 -+#: 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." - msgstr "删除已登录帐号可能导致系统不一致。" - --#: ../panels/user-accounts/um-user-panel.c:696 -+#: panels/user-accounts/um-user-panel.c:625 - #, c-format --msgid "Do you want to keep %s's files?" -+msgid "Do you want to keep %s’s files?" - msgstr "要保留 %s 的文件吗?" - --#: ../panels/user-accounts/um-user-panel.c:700 -+#: 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." - msgstr "删除用户时可以保留其主目录、电子邮件目录和临时文件。" - --#: ../panels/user-accounts/um-user-panel.c:703 -+#: panels/user-accounts/um-user-panel.c:632 - msgid "_Delete Files" - msgstr "删除文件(_D)" - --#: ../panels/user-accounts/um-user-panel.c:704 -+#: panels/user-accounts/um-user-panel.c:633 - msgid "_Keep Files" - msgstr "保留文件(_K)" - --#: ../panels/user-accounts/um-user-panel.c:718 -+#: panels/user-accounts/um-user-panel.c:647 - #, c-format --msgid "Are you sure you want to revoke remotely managed %s's account?" --msgstr "您确定要吊销远程管理的帐号 %s 吗?" -+msgid "Are you sure you want to revoke remotely managed %s’s account?" -+msgstr "确定要撤销远程管理的%s的帐户吗?" - --#: ../panels/user-accounts/um-user-panel.c:722 -+#: panels/user-accounts/um-user-panel.c:651 - msgid "_Delete" - msgstr "删除(_D)" - --#: ../panels/user-accounts/um-user-panel.c:774 -+#: panels/user-accounts/um-user-panel.c:701 - msgctxt "Password mode" - msgid "Account disabled" - msgstr "帐号已禁用" - --#: ../panels/user-accounts/um-user-panel.c:782 -+#: panels/user-accounts/um-user-panel.c:709 - msgctxt "Password mode" - msgid "To be set at next login" - msgstr "下次登录时设置" - --#: ../panels/user-accounts/um-user-panel.c:785 -+#: panels/user-accounts/um-user-panel.c:712 - msgctxt "Password mode" - msgid "None" - msgstr "无" - --#: ../panels/user-accounts/um-user-panel.c:834 -+#: panels/user-accounts/um-user-panel.c:759 - msgid "Logged in" - msgstr "已登录" - --#: ../panels/user-accounts/um-user-panel.c:1290 -+#: panels/user-accounts/um-user-panel.c:1106 - msgid "Failed to contact the accounts service" - msgstr "联系帐号服务失败" - --#: ../panels/user-accounts/um-user-panel.c:1292 -+#: panels/user-accounts/um-user-panel.c:1108 - msgid "Please make sure that the AccountService is installed and enabled." - msgstr "请确定帐号服务已正确安装并启用。" - --#: ../panels/user-accounts/um-user-panel.c:1334 -+#. Translator comments: -+#. * 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:1140 - msgid "" - "To make changes,\n" - "click the * icon first" --msgstr "" --"要进行更改,\n" -+msgstr "要进行更改,\n" - "请先点击 * 图标" - --#: ../panels/user-accounts/um-user-panel.c:1374 -+#: panels/user-accounts/um-user-panel.c:1180 - msgid "Create a user account" - msgstr "创建用户帐号" - --#: ../panels/user-accounts/um-user-panel.c:1385 --#: ../panels/user-accounts/um-user-panel.c:1677 -+#: 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" --msgstr "" --"要创建用户帐号,\n" -+msgstr "要创建用户帐号,\n" - "请先点击 * 图标" - --#: ../panels/user-accounts/um-user-panel.c:1395 -+#: panels/user-accounts/um-user-panel.c:1201 - msgid "Delete the selected user account" - msgstr "删除选中的用户帐号" - --#: ../panels/user-accounts/um-user-panel.c:1407 --#: ../panels/user-accounts/um-user-panel.c:1682 -+#: 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" --msgstr "" --"要删除选中的用户帐号,\n" -+msgstr "要删除选中的用户帐号,\n" - "请先点击 * 图标" - --#: ../panels/user-accounts/um-user-panel.c:1591 --msgid "My Account" --msgstr "我的帐号" -+#: panels/user-accounts/um-utils.c:496 -+msgid "Sorry, that user name isn’t available. Please try another." -+msgstr "对不起,该用户名不可用。请换一个。" - --#: ../panels/user-accounts/um-utils.c:563 --msgid "Sorry, that user name isn't available. Please try another." --msgstr "抱歉,该用户名不可用。请试下别的。" -- --#: ../panels/user-accounts/um-utils.c:566 -+#: panels/user-accounts/um-utils.c:499 - #, c-format - msgid "The username is too long." - msgstr "用户名太长。" - --#: ../panels/user-accounts/um-utils.c:569 --msgid "The username cannot start with a '-'." -+#: panels/user-accounts/um-utils.c:502 -+msgid "The username cannot start with a “-”." - msgstr "用户名不能以“-”开头。" - --#: ../panels/user-accounts/um-utils.c:572 -+#: panels/user-accounts/um-utils.c:505 - msgid "" - "The username should only consist of upper and lower case letters from a-z, " - "digits and the following characters: . - _" - msgstr "用户名只能包含大小写英文字母(a 至 z)、数字和“.”“-”“_”符号" - --#: ../panels/user-accounts/um-utils.c:576 --msgid "This will be used to name your home folder and can't be changed." --msgstr "将作为您主文件夹的名称且不可再次更改。" -+#: panels/user-accounts/um-utils.c:509 -+msgid "This will be used to name your home folder and can’t be changed." -+msgstr "这将作来命名您的主文件夹且不可再次更改。" - --#: ../panels/wacom/button-mapping.ui.h:1 -+#: panels/wacom/button-mapping.ui:9 - msgid "Map Buttons" - msgstr "映射按键" - --#: ../panels/wacom/button-mapping.ui.h:3 -+#: panels/wacom/button-mapping.ui:37 panels/wacom/cc-wacom-page.c:547 -+#: panels/wacom/gnome-wacom-properties.ui:60 -+msgid "_Close" -+msgstr "关闭(_C)" -+ -+#: panels/wacom/button-mapping.ui:71 - msgid "Map buttons to functions" - msgstr "将功能映射到按键" - --#: ../panels/wacom/button-mapping.ui.h:4 -+#: panels/wacom/button-mapping.ui:119 - msgid "" --"To edit a shortcut, choose the \"Send Keystroke\" action, press the keyboard " -+"To edit a shortcut, choose the “Send Keystroke” action, press the keyboard " - "shortcut button and hold down the new keys or press Backspace to clear." --msgstr "" --"要编辑快捷键,请选择“发送按键”动作,按下键盘快捷键,然后输入新按键组合,或按" --"退格键清除。" -+msgstr "要编辑快捷键,选择“Send Keystroke”动操作,按键盘快捷键,然后输入新按键组合,或按退格键清除。" - --#: ../panels/wacom/calibrator/calibrator-gui.c:83 -+#: panels/wacom/calibrator/calibrator-gui.c:83 - msgid "" - "Please tap the target markers as they appear on screen to calibrate the " - "tablet." - msgstr "请触摸屏幕上出现的标记以校准平板电脑。" - --#: ../panels/wacom/calibrator/calibrator-gui.c:87 --msgid "Mis-click detected, restarting..." --msgstr "检测到误点击,重新开始校准…" -- --#: ../panels/wacom/cc-wacom-button-row.c:442 --msgctxt "Wacom tablet button" --msgid "Up" --msgstr "上键" -+#: panels/wacom/calibrator/calibrator-gui.c:87 -+msgid "Mis-click detected, restarting…" -+msgstr "检测到误点击,重新开始...…" - --#: ../panels/wacom/cc-wacom-button-row.c:443 --msgctxt "Wacom tablet button" --msgid "Down" --msgstr "下键" -+#: panels/wacom/cc-wacom-button-row.c:266 -+#, c-format -+msgid "Button %d" -+msgstr "键 %d" - --#: ../panels/wacom/cc-wacom-button-row.h:54 -+#: panels/wacom/cc-wacom-button-row.h:53 - msgctxt "Wacom action-type" --msgid "None" --msgstr "无" -+msgid "Application defined" -+msgstr "定义了应用程序" - --#: ../panels/wacom/cc-wacom-button-row.h:55 -+#: panels/wacom/cc-wacom-button-row.h:54 - msgctxt "Wacom action-type" - msgid "Send Keystroke" - msgstr "发送按键" - --#: ../panels/wacom/cc-wacom-button-row.h:56 -+#: panels/wacom/cc-wacom-button-row.h:55 - msgctxt "Wacom action-type" - msgid "Switch Monitor" - msgstr "切换显示器" - --#: ../panels/wacom/cc-wacom-button-row.h:57 -+#: panels/wacom/cc-wacom-button-row.h:56 - msgctxt "Wacom action-type" - msgid "Show On-Screen Help" - msgstr "显示屏幕帮助" - --#: ../panels/wacom/cc-wacom-mapping-panel.c:263 -+#: panels/wacom/cc-wacom-mapping-panel.c:260 - msgid "Output:" - msgstr "输出:" - - #. Keep ratio switch --#: ../panels/wacom/cc-wacom-mapping-panel.c:275 -+#: panels/wacom/cc-wacom-mapping-panel.c:272 - msgid "Keep aspect ratio (letterbox):" - msgstr "保持长宽比(黑边):" - - #. Whole-desktop checkbox --#: ../panels/wacom/cc-wacom-mapping-panel.c:286 -+#: panels/wacom/cc-wacom-mapping-panel.c:283 - msgid "Map to single monitor" - msgstr "映射到单个显示器…" - --#: ../panels/wacom/cc-wacom-nav-button.c:88 -+#: panels/wacom/cc-wacom-nav-button.c:86 - #, c-format - msgid "%d of %d" - msgstr "%d/%d" - --#: ../panels/wacom/cc-wacom-page.c:522 -+#: panels/wacom/cc-wacom-page.c:544 - msgid "Display Mapping" - msgstr "显示映射" - --#: ../panels/wacom/cc-wacom-stylus-page.c:377 -+#: panels/wacom/cc-wacom-panel.c:834 panels/wacom/wacom-stylus-page.ui:127 -+msgid "Stylus" -+msgstr "手写笔" -+ -+#: panels/wacom/cc-wacom-stylus-page.c:362 - msgid "Button" - msgstr "按键" - --#. Translators: Add soft hyphens to your translations so that the icon view won't clip your translations. See https://bugzilla.gnome.org/show_bug.cgi?id=647087#c13 for details --#: ../panels/wacom/gnome-wacom-panel.desktop.in.in.h:2 --msgid "Wa­com Tab­let" -+#: panels/wacom/gnome-wacom-panel.desktop.in.in:3 -+#: panels/wacom/gnome-wacom-properties.ui:198 -+msgid "Wacom Tablet" - msgstr "Wacom 手写板" - --#: ../panels/wacom/gnome-wacom-panel.desktop.in.in.h:3 -+#: panels/wacom/gnome-wacom-panel.desktop.in.in:4 - msgid "Set button mappings and adjust stylus sensitivity for graphics tablets" - msgstr "为绘图用平板设备设置按键映射并调整触摸笔灵敏度" - --#. Translators: those are keywords for the wacom tablet control-center panel --#: ../panels/wacom/gnome-wacom-panel.desktop.in.in.h:5 -+#. 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: 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;Stylus;Eraser;Mouse;手写板;手写板;写字笔;擦除器;鼠标;" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:1 -+#: panels/wacom/gnome-wacom-properties.ui:15 - msgid "Tablet (absolute)" - msgstr "手写板(绝对)" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:2 -+#: panels/wacom/gnome-wacom-properties.ui:19 - msgid "Touchpad (relative)" - msgstr "触摸板(相对)" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:3 -+#: panels/wacom/gnome-wacom-properties.ui:27 - msgid "Tablet Preferences" - msgstr "手写板首选项" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:4 -+#: panels/wacom/gnome-wacom-properties.ui:44 - msgid "_Help" - msgstr "帮助(_H)" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:6 -+#: panels/wacom/gnome-wacom-properties.ui:123 - msgid "No tablet detected" - msgstr "未检测到手写板" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:7 -+#: panels/wacom/gnome-wacom-properties.ui:139 - msgid "Please plug in or turn on your Wacom tablet" - msgstr "请插入并打开您的 Wacom 手写板" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:8 -+#: panels/wacom/gnome-wacom-properties.ui:159 - msgid "Bluetooth Settings" - msgstr "蓝牙设置" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:9 --msgid "Wacom Tablet" --msgstr "Wacom 手写板" -- --#: ../panels/wacom/gnome-wacom-properties.ui.h:10 -+#: panels/wacom/gnome-wacom-properties.ui:231 - msgid "Map to Monitor…" - msgstr "映射到显示器…" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:11 -+#: panels/wacom/gnome-wacom-properties.ui:247 - msgid "Map Buttons…" - msgstr "映射按键…" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:12 -+#: panels/wacom/gnome-wacom-properties.ui:263 - msgid "Calibrate…" - msgstr "校准…" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:13 -+#: panels/wacom/gnome-wacom-properties.ui:284 - msgid "Adjust display resolution" - msgstr "调整显示分辨率" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:14 -+#: panels/wacom/gnome-wacom-properties.ui:300 - msgid "Adjust mouse settings" - msgstr "调整鼠标设置" - --#: ../panels/wacom/gnome-wacom-properties.ui.h:15 -+#: panels/wacom/gnome-wacom-properties.ui:328 - msgid "Tracking Mode" - msgstr "跟踪模式" - - # 左撇子有歧视色彩。 --#: ../panels/wacom/gnome-wacom-properties.ui.h:16 -+#: panels/wacom/gnome-wacom-properties.ui:356 - msgid "Left-Handed Orientation" - msgstr "惯用左手" - --#. If no mode is available, we use "left-ring-mode-1" for backward compat --#: ../panels/wacom/gsd-wacom-device.c:1028 --msgid "Left Ring" --msgstr "左环模式" -- --#: ../panels/wacom/gsd-wacom-device.c:1039 --#, c-format --msgid "Left Ring Mode #%d" --msgstr "左环模式 #%d" -- --#. If no mode is available, we use "right-ring-mode-1" for backward compat --#: ../panels/wacom/gsd-wacom-device.c:1059 --msgid "Right Ring" --msgstr "右环模式" -- --#: ../panels/wacom/gsd-wacom-device.c:1070 --#, c-format --msgid "Right Ring Mode #%d" --msgstr "右环模式 #%d" -- --# Touchstrip和touchring都是商标。 --#. If no mode is available, we use "left-strip-mode-1" for backward compat --#: ../panels/wacom/gsd-wacom-device.c:1112 --msgid "Left Touchstrip" --msgstr "左 Touchstrip 模式" -- --# Touchstrip和touchring都是商标。 --#: ../panels/wacom/gsd-wacom-device.c:1123 --#, c-format --msgid "Left Touchstrip Mode #%d" --msgstr "左 Touchstrip 模式 #%d" -- --#. If no mode is available, we use "right-strip-mode-1" for backward compat --#: ../panels/wacom/gsd-wacom-device.c:1143 --msgid "Right Touchstrip" --msgstr "右 Touchstrip" -- --#: ../panels/wacom/gsd-wacom-device.c:1154 --#, c-format --msgid "Right Touchstrip Mode #%d" --msgstr "右 Touchstrip 模式 #%d" -- --#: ../panels/wacom/gsd-wacom-device.c:1180 --#, c-format --msgid "Left Touchring Mode Switch" --msgstr "左 Touchring 模式切换" -- --#: ../panels/wacom/gsd-wacom-device.c:1182 --#, c-format --msgid "Right Touchring Mode Switch" --msgstr "右 Touchring 模式切换" -- --#: ../panels/wacom/gsd-wacom-device.c:1185 --#, c-format --msgid "Left Touchstrip Mode Switch" --msgstr "左 Touchstrip 模式切换" -- --#: ../panels/wacom/gsd-wacom-device.c:1187 --#, c-format --msgid "Right Touchstrip Mode Switch" --msgstr "右 Touchstrip 模式切换" -- --#: ../panels/wacom/gsd-wacom-device.c:1192 --#, c-format --msgid "Mode Switch #%d" --msgstr "模式切换 #%d" -- --#: ../panels/wacom/gsd-wacom-device.c:1238 --#, c-format --msgid "Left Button #%d" --msgstr "左键 #%d" -- --#: ../panels/wacom/gsd-wacom-device.c:1241 --#, c-format --msgid "Right Button #%d" --msgstr "右键 #%d" -- --#: ../panels/wacom/gsd-wacom-device.c:1244 --#, c-format --msgid "Top Button #%d" --msgstr "上键 #%d" -- --#: ../panels/wacom/gsd-wacom-device.c:1247 --#, c-format --msgid "Bottom Button #%d" --msgstr "底键 #%d" -- --#: ../panels/wacom/gsd-wacom-key-shortcut-button.c:263 -+#: panels/wacom/gsd-wacom-key-shortcut-button.c:263 - msgid "New shortcut…" - msgstr "新建快捷键…" - --#: ../panels/wacom/wacom-stylus-page.ui.h:1 --msgid "No Action" --msgstr "无动作" -- --#: ../panels/wacom/wacom-stylus-page.ui.h:2 --msgid "Left Mouse Button Click" --msgstr "鼠标左键单击" -- --#: ../panels/wacom/wacom-stylus-page.ui.h:3 -+#: panels/wacom/wacom-stylus-page.ui:29 - msgid "Middle Mouse Button Click" - msgstr "鼠标中键单击" - --#: ../panels/wacom/wacom-stylus-page.ui.h:4 -+#: panels/wacom/wacom-stylus-page.ui:33 - msgid "Right Mouse Button Click" - msgstr "鼠标右键单击" - --#: ../panels/wacom/wacom-stylus-page.ui.h:5 --msgid "Scroll Up" --msgstr "向上滚动" -- --#: ../panels/wacom/wacom-stylus-page.ui.h:6 --msgid "Scroll Down" --msgstr "向下滚动" -- --#: ../panels/wacom/wacom-stylus-page.ui.h:7 --msgid "Scroll Left" --msgstr "向左滚动" -- --#: ../panels/wacom/wacom-stylus-page.ui.h:8 --msgid "Scroll Right" --msgstr "向右滚动" -- --#: ../panels/wacom/wacom-stylus-page.ui.h:9 -+#: panels/wacom/wacom-stylus-page.ui:37 - msgid "Back" - msgstr "后退" - --#: ../panels/wacom/wacom-stylus-page.ui.h:10 -+#: panels/wacom/wacom-stylus-page.ui:41 - msgid "Forward" - msgstr "前进" - --#: ../panels/wacom/wacom-stylus-page.ui.h:11 --msgid "Stylus" --msgstr "手写笔" -+#: panels/wacom/wacom-stylus-page.ui:77 -+msgid "No stylus found" -+msgstr "没有找到触控笔" -+ -+#: panels/wacom/wacom-stylus-page.ui:91 -+msgid "Please move your stylus to the proximity of the tablet to configure it" -+msgstr "请将您的触控笔移至平板电脑附近进行配置" - --#: ../panels/wacom/wacom-stylus-page.ui.h:12 -+#: panels/wacom/wacom-stylus-page.ui:167 - msgid "Eraser Pressure Feel" - msgstr "擦除压力感应" - --#: ../panels/wacom/wacom-stylus-page.ui.h:13 -+#: panels/wacom/wacom-stylus-page.ui:188 panels/wacom/wacom-stylus-page.ui:348 - msgid "Soft" - msgstr "软" - --#: ../panels/wacom/wacom-stylus-page.ui.h:14 -+#: panels/wacom/wacom-stylus-page.ui:218 panels/wacom/wacom-stylus-page.ui:378 - msgid "Firm" - msgstr "硬" - --#: ../panels/wacom/wacom-stylus-page.ui.h:15 -+#: panels/wacom/wacom-stylus-page.ui:241 - msgid "Top Button" - msgstr "上键" - --#: ../panels/wacom/wacom-stylus-page.ui.h:16 -+#: panels/wacom/wacom-stylus-page.ui:270 - msgid "Lower Button" - msgstr "下键" - --#: ../panels/wacom/wacom-stylus-page.ui.h:17 -+#: panels/wacom/wacom-stylus-page.ui:299 -+msgid "Lowest Button" -+msgstr "最低键" -+ -+#: panels/wacom/wacom-stylus-page.ui:328 - msgid "Tip Pressure Feel" - msgstr "指尖压力感应" - --#: ../shell/alt/cc-window.c:765 ../shell/cc-window.c:53 --#: ../shell/cc-window.c:1478 --msgid "All Settings" --msgstr "全部设置" -+#: panels/wacom/wacom-stylus-page.ui:440 -+msgid "page 3" -+msgstr "第 3 页" - --#: ../shell/appdata/gnome-control-center.appdata.xml.in.h:1 -+#: shell/appdata/gnome-control-center.appdata.xml.in:7 - msgid "GNOME Control Center" - msgstr "GNOME 控制中心" - --#: ../shell/appdata/gnome-control-center.appdata.xml.in.h:2 -+#: shell/appdata/gnome-control-center.appdata.xml.in:8 - msgid "Utilities to configure the GNOME desktop" - msgstr "用来配置 GNOME 桌面的工具" - --#: ../shell/appdata/gnome-control-center.appdata.xml.in.h:3 -+#: shell/appdata/gnome-control-center.appdata.xml.in:10 - msgid "" --"The control center is GNOME's main interface for configuration of various " -+"The control center is GNOME’s main interface for configuration of various " - "aspects of your desktop." - msgstr "控制中心是 GNOME 用于配置桌面各方面设置的主要界面。" - --#: ../shell/cc-application.c:45 -+#: shell/cc-application.c:47 - msgid "Display version number" - msgstr "显示版本号" - --#: ../shell/cc-application.c:46 -+#: shell/cc-application.c:48 - msgid "Enable verbose mode" - msgstr "启用详细模式" - --#: ../shell/cc-application.c:47 -+#: shell/cc-application.c:49 - msgid "Show the overview" - msgstr "显示摘要" - --#: ../shell/cc-application.c:48 -+#: shell/cc-application.c:50 - msgid "Search for the string" - msgstr "搜索字符串" - --#: ../shell/cc-application.c:49 -+#: shell/cc-application.c:51 - msgid "List possible panel names and exit" - msgstr "列出所有面板名称并退出" - --#: ../shell/cc-application.c:50 -+#: shell/cc-application.c:52 - msgid "Panel to display" - msgstr "要显示的面板" - --#: ../shell/cc-application.c:50 -+#: shell/cc-application.c:52 - msgid "[PANEL] [ARGUMENT…]" - msgstr "[面板] [参数…]" - --#: ../shell/cc-application.c:113 -+#: shell/cc-application.c:117 - msgid "Available panels:" - msgstr "可用面板" - --#: ../shell/cc-application.c:252 -+#: shell/cc-application.c:256 - msgid "Help" - msgstr "帮助" - --#: ../shell/cc-application.c:253 -+#: shell/cc-application.c:257 - msgid "Quit" - msgstr "退出" - --#. Add categories --#: ../shell/cc-window.c:871 --msgctxt "category" --msgid "Personal" --msgstr "个人" -- --#: ../shell/cc-window.c:872 --msgctxt "category" --msgid "Hardware" --msgstr "硬件" -- --#: ../shell/cc-window.c:873 --msgctxt "category" --msgid "System" --msgstr "系统" -+#. 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.h:2 -+#. 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 "Preferences;Settings;首选项;设置;" - --#: ../shell/help-overlay.ui.h:1 -+#: shell/help-overlay.ui:15 - msgctxt "shortcut window" - msgid "General" - msgstr "常规" - --#: ../shell/help-overlay.ui.h:2 -+#: shell/help-overlay.ui:20 - msgctxt "shortcut window" - msgid "Quit" - msgstr "退出" - --#: ../shell/help-overlay.ui.h:3 -+#: shell/help-overlay.ui:27 shell/help-overlay.ui:48 - msgctxt "shortcut window" - msgid "Search" - msgstr "搜索" - --#: ../shell/help-overlay.ui.h:4 -+#: shell/help-overlay.ui:35 - msgctxt "shortcut window" - msgid "Panels" - msgstr "面板" - --#: ../shell/help-overlay.ui.h:5 -+#: shell/help-overlay.ui:40 - msgctxt "shortcut window" - msgid "Go back to the overview" - msgstr "后退到总览视图" - --#: ../shell/help-overlay.ui.h:6 -+#: shell/help-overlay.ui:53 - msgctxt "shortcut window" - msgid "Cancel search" - msgstr "取消搜索" - - #. translators: This is the default hotspot name, need to be less than 32-bytes --#: ../shell/hostname-helper.c:189 -+#: shell/hostname-helper.c:189 - msgctxt "hotspot" - msgid "Hotspot" - msgstr "热点" - --#: ../shell/panel-list.ui.h:3 --#, fuzzy --#| msgid "No regions found" -+#: shell/org.gnome.ControlCenter.gschema.xml:5 -+msgid "The identifier for the last Settings panel to be opened" -+msgstr "最后打开的设置面板的标识符。" -+ -+#: shell/org.gnome.ControlCenter.gschema.xml:6 -+msgid "" -+"The identifier for the last Settings panel to be opened. Unrecognised values " -+"will be ignored and the first panel in the list selected." -+msgstr "最后一个要打开的设置面板的标识符,未识别的值将被忽略,列表中的第一个面板被选择。" -+ -+#: shell/panel-list.ui:195 - msgid "No results found" --msgstr "无可用区域" -+msgstr "没有找到结果" -+ -+#: shell/window.ui:141 -+msgid "All Settings" -+msgstr "全部设置" -+ -+#. translators: -+#. * The number of sound outputs on a particular device -+#: subprojects/gvc/gvc-mixer-control.c:1873 -+#, c-format -+msgid "%u Output" -+msgid_plural "%u Outputs" -+msgstr[0] "%u 路输出" -+ -+#. translators: -+#. * The number of sound inputs on a particular device -+#: subprojects/gvc/gvc-mixer-control.c:1883 -+#, c-format -+msgid "%u Input" -+msgid_plural "%u Inputs" -+msgstr[0] "%u 路输入" -+ -+#: subprojects/gvc/gvc-mixer-control.c:2738 -+msgid "System Sounds" -+msgstr "系统声音" -+ -+#~ msgid "Back­ground" -+#~ msgstr "背景" -+ -+#~ msgid "Blue­tooth" -+#~ msgstr "蓝牙" -+ -+#~ msgid "Co­lor" -+#~ msgstr "色彩" -+ -+#~ msgid "Lid Closed" -+#~ msgstr "上盖已合上" -+ -+#~ msgid "Mirrored" -+#~ msgstr "镜像显示" -+ -+#~ msgid "Primary" -+#~ msgstr "主显示器" -+ -+#~ msgid "Secondary" -+#~ msgstr "副显示器" -+ -+#~ msgid "Arrange Combined Displays" -+#~ msgstr "安排多个显示" -+ -+#~ msgid "Drag displays to rearrange them" -+#~ msgstr "拖动以重新排列显示屏拖动以重新排列显示屏" -+ -+#~ msgid "%d Hz (NTSC)" -+#~ msgstr "%d Hz (NTSC)" -+ -+#~ msgid "%d Hz" -+#~ msgstr "%d Hz" -+ -+#~ msgid "Rotate counterclockwise by 90°" -+#~ msgstr "逆时针旋转 90°" -+ -+#~ msgid "Rotate by 180°" -+#~ msgstr "旋转 180°" -+ -+#~ msgid "Rotate clockwise by 90°" -+#~ msgstr "顺时针旋转 90°" -+ -+#~ msgid "Size" -+#~ msgstr "大小" -+ -+#~ msgid "Aspect Ratio" -+#~ msgstr "宽高比" -+ -+#~ msgid "Show the top bar and Activities Overview on this display" -+#~ msgstr "在此显示器上显示顶栏和活动概览" -+ -+#~ msgid "Join this display with another to create an extra workspace" -+#~ msgstr "将该显示器与另一显示器合并以扩展工作空间" -+ -+# 左撇子有歧视色彩。 -+#~ msgid "Presentation" -+#~ msgstr "演示" -+ -+#~ msgid "Show slideshows and media only" -+#~ msgstr "只显示幻灯片和多媒体" -+ -+#~ msgid "Show your existing view on both displays" -+#~ msgstr "在两块显示器上同时显示当前视图" -+ -+#~ msgid "Turn Off" -+#~ msgstr "关闭" -+ -+#~ msgid "Don't use this display" -+#~ msgstr "不使用该显示器" -+ -+#~ msgid "_Arrange Combined Displays" -+#~ msgstr "安排多个显示(_A)" -+ -+#~ msgid "%s %d-bit (Build ID: %s)" -+#~ msgstr "%s %d 位(构建 ID:%s)" -+ -+#~ msgid "%s %d-bit" -+#~ msgstr "%s %d 位" -+ -+#~ msgid "Section" -+#~ msgstr "节" -+ -+#~ msgid "Overview" -+#~ msgstr "总览" -+ -+#~ msgid "De­tails" -+#~ msgstr "详细信息" -+ -+#~ msgid "Base system" -+#~ msgstr "基本系统" -+ -+#~ msgid "Check for updates" -+#~ msgstr "检查更新" -+ -+#~ msgid "Shortcut;Repeat;Blink;" -+#~ msgstr "Shortcut;Repeat;Blink;快捷键;重复;闪烁;" -+ -+#~ msgid "Press Esc to cancel." -+#~ msgstr "按 Esc 键取消。" -+ -+#~ msgid "Edit" -+#~ msgstr "编辑" -+ -+#~ msgid "Server" -+#~ msgstr "服务器" -+ -+#~ msgid "Delete DNS Server" -+#~ msgstr "删除 DNS 服务器" -+ -+#~ msgid "Make available to other _users" -+#~ msgstr "对其他用户可用(_U)" -+ -+#~ msgid "Firewall _Zone" -+#~ msgstr "防火墙区域(_Z)" -+ -+#~ msgctxt "Firewall zone" -+#~ msgid "Default" -+#~ msgstr "默认" -+ -+#~ msgid "The zone defines the trust level of the connection" -+#~ msgstr "此区域定义了对连接的信任级别" -+ -+#~ msgid "" -+#~ "Reset the settings for this network, including passwords, but remember it " -+#~ "as a preferred network" -+#~ msgstr "重置这个网络包括密码在内的设置,但仍作为首选连接" -+ -+#~ msgid "" -+#~ "Remove all details relating to this network and do not try to " -+#~ "automatically connect" -+#~ msgstr "删除关于这个网络的所有细节,不再尝试自动连接" -+ -+#~ msgid "Net­work" -+#~ msgstr "网络" -+ -+#~ msgid "" -+#~ "If you have a connection to the Internet other than wireless, you can set " -+#~ "up a wireless hotspot to share the connection with others." -+#~ msgstr "" -+#~ "如果有无线网络以外的方式连接互联网,您可以配置无线热点并与他人共享网络连" -+#~ "接。" -+ -+#~ msgid "History" -+#~ msgstr "历史" -+ -+#~ msgid "Proxy" -+#~ msgstr "代理" -+ -+#~ msgid "_Add Profile…" -+#~ msgstr "添加配置(_A)…" -+ -+#~ msgctxt "proxy method" -+#~ msgid "None" -+#~ msgstr "无" -+ -+#~ msgctxt "proxy method" -+#~ msgid "Manual" -+#~ msgstr "手动" -+ -+#~ msgctxt "proxy method" -+#~ msgid "Automatic" -+#~ msgstr "自动" -+ -+#~ msgid "Add Device" -+#~ msgstr "添加设备" -+ -+#~ msgid "Remove Device" -+#~ msgstr "移除设备" -+ -+#~ msgid "VPN Type" -+#~ msgstr "VPN 类型" -+ -+#~ msgid "Group Password" -+#~ msgstr "组密码" -+ -+#~ msgid "_Use as Hotspot…" -+#~ msgstr "用作热点(_U)…" -+ -+#~ msgid "_History" -+#~ msgstr "历史(_H)" -+ -+#~ msgid "invalid EAP-TLS password: missing" -+#~ msgstr "无效的 EAP-TLS 密码:缺失" -+ -+#~ msgid "2" -+#~ msgstr "2" -+ -+#~ msgid "3" -+#~ msgstr "3" -+ -+#~ msgid "4" -+#~ msgstr "4" -+ -+#~ msgctxt "notifications" -+#~ msgid "Notification _Banners" -+#~ msgstr "通知条幅(_B)" -+ -+#~ msgid "No­ti­fi­ca­tions" -+#~ msgstr "通知" -+ -+#~ msgid "Notification _Banners" -+#~ msgstr "通知条幅" -+ -+#~ msgid "Mail" -+#~ msgstr "邮件" -+ -+#~ msgid "Calendar" -+#~ msgstr "日历" -+ -+#~ msgid "Contacts" -+#~ msgstr "联系人" -+ -+#~ msgid "Chat" -+#~ msgstr "聊天" -+ -+#~ msgid "Resources" -+#~ msgstr "资源" -+ -+#~ msgid "Error creating account" -+#~ msgstr "创建帐号出错" -+ -+#~ msgid "Are you sure you want to remove the account?" -+#~ msgstr "确定要移除这个帐号吗?" -+ -+#~ msgid "This will not remove the account on the server." -+#~ msgstr "这不会将该帐号从服务器上移除。" -+ -+#~ msgid "_Remove" -+#~ msgstr "移除(_R)" -+ -+#~ msgid "No online accounts configured" -+#~ msgstr "未设置在线帐号" -+ -+# 统一下翻译 -+#~ msgid "" -+#~ "Adding an account allows your applications to access it for documents, " -+#~ "mail, contacts, calendar, chat and more." -+#~ msgstr "" -+#~ "添加一个帐号以让您的应用访问帐号的文档、邮件、联系人、日历、聊天等。" -+ -+#~ msgid "Po­wer" -+#~ msgstr "电源" -+ -+#~ msgctxt "printer state" -+#~ msgid "Configuring" -+#~ msgstr "正在配置" -+ -+# 以下几个level似乎译为“量”更好 -+#~ msgid "Toner Level" -+#~ msgstr "碳粉量" -+ -+#~ msgid "Supply Level" -+#~ msgstr "耗材量" -+ -+#~ msgctxt "printer state" -+#~ msgid "Installing" -+#~ msgstr "正在安装" -+ -+#~ msgid "%u active" -+#~ msgid_plural "%u active" -+#~ msgstr[0] "%u 项活动任务" -+ -+#~ msgid "Add a New Printer" -+#~ msgstr "添加打印机" -+ -+#~ msgid "Loading options…" -+#~ msgstr "正在载入选项…" -+ -+#~ msgid "Supply" -+#~ msgstr "耗材" -+ -+#~ msgid "_Default printer" -+#~ msgstr "默认打印机(_D)" -+ -+#~ msgid "Jobs" -+#~ msgstr "任务" -+ -+#~ msgid "Show _Jobs" -+#~ msgstr "显示任务(_J)" -+ -+#~ msgid "label" -+#~ msgstr "标签" -+ -+#~ msgid "Setting new driver…" -+#~ msgstr "正在设置新驱动…" -+ -+#~ msgid "Print _Test Page" -+#~ msgstr "打印测试页(_T)" -+ -+#~ msgid "Pri­va­cy" -+#~ msgstr "隐私" -+ -+#~ msgid "Sha­ring" -+#~ msgstr "共享" -+ -+#~ msgid "Uni­ver­sal Access" -+#~ msgstr "通用辅助功能" -+ -+#~ msgctxt "Password hint" -+#~ msgid "Try to add more letters, numbers and symbols." -+#~ msgstr "请使用更多字母、数字和符号。" -+ -+#~ msgctxt "Password strength" -+#~ msgid "Strength: Weak" -+#~ msgstr "强度:较弱" -+ -+#~ msgctxt "Password strength" -+#~ msgid "Strength: Low" -+#~ msgstr "强度:较低" -+ -+#~ msgctxt "Password strength" -+#~ msgid "Strength: Medium" -+#~ msgstr "强度:中等" -+ -+#~ msgctxt "Password strength" -+#~ msgid "Strength: Good" -+#~ msgstr "强度:良好" -+ -+#~ msgctxt "Password strength" -+#~ msgid "Strength: High" -+#~ msgstr "强度:较高" -+ -+#~ msgctxt "login history week label" -+#~ msgid "%s - %s" -+#~ msgstr "%s - %s" -+ -+#~ msgid "Disable image" -+#~ msgstr "禁用图像" -+ -+#~ msgid "Browse for more pictures…" -+#~ msgstr "浏览更多图片…" -+ -+#~ msgid "Used by %s" -+#~ msgstr "已被 %s 使用" -+ -+#~ msgid "Other Accounts" -+#~ msgstr "其他帐号" -+ -+#~ msgctxt "Wacom tablet button" -+#~ msgid "Up" -+#~ msgstr "上键" -+ -+#~ msgctxt "Wacom tablet button" -+#~ msgid "Down" -+#~ msgstr "下键" -+ -+#~ msgctxt "Wacom action-type" -+#~ msgid "None" -+#~ msgstr "无" -+ -+#~ msgid "Wa­com Tab­let" -+#~ msgstr "Wacom 手写板" -+ -+#~ msgid "Left Ring" -+#~ msgstr "左环模式" -+ -+#~ msgid "Left Ring Mode #%d" -+#~ msgstr "左环模式 #%d" -+ -+#~ msgid "Right Ring Mode #%d" -+#~ msgstr "右环模式 #%d" -+ -+# Touchstrip和touchring都是商标。 -+#~ msgid "Left Touchstrip" -+#~ msgstr "左 Touchstrip 模式" -+ -+# Touchstrip和touchring都是商标。 -+#~ msgid "Left Touchstrip Mode #%d" -+#~ msgstr "左 Touchstrip 模式 #%d" -+ -+#~ msgid "Right Touchstrip" -+#~ msgstr "右 Touchstrip" -+ -+#~ msgid "Right Touchstrip Mode #%d" -+#~ msgstr "右 Touchstrip 模式 #%d" -+ -+#~ msgid "Left Touchring Mode Switch" -+#~ msgstr "左 Touchring 模式切换" -+ -+#~ msgid "Right Touchring Mode Switch" -+#~ msgstr "右 Touchring 模式切换" -+ -+#~ msgid "Left Touchstrip Mode Switch" -+#~ msgstr "左 Touchstrip 模式切换" -+ -+#~ msgid "Right Touchstrip Mode Switch" -+#~ msgstr "右 Touchstrip 模式切换" -+ -+#~ msgid "Mode Switch #%d" -+#~ msgstr "模式切换 #%d" -+ -+#~ msgid "Left Button #%d" -+#~ msgstr "左键 #%d" -+ -+#~ msgid "Right Button #%d" -+#~ msgstr "右键 #%d" -+ -+#~ msgid "Top Button #%d" -+#~ msgstr "上键 #%d" -+ -+#~ msgid "Bottom Button #%d" -+#~ msgstr "底键 #%d" -+ -+#~ msgid "No Action" -+#~ msgstr "无动作" -+ -+#~ msgid "Left Mouse Button Click" -+#~ msgstr "鼠标左键单击" -+ -+#~ msgid "Scroll Up" -+#~ msgstr "向上滚动" -+ -+#~ msgid "Scroll Down" -+#~ msgstr "向下滚动" -+ -+#~ msgid "Scroll Left" -+#~ msgstr "向左滚动" -+ -+#~ msgid "Scroll Right" -+#~ msgstr "向右滚动" -+ -+#~ msgctxt "category" -+#~ msgid "Personal" -+#~ msgstr "个人" -+ -+#~ msgctxt "category" -+#~ msgid "Hardware" -+#~ msgstr "硬件" -+ -+#~ msgctxt "category" -+#~ msgid "System" -+#~ msgstr "系统" - - #~ msgid "Wayland" - #~ msgstr "Wayland" -@@ -7285,12 +7997,6 @@ msgstr "无可用区域" - #~ msgid "Set Shortcut" - #~ msgstr "设置快捷键" - --#~ msgid "_Unlock" --#~ msgstr "解锁(_U)" -- --#~ msgid "Color" --#~ msgstr "色彩" -- - #~ msgid "_Name:" - #~ msgstr "名称(_N):" - -@@ -7419,12 +8125,6 @@ msgstr "无可用区域" - #~ msgid "_Sign In" - #~ msgstr "登录(_S)" - --#~ msgid "Power" --#~ msgstr "电源" -- --#~ msgid "Privacy" --#~ msgstr "隐私" -- - #~ msgctxt "Search Location" - #~ msgid "Other" - #~ msgstr "其他" -@@ -7444,12 +8144,6 @@ msgstr "无可用区域" - #~ msgid "Add User Account" - #~ msgstr "添加用户帐号" - --#~ msgid "Remove User Account" --#~ msgstr "移除用户帐号" -- --#~ msgid "Login Options" --#~ msgstr "登录选项" -- - #~ msgid "A user with the username '%s' already exists." - #~ msgstr "用户“%s”已存在。" - -@@ -7459,9 +8153,6 @@ msgstr "无可用区域" - #~ msgid "Time _Zone" - #~ msgstr "时区(_Z)" - --#~ msgid "Active Jobs" --#~ msgstr "活动的任务" -- - #~ msgid "Close" - #~ msgstr "关闭" - -@@ -7471,9 +8162,6 @@ msgstr "无可用区域" - #~ msgid "Pause Printing" - #~ msgstr "暂停打印" - --#~ msgid "Cancel Print Job" --#~ msgstr "取消打印任务" -- - #~ msgctxt "print job" - #~ msgid "Held" - #~ msgstr "挂起" -@@ -7589,9 +8277,6 @@ msgstr "无可用区域" - #~ msgid "When battery power is _critical" - #~ msgstr "电量严重不足时(_C)" - --#~ msgid "Power Off" --#~ msgstr "电源关闭" -- - #~ msgid "Power off" - #~ msgstr "电源关闭" - -@@ -7612,9 +8297,3 @@ msgstr "无可用区域" - #~ msgid "- Settings" - #~ msgstr "- 设置" - --#~ msgid "" --#~ "%s\n" --#~ "Run '%s --help' to see a full list of available command line options.\n" --#~ msgstr "" --#~ "%s\n" --#~ "运行 %s --help 查看所有可用的命令行选项。\n" --- -2.31.1 - diff --git a/application-use-icon-name-that-exists.patch b/application-use-icon-name-that-exists.patch new file mode 100644 index 0000000..cd44190 --- /dev/null +++ b/application-use-icon-name-that-exists.patch @@ -0,0 +1,42 @@ +From 0e2562c2c5ff081561424c625b090f089ef45fe7 Mon Sep 17 00:00:00 2001 +From: Felipe Borges +Date: Fri, 14 Jan 2022 13:28:24 +0100 +Subject: [PATCH] applications: Set the Icon key in desktop file to a icon that + exists + +While we dynamically append --symbolic to the icons while creating +the sidebar model in +https://gitlab.gnome.org/GNOME/gnome-control-center/-/blob/master/shell/cc-shell-model.c#L270 +There are automation tools (such as rpmdiff) that parse desktop files +and verify whether their Icon= matches to an existing file in the +icon theme package. + +preferences-desktop-apps doesn't exist in adwaita-icon-theme but +preferences-desktop-apps-symbolic does. +--- + panels/applications/gnome-applications-panel.desktop.in.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/panels/applications/gnome-applications-panel.desktop.in.in b/panels/applications/gnome-applications-panel.desktop.in.in +index 86e816645..83616c89e 100644 +--- a/panels/applications/gnome-applications-panel.desktop.in.in ++++ b/panels/applications/gnome-applications-panel.desktop.in.in +@@ -4,7 +4,7 @@ Comment=Control various application permissions and settings + Exec=gnome-control-center applications + # FIXME + # Translators: Do NOT translate or transliterate this text (this is an icon file name)! +-Icon=preferences-desktop-apps ++Icon=preferences-desktop-apps-symbolic + Terminal=false + Type=Application + NoDisplay=true +@@ -13,4 +13,4 @@ Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel;X-GNOME-Acc + OnlyShowIn=GNOME;Unity; + # Translators: Search terms to find the Privacy panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! + Keywords=application;flatpak;permission;setting; +-X-GNOME-ControlCenter-HasSidebar=true +\ No newline at end of file ++X-GNOME-ControlCenter-HasSidebar=true +-- +2.33.1 + diff --git a/backport-multitasking-panel.patch b/backport-multitasking-panel.patch new file mode 100644 index 0000000..0ff42a3 --- /dev/null +++ b/backport-multitasking-panel.patch @@ -0,0 +1,15005 @@ +From 6162b67495cb83bf729a711357c1a6b23346544e Mon Sep 17 00:00:00 2001 +From: Georges Basile Stavracas Neto +Date: Sun, 29 Mar 2020 21:13:35 -0300 +Subject: [PATCH 01/10] Introduce the Multitasking panel + +The Multitasking panel brings some additional settings +from Tweaks that are relevant to the general platform. + +Related: https://gitlab.gnome.org/GNOME/gnome-control-center/issues/558 +--- + gnome-control-center.doap | 2 +- + panels/meson.build | 1 + + .../assets/active-screen-edges.svg | 118 +++ + panels/multitasking/assets/hot-corner.svg | 124 ++++ + .../assets/workspaces-primary-display.svg | 130 ++++ + .../assets/workspaces-span-displays.svg | 178 +++++ + panels/multitasking/cc-multitasking-panel.c | 150 ++++ + panels/multitasking/cc-multitasking-panel.h | 30 + + panels/multitasking/cc-multitasking-panel.ui | 357 +++++++++ + panels/multitasking/cc-multitasking-row.c | 684 ++++++++++++++++++ + panels/multitasking/cc-multitasking-row.h | 63 ++ + panels/multitasking/cc-multitasking-row.ui | 122 ++++ + .../gnome-multitasking-panel.desktop.in.in | 14 + + panels/multitasking/icons/meson.build | 4 + + ...g.gnome.Settings-multitasking-symbolic.svg | 106 +++ + panels/multitasking/meson.build | 49 ++ + .../multitasking/multitasking.gresource.xml | 13 + + shell/cc-panel-list.c | 1 + + shell/cc-panel-loader.c | 2 + + shell/gnome-control-center.gresource.xml | 6 + + shell/icons/multitasking-symbolic.svg | 98 +++ + 21 files changed, 2251 insertions(+), 1 deletion(-) + create mode 100644 panels/multitasking/assets/active-screen-edges.svg + create mode 100644 panels/multitasking/assets/hot-corner.svg + create mode 100644 panels/multitasking/assets/workspaces-primary-display.svg + create mode 100644 panels/multitasking/assets/workspaces-span-displays.svg + create mode 100644 panels/multitasking/cc-multitasking-panel.c + create mode 100644 panels/multitasking/cc-multitasking-panel.h + create mode 100644 panels/multitasking/cc-multitasking-panel.ui + create mode 100644 panels/multitasking/cc-multitasking-row.c + create mode 100644 panels/multitasking/cc-multitasking-row.h + create mode 100644 panels/multitasking/cc-multitasking-row.ui + create mode 100644 panels/multitasking/gnome-multitasking-panel.desktop.in.in + create mode 100644 panels/multitasking/icons/meson.build + create mode 100644 panels/multitasking/icons/scalable/org.gnome.Settings-multitasking-symbolic.svg + create mode 100644 panels/multitasking/meson.build + create mode 100644 panels/multitasking/multitasking.gresource.xml + create mode 100644 shell/icons/multitasking-symbolic.svg + +diff --git a/gnome-control-center.doap b/gnome-control-center.doap +index 600fd66c8..7986d9150 100644 +--- a/gnome-control-center.doap ++++ b/gnome-control-center.doap +@@ -13,7 +13,7 @@ + + C + +- ++ + + + Georges Basile Stavracas Neto +diff --git a/panels/meson.build b/panels/meson.build +index 2f4fdc5e3..1318904ae 100644 +--- a/panels/meson.build ++++ b/panels/meson.build +@@ -15,6 +15,7 @@ panels = [ + 'lock', + 'microphone', + 'mouse', ++ 'multitasking', + 'notifications', + 'online-accounts', + 'power', +diff --git a/panels/multitasking/assets/active-screen-edges.svg b/panels/multitasking/assets/active-screen-edges.svg +new file mode 100644 +index 000000000..34dc67b4e +--- /dev/null ++++ b/panels/multitasking/assets/active-screen-edges.svg +@@ -0,0 +1,118 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/panels/multitasking/assets/hot-corner.svg b/panels/multitasking/assets/hot-corner.svg +new file mode 100644 +index 000000000..0a1732c0e +--- /dev/null ++++ b/panels/multitasking/assets/hot-corner.svg +@@ -0,0 +1,124 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/panels/multitasking/assets/workspaces-primary-display.svg b/panels/multitasking/assets/workspaces-primary-display.svg +new file mode 100644 +index 000000000..56e05c4bb +--- /dev/null ++++ b/panels/multitasking/assets/workspaces-primary-display.svg +@@ -0,0 +1,130 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/panels/multitasking/assets/workspaces-span-displays.svg b/panels/multitasking/assets/workspaces-span-displays.svg +new file mode 100644 +index 000000000..7b3655df9 +--- /dev/null ++++ b/panels/multitasking/assets/workspaces-span-displays.svg +@@ -0,0 +1,178 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/panels/multitasking/cc-multitasking-panel.c b/panels/multitasking/cc-multitasking-panel.c +new file mode 100644 +index 000000000..6a3177fe9 +--- /dev/null ++++ b/panels/multitasking/cc-multitasking-panel.c +@@ -0,0 +1,150 @@ ++/* cc-multitasking-panel.h ++ * ++ * Copyright 2020 Georges Basile Stavracas Neto ++ * ++ * 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, see . ++ * ++ * SPDX-License-Identifier: GPL-2.0-or-later ++ */ ++ ++ ++#include "cc-multitasking-panel.h" ++ ++#include "cc-multitasking-resources.h" ++#include "cc-multitasking-row.h" ++#include "list-box-helper.h" ++ ++struct _CcMultitaskingPanel ++{ ++ CcPanel parent_instance; ++ ++ GSettings *interface_settings; ++ GSettings *mutter_settings; ++ GSettings *overrides_settings; ++ GSettings *shell_settings; ++ GSettings *wm_settings; ++ ++ GtkSwitch *active_screen_edges_switch; ++ GtkToggleButton *current_workspace_radio; ++ GtkToggleButton *dynamic_workspaces_radio; ++ GtkToggleButton *fixed_workspaces_radio; ++ GtkSwitch *hot_corner_switch; ++ GtkSpinButton *number_of_workspaces_spin; ++ GtkToggleButton *workspaces_primary_display_radio; ++ GtkToggleButton *workspaces_span_displays_radio; ++}; ++ ++CC_PANEL_REGISTER (CcMultitaskingPanel, cc_multitasking_panel) ++ ++/* GObject overrides */ ++ ++static void ++cc_multitasking_panel_finalize (GObject *object) ++{ ++ CcMultitaskingPanel *self = (CcMultitaskingPanel *)object; ++ ++ g_clear_object (&self->interface_settings); ++ g_clear_object (&self->mutter_settings); ++ g_clear_object (&self->overrides_settings); ++ g_clear_object (&self->shell_settings); ++ g_clear_object (&self->wm_settings); ++ ++ G_OBJECT_CLASS (cc_multitasking_panel_parent_class)->finalize (object); ++} ++ ++static void ++cc_multitasking_panel_class_init (CcMultitaskingPanelClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ ++ g_type_ensure (CC_TYPE_MULTITASKING_ROW); ++ ++ object_class->finalize = cc_multitasking_panel_finalize; ++ ++ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/multitasking/cc-multitasking-panel.ui"); ++ ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, active_screen_edges_switch); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, current_workspace_radio); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, dynamic_workspaces_radio); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, fixed_workspaces_radio); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, hot_corner_switch); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, number_of_workspaces_spin); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, workspaces_primary_display_radio); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, workspaces_span_displays_radio); ++} ++ ++static void ++cc_multitasking_panel_init (CcMultitaskingPanel *self) ++{ ++ g_resources_register (cc_multitasking_get_resource ()); ++ ++ gtk_widget_init_template (GTK_WIDGET (self)); ++ ++ self->interface_settings = g_settings_new ("org.gnome.desktop.interface"); ++ g_settings_bind (self->interface_settings, ++ "enable-hot-corners", ++ self->hot_corner_switch, ++ "active", ++ G_SETTINGS_BIND_DEFAULT); ++ ++ self->mutter_settings = g_settings_new ("org.gnome.mutter"); ++ ++ if (g_settings_get_boolean (self->mutter_settings, "workspaces-only-on-primary")) ++ gtk_toggle_button_set_active (self->workspaces_primary_display_radio, TRUE); ++ else ++ gtk_toggle_button_set_active (self->workspaces_span_displays_radio, TRUE); ++ ++ g_settings_bind (self->mutter_settings, ++ "workspaces-only-on-primary", ++ self->workspaces_primary_display_radio, ++ "active", ++ G_SETTINGS_BIND_DEFAULT); ++ g_settings_bind (self->mutter_settings, ++ "edge-tiling", ++ self->active_screen_edges_switch, ++ "active", ++ G_SETTINGS_BIND_DEFAULT); ++ ++ self->overrides_settings = g_settings_new ("org.gnome.shell.overrides"); ++ ++ if (g_settings_get_boolean (self->overrides_settings, "dynamic-workspaces")) ++ gtk_toggle_button_set_active (self->dynamic_workspaces_radio, TRUE); ++ else ++ gtk_toggle_button_set_active (self->fixed_workspaces_radio, TRUE); ++ ++ g_settings_bind (self->overrides_settings, ++ "dynamic-workspaces", ++ self->dynamic_workspaces_radio, ++ "active", ++ G_SETTINGS_BIND_DEFAULT); ++ ++ self->wm_settings = g_settings_new ("org.gnome.desktop.wm.preferences"); ++ g_settings_bind (self->wm_settings, ++ "num-workspaces", ++ self->number_of_workspaces_spin, ++ "value", ++ G_SETTINGS_BIND_DEFAULT); ++ ++ self->shell_settings = g_settings_new ("org.gnome.shell.app-switcher"); ++ ++ if (g_settings_get_boolean (self->shell_settings, "current-workspace-only")) ++ gtk_toggle_button_set_active (self->current_workspace_radio, TRUE); ++ ++ g_settings_bind (self->shell_settings, ++ "current-workspace-only", ++ self->current_workspace_radio, ++ "active", ++ G_SETTINGS_BIND_DEFAULT); ++} +diff --git a/panels/multitasking/cc-multitasking-panel.h b/panels/multitasking/cc-multitasking-panel.h +new file mode 100644 +index 000000000..81e78f071 +--- /dev/null ++++ b/panels/multitasking/cc-multitasking-panel.h +@@ -0,0 +1,30 @@ ++/* cc-multitasking-panel.h ++ * ++ * Copyright 2020 Georges Basile Stavracas Neto ++ * ++ * 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, see . ++ * ++ * SPDX-License-Identifier: GPL-2.0-or-later ++ */ ++ ++#pragma once ++ ++#include ++ ++G_BEGIN_DECLS ++ ++#define CC_TYPE_MULTITASKING_PANEL (cc_multitasking_panel_get_type()) ++G_DECLARE_FINAL_TYPE (CcMultitaskingPanel, cc_multitasking_panel, CC, MULTITASKING_PANEL, CcPanel) ++ ++G_END_DECLS +diff --git a/panels/multitasking/cc-multitasking-panel.ui b/panels/multitasking/cc-multitasking-panel.ui +new file mode 100644 +index 000000000..5b5725038 +--- /dev/null ++++ b/panels/multitasking/cc-multitasking-panel.ui +@@ -0,0 +1,357 @@ ++ ++ ++ ++ ++ ++ 1.0 ++ 1.0 ++ 4.0 ++ ++ 36.0 ++ ++ +diff --git a/panels/multitasking/cc-multitasking-row.c b/panels/multitasking/cc-multitasking-row.c +new file mode 100644 +index 000000000..608e4c48f +--- /dev/null ++++ b/panels/multitasking/cc-multitasking-row.c +@@ -0,0 +1,684 @@ ++/* cc-multitasking-row.c ++ * ++ * Copyright 2018 Purism SPC ++ * 2021 Georges Basile Stavracas Neto ++ * ++ * 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 3 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, see . ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#include "cc-multitasking-row.h" ++ ++struct _CcMultitaskingRow ++{ ++ HdyPreferencesRow parent; ++ ++ GtkBox *artwork_box; ++ GtkBox *header; ++ GtkImage *image; ++ GtkBox *prefixes; ++ GtkLabel *subtitle; ++ GtkBox *suffixes; ++ GtkLabel *title; ++ GtkBox *title_box; ++ ++ GtkWidget *previous_parent; ++ ++ gboolean use_underline; ++ gint title_lines; ++ gint subtitle_lines; ++ GtkWidget *activatable_widget; ++}; ++ ++static void cc_multitasking_row_buildable_init (GtkBuildableIface *iface); ++ ++G_DEFINE_TYPE_WITH_CODE (CcMultitaskingRow, cc_multitasking_row, HDY_TYPE_PREFERENCES_ROW, ++ G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, cc_multitasking_row_buildable_init)) ++ ++enum ++{ ++ PROP_0, ++ PROP_ICON_NAME, ++ PROP_ACTIVATABLE_WIDGET, ++ PROP_SUBTITLE, ++ PROP_USE_UNDERLINE, ++ PROP_TITLE_LINES, ++ PROP_SUBTITLE_LINES, ++ N_PROPS, ++}; ++ ++enum ++{ ++ SIGNAL_ACTIVATED, ++ SIGNAL_LAST_SIGNAL, ++}; ++ ++static GParamSpec *props[N_PROPS] = { NULL, }; ++static guint signals[SIGNAL_LAST_SIGNAL] = { 0, }; ++ ++static void ++row_activated_cb (CcMultitaskingRow *self, ++ GtkListBoxRow *row) ++{ ++ /* No need to use GTK_LIST_BOX_ROW() for a pointer comparison. */ ++ if ((GtkListBoxRow *) self == row) ++ cc_multitasking_row_activate (self); ++} ++ ++static void ++parent_cb (CcMultitaskingRow *self) ++{ ++ GtkWidget *parent = gtk_widget_get_parent (GTK_WIDGET (self)); ++ ++ if (self->previous_parent != NULL) ++ { ++ g_signal_handlers_disconnect_by_func (self->previous_parent, ++ G_CALLBACK (row_activated_cb), ++ self); ++ self->previous_parent = NULL; ++ } ++ ++ if (parent == NULL || !GTK_IS_LIST_BOX (parent)) ++ return; ++ ++ self->previous_parent = parent; ++ g_signal_connect_swapped (parent, "row-activated", G_CALLBACK (row_activated_cb), self); ++} ++ ++static void ++update_subtitle_visibility (CcMultitaskingRow *self) ++{ ++ gtk_widget_set_visible (GTK_WIDGET (self->subtitle), ++ gtk_label_get_text (self->subtitle) != NULL && ++ g_strcmp0 (gtk_label_get_text (self->subtitle), "") != 0); ++} ++ ++static void ++cc_multitasking_row_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ CcMultitaskingRow *self = CC_MULTITASKING_ROW (object); ++ ++ switch (prop_id) ++ { ++ case PROP_ICON_NAME: ++ g_value_set_string (value, cc_multitasking_row_get_icon_name (self)); ++ break; ++ case PROP_ACTIVATABLE_WIDGET: ++ g_value_set_object (value, (GObject *) cc_multitasking_row_get_activatable_widget (self)); ++ break; ++ case PROP_SUBTITLE: ++ g_value_set_string (value, cc_multitasking_row_get_subtitle (self)); ++ break; ++ case PROP_SUBTITLE_LINES: ++ g_value_set_int (value, cc_multitasking_row_get_subtitle_lines (self)); ++ break; ++ case PROP_TITLE_LINES: ++ g_value_set_int (value, cc_multitasking_row_get_title_lines (self)); ++ break; ++ case PROP_USE_UNDERLINE: ++ g_value_set_boolean (value, cc_multitasking_row_get_use_underline (self)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++cc_multitasking_row_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ CcMultitaskingRow *self = CC_MULTITASKING_ROW (object); ++ ++ switch (prop_id) ++ { ++ case PROP_ICON_NAME: ++ cc_multitasking_row_set_icon_name (self, g_value_get_string (value)); ++ break; ++ case PROP_ACTIVATABLE_WIDGET: ++ cc_multitasking_row_set_activatable_widget (self, (GtkWidget*) g_value_get_object (value)); ++ break; ++ case PROP_SUBTITLE: ++ cc_multitasking_row_set_subtitle (self, g_value_get_string (value)); ++ break; ++ case PROP_SUBTITLE_LINES: ++ cc_multitasking_row_set_subtitle_lines (self, g_value_get_int (value)); ++ break; ++ case PROP_TITLE_LINES: ++ cc_multitasking_row_set_title_lines (self, g_value_get_int (value)); ++ break; ++ case PROP_USE_UNDERLINE: ++ cc_multitasking_row_set_use_underline (self, g_value_get_boolean (value)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++cc_multitasking_row_dispose (GObject *object) ++{ ++ CcMultitaskingRow *self = CC_MULTITASKING_ROW (object); ++ ++ if (self->previous_parent != NULL) { ++ g_signal_handlers_disconnect_by_func (self->previous_parent, G_CALLBACK (row_activated_cb), self); ++ self->previous_parent = NULL; ++ } ++ ++ G_OBJECT_CLASS (cc_multitasking_row_parent_class)->dispose (object); ++} ++ ++static void ++cc_multitasking_row_show_all (GtkWidget *widget) ++{ ++ CcMultitaskingRow *self = CC_MULTITASKING_ROW (widget); ++ ++ g_return_if_fail (CC_IS_MULTITASKING_ROW (self)); ++ ++ gtk_container_foreach (GTK_CONTAINER (self->prefixes), ++ (GtkCallback) gtk_widget_show_all, ++ NULL); ++ ++ gtk_container_foreach (GTK_CONTAINER (self->suffixes), ++ (GtkCallback) gtk_widget_show_all, ++ NULL); ++ ++ GTK_WIDGET_CLASS (cc_multitasking_row_parent_class)->show_all (widget); ++} ++ ++static void ++cc_multitasking_row_destroy (GtkWidget *widget) ++{ ++ CcMultitaskingRow *self = CC_MULTITASKING_ROW (widget); ++ ++ if (self->header) ++ { ++ gtk_widget_destroy (GTK_WIDGET (self->header)); ++ self->header = NULL; ++ } ++ ++ cc_multitasking_row_set_activatable_widget (self, NULL); ++ ++ self->prefixes = NULL; ++ self->suffixes = NULL; ++ ++ GTK_WIDGET_CLASS (cc_multitasking_row_parent_class)->destroy (widget); ++} ++ ++static void ++cc_multitasking_row_add (GtkContainer *container, ++ GtkWidget *child) ++{ ++ CcMultitaskingRow *self = CC_MULTITASKING_ROW (container); ++ ++ /* When constructing the widget, we want the box to be added as the child of ++ * the GtkListBoxRow, as an implementation detail. ++ */ ++ if (!self->header) ++ { ++ GTK_CONTAINER_CLASS (cc_multitasking_row_parent_class)->add (container, child); ++ } ++ else ++ { ++ gtk_container_add (GTK_CONTAINER (self->suffixes), child); ++ gtk_widget_show (GTK_WIDGET (self->suffixes)); ++ } ++} ++ ++static void ++cc_multitasking_row_remove (GtkContainer *container, ++ GtkWidget *child) ++{ ++ CcMultitaskingRow *self = CC_MULTITASKING_ROW (container); ++ ++ if (child == GTK_WIDGET (self->header)) ++ GTK_CONTAINER_CLASS (cc_multitasking_row_parent_class)->remove (container, child); ++ else if (gtk_widget_get_parent (child) == GTK_WIDGET (self->prefixes)) ++ gtk_container_remove (GTK_CONTAINER (self->prefixes), child); ++ else ++ gtk_container_remove (GTK_CONTAINER (self->suffixes), child); ++} ++ ++typedef struct { ++ CcMultitaskingRow *row; ++ GtkCallback callback; ++ gpointer callback_data; ++} ForallData; ++ ++static void ++for_non_internal_child (GtkWidget *widget, ++ gpointer callback_data) ++{ ++ ForallData *data = callback_data; ++ CcMultitaskingRow *self = data->row; ++ ++ if (widget != (GtkWidget *) self->image && ++ widget != (GtkWidget *) self->prefixes && ++ widget != (GtkWidget *) self->suffixes && ++ widget != (GtkWidget *) self->title_box) ++ { ++ data->callback (widget, data->callback_data); ++ } ++} ++ ++static void ++cc_multitasking_row_forall (GtkContainer *container, ++ gboolean include_internals, ++ GtkCallback callback, ++ gpointer callback_data) ++{ ++ CcMultitaskingRow *self = CC_MULTITASKING_ROW (container); ++ ForallData data; ++ ++ if (include_internals) ++ { ++ GTK_CONTAINER_CLASS (cc_multitasking_row_parent_class)->forall (GTK_CONTAINER (self), ++ include_internals, ++ callback, ++ callback_data); ++ return; ++ } ++ ++ data.row = self; ++ data.callback = callback; ++ data.callback_data = callback_data; ++ ++ if (self->prefixes) ++ { ++ GTK_CONTAINER_GET_CLASS (self->prefixes)->forall (GTK_CONTAINER (self->prefixes), ++ include_internals, ++ for_non_internal_child, ++ &data); ++ } ++ if (self->suffixes) ++ { ++ GTK_CONTAINER_GET_CLASS (self->suffixes)->forall (GTK_CONTAINER (self->suffixes), ++ include_internals, ++ for_non_internal_child, ++ &data); ++ } ++ if (self->header) ++ { ++ GTK_CONTAINER_GET_CLASS (self->header)->forall (GTK_CONTAINER (self->header), ++ include_internals, ++ for_non_internal_child, ++ &data); ++ } ++} ++ ++static void ++cc_multitasking_row_class_init (CcMultitaskingRowClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass); ++ ++ object_class->get_property = cc_multitasking_row_get_property; ++ object_class->set_property = cc_multitasking_row_set_property; ++ object_class->dispose = cc_multitasking_row_dispose; ++ ++ widget_class->destroy = cc_multitasking_row_destroy; ++ widget_class->show_all = cc_multitasking_row_show_all; ++ ++ container_class->add = cc_multitasking_row_add; ++ container_class->remove = cc_multitasking_row_remove; ++ container_class->forall = cc_multitasking_row_forall; ++ ++ props[PROP_ICON_NAME] = ++ g_param_spec_string ("icon-name", ++ "Icon name", ++ "Icon name", ++ "", ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); ++ ++ props[PROP_ACTIVATABLE_WIDGET] = ++ g_param_spec_object ("activatable-widget", ++ "Activatable widget", ++ "The widget to be activated when the row is activated", ++ GTK_TYPE_WIDGET, ++ G_PARAM_READWRITE); ++ ++ props[PROP_SUBTITLE] = ++ g_param_spec_string ("subtitle", ++ "Subtitle", ++ "Subtitle", ++ "", ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); ++ ++ props[PROP_USE_UNDERLINE] = ++ g_param_spec_boolean ("use-underline", ++ "Use underline", ++ "If set, an underline in the text indicates the next character should be used for the mnemonic accelerator key", ++ FALSE, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ props[PROP_TITLE_LINES] = ++ g_param_spec_int ("title-lines", ++ "Number of title lines", ++ "The desired number of title lines", ++ 0, G_MAXINT, ++ 1, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ props[PROP_SUBTITLE_LINES] = ++ g_param_spec_int ("subtitle-lines", ++ "Number of subtitle lines", ++ "The desired number of subtitle lines", ++ 0, G_MAXINT, ++ 1, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ g_object_class_install_properties (object_class, N_PROPS, props); ++ ++ signals[SIGNAL_ACTIVATED] = ++ g_signal_new ("activated", ++ G_TYPE_FROM_CLASS (klass), ++ G_SIGNAL_RUN_LAST, ++ 0, ++ NULL, NULL, NULL, ++ G_TYPE_NONE, ++ 0); ++ ++ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/multitasking/cc-multitasking-row.ui"); ++ ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingRow, artwork_box); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingRow, header); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingRow, image); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingRow, prefixes); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingRow, subtitle); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingRow, suffixes); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingRow, title); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingRow, title_box); ++} ++ ++static gboolean ++string_is_not_empty (GBinding *binding, ++ const GValue *from_value, ++ GValue *to_value, ++ gpointer user_data) ++{ ++ const gchar *string = g_value_get_string (from_value); ++ ++ g_value_set_boolean (to_value, string != NULL && g_strcmp0 (string, "") != 0); ++ ++ return TRUE; ++} ++ ++static void ++cc_multitasking_row_init (CcMultitaskingRow *self) ++{ ++ self->title_lines = 1; ++ self->subtitle_lines = 1; ++ ++ gtk_widget_init_template (GTK_WIDGET (self)); ++ ++ g_object_bind_property_full (self, "title", ++ self->title, "visible", ++ G_BINDING_SYNC_CREATE, ++ string_is_not_empty, ++ NULL, NULL, NULL); ++ ++ update_subtitle_visibility (self); ++ ++ g_signal_connect (self, "notify::parent", G_CALLBACK (parent_cb), NULL); ++} ++ ++static void ++cc_multitasking_row_buildable_add_child (GtkBuildable *buildable, ++ GtkBuilder *builder, ++ GObject *child, ++ const gchar *type) ++{ ++ CcMultitaskingRow *self = CC_MULTITASKING_ROW (buildable); ++ ++ if (self->header == NULL || !type) ++ gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (child)); ++ else if (type && strcmp (type, "prefix") == 0) ++ cc_multitasking_row_add_prefix (self, GTK_WIDGET (child)); ++ else if (type && strcmp (type, "artwork") == 0) ++ cc_multitasking_row_add_artwork(self, GTK_WIDGET (child)); ++ else ++ GTK_BUILDER_WARN_INVALID_CHILD_TYPE (self, type); ++} ++ ++static void ++cc_multitasking_row_buildable_init (GtkBuildableIface *iface) ++{ ++ iface->add_child = cc_multitasking_row_buildable_add_child; ++} ++ ++const gchar * ++cc_multitasking_row_get_subtitle (CcMultitaskingRow *self) ++{ ++ g_return_val_if_fail (CC_IS_MULTITASKING_ROW (self), NULL); ++ ++ return gtk_label_get_text (self->subtitle); ++} ++ ++void ++cc_multitasking_row_set_subtitle (CcMultitaskingRow *self, ++ const gchar *subtitle) ++{ ++ g_return_if_fail (CC_IS_MULTITASKING_ROW (self)); ++ ++ if (g_strcmp0 (gtk_label_get_text (self->subtitle), subtitle) == 0) ++ return; ++ ++ gtk_label_set_text (self->subtitle, subtitle); ++ gtk_widget_set_visible (GTK_WIDGET (self->subtitle), ++ subtitle != NULL && g_strcmp0 (subtitle, "") != 0); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SUBTITLE]); ++} ++ ++const gchar * ++cc_multitasking_row_get_icon_name (CcMultitaskingRow *self) ++{ ++ const gchar *icon_name; ++ ++ g_return_val_if_fail (CC_IS_MULTITASKING_ROW (self), NULL); ++ ++ gtk_image_get_icon_name (self->image, &icon_name, NULL); ++ ++ return icon_name; ++} ++ ++void ++cc_multitasking_row_set_icon_name (CcMultitaskingRow *self, ++ const gchar *icon_name) ++{ ++ const gchar *old_icon_name; ++ ++ g_return_if_fail (CC_IS_MULTITASKING_ROW (self)); ++ ++ gtk_image_get_icon_name (self->image, &old_icon_name, NULL); ++ if (g_strcmp0 (old_icon_name, icon_name) == 0) ++ return; ++ ++ gtk_image_set_from_icon_name (self->image, icon_name, GTK_ICON_SIZE_INVALID); ++ gtk_widget_set_visible (GTK_WIDGET (self->image), ++ icon_name != NULL && g_strcmp0 (icon_name, "") != 0); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ICON_NAME]); ++} ++ ++GtkWidget * ++cc_multitasking_row_get_activatable_widget (CcMultitaskingRow *self) ++{ ++ g_return_val_if_fail (CC_IS_MULTITASKING_ROW (self), NULL); ++ ++ return self->activatable_widget; ++} ++ ++static void ++activatable_widget_weak_notify (gpointer data, ++ GObject *where_the_object_was) ++{ ++ CcMultitaskingRow *self = CC_MULTITASKING_ROW (data); ++ ++ self->activatable_widget = NULL; ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ACTIVATABLE_WIDGET]); ++} ++ ++void ++cc_multitasking_row_set_activatable_widget (CcMultitaskingRow *self, ++ GtkWidget *widget) ++{ ++ g_return_if_fail (CC_IS_MULTITASKING_ROW (self)); ++ g_return_if_fail (widget == NULL || GTK_IS_WIDGET (widget)); ++ ++ if (self->activatable_widget == widget) ++ return; ++ ++ if (self->activatable_widget) ++ g_object_weak_unref (G_OBJECT (self->activatable_widget), ++ activatable_widget_weak_notify, ++ self); ++ ++ self->activatable_widget = widget; ++ ++ if (self->activatable_widget != NULL) { ++ g_object_weak_ref (G_OBJECT (self->activatable_widget), ++ activatable_widget_weak_notify, ++ self); ++ gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (self), TRUE); ++ } ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ACTIVATABLE_WIDGET]); ++} ++ ++gboolean ++cc_multitasking_row_get_use_underline (CcMultitaskingRow *self) ++{ ++ g_return_val_if_fail (CC_IS_MULTITASKING_ROW (self), FALSE); ++ ++ return self->use_underline; ++} ++ ++void ++cc_multitasking_row_set_use_underline (CcMultitaskingRow *self, ++ gboolean use_underline) ++{ ++ g_return_if_fail (CC_IS_MULTITASKING_ROW (self)); ++ ++ use_underline = !!use_underline; ++ ++ if (self->use_underline == use_underline) ++ return; ++ ++ self->use_underline = use_underline; ++ hdy_preferences_row_set_use_underline (HDY_PREFERENCES_ROW (self), self->use_underline); ++ gtk_label_set_use_underline (self->title, self->use_underline); ++ gtk_label_set_use_underline (self->subtitle, self->use_underline); ++ gtk_label_set_mnemonic_widget (self->title, GTK_WIDGET (self)); ++ gtk_label_set_mnemonic_widget (self->subtitle, GTK_WIDGET (self)); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_USE_UNDERLINE]); ++} ++ ++gint ++cc_multitasking_row_get_title_lines (CcMultitaskingRow *self) ++{ ++ g_return_val_if_fail (CC_IS_MULTITASKING_ROW (self), 0); ++ ++ return self->title_lines; ++} ++ ++void ++cc_multitasking_row_set_title_lines (CcMultitaskingRow *self, ++ gint title_lines) ++{ ++ g_return_if_fail (CC_IS_MULTITASKING_ROW (self)); ++ g_return_if_fail (title_lines >= 0); ++ ++ if (self->title_lines == title_lines) ++ return; ++ ++ self->title_lines = title_lines; ++ ++ gtk_label_set_lines (self->title, title_lines); ++ gtk_label_set_ellipsize (self->title, title_lines == 0 ? PANGO_ELLIPSIZE_NONE : PANGO_ELLIPSIZE_END); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TITLE_LINES]); ++} ++ ++gint ++cc_multitasking_row_get_subtitle_lines (CcMultitaskingRow *self) ++{ ++ g_return_val_if_fail (CC_IS_MULTITASKING_ROW (self), 0); ++ ++ return self->subtitle_lines; ++} ++ ++void ++cc_multitasking_row_set_subtitle_lines (CcMultitaskingRow *self, ++ gint subtitle_lines) ++{ ++ g_return_if_fail (CC_IS_MULTITASKING_ROW (self)); ++ g_return_if_fail (subtitle_lines >= 0); ++ ++ if (self->subtitle_lines == subtitle_lines) ++ return; ++ ++ self->subtitle_lines = subtitle_lines; ++ ++ gtk_label_set_lines (self->subtitle, subtitle_lines); ++ gtk_label_set_ellipsize (self->subtitle, subtitle_lines == 0 ? PANGO_ELLIPSIZE_NONE : PANGO_ELLIPSIZE_END); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SUBTITLE_LINES]); ++} ++ ++void ++cc_multitasking_row_add_prefix (CcMultitaskingRow *self, ++ GtkWidget *widget) ++{ ++ g_return_if_fail (CC_IS_MULTITASKING_ROW (self)); ++ g_return_if_fail (GTK_IS_WIDGET (self)); ++ ++ gtk_box_pack_start (self->prefixes, widget, FALSE, TRUE, 0); ++ gtk_widget_show (GTK_WIDGET (self->prefixes)); ++} ++ ++void ++cc_multitasking_row_add_artwork (CcMultitaskingRow *self, ++ GtkWidget *widget) ++{ ++ g_return_if_fail (CC_IS_MULTITASKING_ROW (self)); ++ g_return_if_fail (GTK_IS_WIDGET (self)); ++ ++ /* HACK: the artwork box pushes the title too much to the top, so we ++ * need to compensate this here. ++ */ ++ gtk_widget_set_margin_top (GTK_WIDGET (self->header), 12); ++ ++ gtk_box_pack_start (self->artwork_box, widget, FALSE, TRUE, 0); ++ gtk_widget_show (GTK_WIDGET (self->artwork_box)); ++} ++ ++void ++cc_multitasking_row_activate (CcMultitaskingRow *self) ++{ ++ g_return_if_fail (CC_IS_MULTITASKING_ROW (self)); ++ ++ if (self->activatable_widget) ++ gtk_widget_mnemonic_activate (self->activatable_widget, FALSE); ++ ++ g_signal_emit (self, signals[SIGNAL_ACTIVATED], 0); ++} +diff --git a/panels/multitasking/cc-multitasking-row.h b/panels/multitasking/cc-multitasking-row.h +new file mode 100644 +index 000000000..c35d9d688 +--- /dev/null ++++ b/panels/multitasking/cc-multitasking-row.h +@@ -0,0 +1,63 @@ ++/* cc-multitasking-row.h ++ * ++ * Copyright 2018 Purism SPC ++ * 2021 Georges Basile Stavracas Neto ++ * ++ * 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 3 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, see . ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#pragma once ++ ++#include ++ ++G_BEGIN_DECLS ++ ++#define CC_TYPE_MULTITASKING_ROW (cc_multitasking_row_get_type()) ++G_DECLARE_FINAL_TYPE (CcMultitaskingRow, cc_multitasking_row, CC, MULTITASKING_ROW, HdyPreferencesRow) ++ ++const gchar *cc_multitasking_row_get_subtitle (CcMultitaskingRow *self); ++void cc_multitasking_row_set_subtitle (CcMultitaskingRow *self, ++ const gchar *subtitle); ++ ++const gchar *cc_multitasking_row_get_icon_name (CcMultitaskingRow *self); ++void cc_multitasking_row_set_icon_name (CcMultitaskingRow *self, ++ const gchar *icon_name); ++ ++GtkWidget *cc_multitasking_row_get_activatable_widget (CcMultitaskingRow *self); ++void cc_multitasking_row_set_activatable_widget (CcMultitaskingRow *self, ++ GtkWidget *widget); ++ ++gboolean cc_multitasking_row_get_use_underline (CcMultitaskingRow *self); ++void cc_multitasking_row_set_use_underline (CcMultitaskingRow *self, ++ gboolean use_underline); ++ ++gint cc_multitasking_row_get_title_lines (CcMultitaskingRow *self); ++void cc_multitasking_row_set_title_lines (CcMultitaskingRow *self, ++ gint title_lines); ++ ++gint cc_multitasking_row_get_subtitle_lines (CcMultitaskingRow *self); ++void cc_multitasking_row_set_subtitle_lines (CcMultitaskingRow *self, ++ gint subtitle_lines); ++ ++void cc_multitasking_row_add_prefix (CcMultitaskingRow *self, ++ GtkWidget *widget); ++ ++void cc_multitasking_row_add_artwork (CcMultitaskingRow *self, ++ GtkWidget *widget); ++ ++void cc_multitasking_row_activate (CcMultitaskingRow *self); ++ ++G_END_DECLS +diff --git a/panels/multitasking/cc-multitasking-row.ui b/panels/multitasking/cc-multitasking-row.ui +new file mode 100644 +index 000000000..a3377229f +--- /dev/null ++++ b/panels/multitasking/cc-multitasking-row.ui +@@ -0,0 +1,122 @@ ++ ++ ++ ++ +diff --git a/panels/multitasking/gnome-multitasking-panel.desktop.in.in b/panels/multitasking/gnome-multitasking-panel.desktop.in.in +new file mode 100644 +index 000000000..675879bc2 +--- /dev/null ++++ b/panels/multitasking/gnome-multitasking-panel.desktop.in.in +@@ -0,0 +1,14 @@ ++[Desktop Entry] ++Name=Multitasking ++Comment=Manage preferences for productivity and multitasking ++Exec=gnome-control-center multitasking ++# Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++Icon=org.gnome.Settings-multitasking-symbolic ++Terminal=false ++Type=Application ++NoDisplay=true ++StartupNotify=true ++Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel;X-GNOME-PersonalizationSettings; ++OnlyShowIn=GNOME; ++# Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++Keywords=Multitasking;Multitask;Productivity;Customize;Desktop; +diff --git a/panels/multitasking/icons/meson.build b/panels/multitasking/icons/meson.build +new file mode 100644 +index 000000000..b274dd102 +--- /dev/null ++++ b/panels/multitasking/icons/meson.build +@@ -0,0 +1,4 @@ ++install_data( ++ 'scalable/org.gnome.Settings-multitasking-symbolic.svg', ++ install_dir: join_paths(control_center_icondir, 'hicolor', 'scalable', 'apps') ++) +diff --git a/panels/multitasking/icons/scalable/org.gnome.Settings-multitasking-symbolic.svg b/panels/multitasking/icons/scalable/org.gnome.Settings-multitasking-symbolic.svg +new file mode 100644 +index 000000000..0e09bbcd5 +--- /dev/null ++++ b/panels/multitasking/icons/scalable/org.gnome.Settings-multitasking-symbolic.svg +@@ -0,0 +1,106 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/panels/multitasking/meson.build b/panels/multitasking/meson.build +new file mode 100644 +index 000000000..772b63813 +--- /dev/null ++++ b/panels/multitasking/meson.build +@@ -0,0 +1,49 @@ ++panels_list += cappletname ++desktop = 'gnome-@0@-panel.desktop'.format(cappletname) ++ ++desktop_in = configure_file( ++ input: desktop + '.in.in', ++ output: desktop + '.in', ++ configuration: desktop_conf ++) ++ ++i18n.merge_file( ++ desktop, ++ type: 'desktop', ++ input: desktop_in, ++ output: desktop, ++ po_dir: po_dir, ++ install: true, ++ install_dir: control_center_desktopdir ++) ++ ++sources = files( ++ 'cc-multitasking-panel.c', ++ 'cc-multitasking-row.c', ++) ++ ++resource_data = files( ++ 'cc-multitasking-panel.ui', ++) ++ ++sources += gnome.compile_resources( ++ 'cc-' + cappletname + '-resources', ++ cappletname + '.gresource.xml', ++ c_name: 'cc_' + cappletname, ++ dependencies: resource_data, ++ export: true ++) ++ ++cflags += [ ++ '-DDATADIR="@0@"'.format(control_center_datadir) ++] ++ ++panels_libs += static_library( ++ cappletname, ++ sources: sources, ++ include_directories: [ top_inc, common_inc ], ++ dependencies: common_deps, ++ c_args: cflags ++) ++ ++subdir('icons') +diff --git a/panels/multitasking/multitasking.gresource.xml b/panels/multitasking/multitasking.gresource.xml +new file mode 100644 +index 000000000..db8365f68 +--- /dev/null ++++ b/panels/multitasking/multitasking.gresource.xml +@@ -0,0 +1,13 @@ ++ ++ ++ ++ cc-multitasking-panel.ui ++ cc-multitasking-row.ui ++ ++ ++ assets/active-screen-edges.svg ++ assets/hot-corner.svg ++ assets/workspaces-primary-display.svg ++ assets/workspaces-span-displays.svg ++ ++ +diff --git a/shell/cc-panel-list.c b/shell/cc-panel-list.c +index e23da0b87..38be643ea 100644 +--- a/shell/cc-panel-list.c ++++ b/shell/cc-panel-list.c +@@ -386,6 +386,7 @@ static const gchar * const panel_order[] = { + "background", + "notifications", + "search", ++ "multitasking", + "applications", + "privacy", + "online-accounts", +diff --git a/shell/cc-panel-loader.c b/shell/cc-panel-loader.c +index f20384394..fcbf398ca 100644 +--- a/shell/cc-panel-loader.c ++++ b/shell/cc-panel-loader.c +@@ -43,6 +43,7 @@ extern GType cc_display_panel_get_type (void); + extern GType cc_info_overview_panel_get_type (void); + extern GType cc_keyboard_panel_get_type (void); + extern GType cc_mouse_panel_get_type (void); ++extern GType cc_multitasking_panel_get_type (void); + #ifdef BUILD_NETWORK + extern GType cc_network_panel_get_type (void); + extern GType cc_wifi_panel_get_type (void); +@@ -107,6 +108,7 @@ static CcPanelLoaderVtable default_panels[] = + PANEL_TYPE("lock", cc_lock_panel_get_type, NULL), + PANEL_TYPE("microphone", cc_microphone_panel_get_type, NULL), + PANEL_TYPE("mouse", cc_mouse_panel_get_type, NULL), ++ PANEL_TYPE("multitasking", cc_multitasking_panel_get_type, NULL), + #ifdef BUILD_NETWORK + PANEL_TYPE("network", cc_network_panel_get_type, NULL), + PANEL_TYPE("wifi", cc_wifi_panel_get_type, cc_wifi_panel_static_init_func), +diff --git a/shell/gnome-control-center.gresource.xml b/shell/gnome-control-center.gresource.xml +index 9be077ec9..5550440e1 100644 +--- a/shell/gnome-control-center.gresource.xml ++++ b/shell/gnome-control-center.gresource.xml +@@ -6,4 +6,10 @@ + help-overlay.ui + style.css + ++ ++ ++ ++ icons/multitasking-symbolic.svg ++ style.css ++ + +diff --git a/shell/icons/multitasking-symbolic.svg b/shell/icons/multitasking-symbolic.svg +new file mode 100644 +index 000000000..7959ddbfc +--- /dev/null ++++ b/shell/icons/multitasking-symbolic.svg +@@ -0,0 +1,98 @@ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ Gnome Symbolic Icon Theme ++ ++ ++ ++ Gnome Symbolic Icon Theme ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +-- +2.34.1 + + +From ba6abb04a0cb344faaa9aed7cc8d90bff0077c04 Mon Sep 17 00:00:00 2001 +From: Georges Basile Stavracas Neto +Date: Fri, 13 Aug 2021 18:39:57 -0300 +Subject: [PATCH 02/10] multitasking: Use Mutter settings for dynamic + workspaces + +The overrides weren't meant to be used like that. +--- + panels/multitasking/cc-multitasking-panel.c | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/panels/multitasking/cc-multitasking-panel.c b/panels/multitasking/cc-multitasking-panel.c +index 6a3177fe9..1523e35b1 100644 +--- a/panels/multitasking/cc-multitasking-panel.c ++++ b/panels/multitasking/cc-multitasking-panel.c +@@ -31,7 +31,6 @@ struct _CcMultitaskingPanel + + GSettings *interface_settings; + GSettings *mutter_settings; +- GSettings *overrides_settings; + GSettings *shell_settings; + GSettings *wm_settings; + +@@ -56,7 +55,6 @@ cc_multitasking_panel_finalize (GObject *object) + + g_clear_object (&self->interface_settings); + g_clear_object (&self->mutter_settings); +- g_clear_object (&self->overrides_settings); + g_clear_object (&self->shell_settings); + g_clear_object (&self->wm_settings); + +@@ -117,14 +115,12 @@ cc_multitasking_panel_init (CcMultitaskingPanel *self) + "active", + G_SETTINGS_BIND_DEFAULT); + +- self->overrides_settings = g_settings_new ("org.gnome.shell.overrides"); +- +- if (g_settings_get_boolean (self->overrides_settings, "dynamic-workspaces")) ++ if (g_settings_get_boolean (self->mutter_settings, "dynamic-workspaces")) + gtk_toggle_button_set_active (self->dynamic_workspaces_radio, TRUE); + else + gtk_toggle_button_set_active (self->fixed_workspaces_radio, TRUE); + +- g_settings_bind (self->overrides_settings, ++ g_settings_bind (self->mutter_settings, + "dynamic-workspaces", + self->dynamic_workspaces_radio, + "active", +-- +2.34.1 + + +From cad4930697dcfa7ff2345a3eab09d6ecd6439469 Mon Sep 17 00:00:00 2001 +From: Felipe Borges +Date: Wed, 6 Oct 2021 12:37:44 +0200 +Subject: [PATCH 03/10] multitasking: Expand row subtitles to a second line + +Depending on the language used, the label could get long and +unreadable (ellipsized). + +Fixes #1486 +--- + panels/multitasking/cc-multitasking-row.ui | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/panels/multitasking/cc-multitasking-row.ui b/panels/multitasking/cc-multitasking-row.ui +index a3377229f..dcb90e9d4 100644 +--- a/panels/multitasking/cc-multitasking-row.ui ++++ b/panels/multitasking/cc-multitasking-row.ui +@@ -75,7 +75,7 @@ + end + start + True +- 1 ++ 2 + True + word-char + 0 +-- +2.34.1 + + +From 80701f7b6480254f18ad42928249a29cb250d604 Mon Sep 17 00:00:00 2001 +From: Jakub Steiner +Date: Fri, 28 Jan 2022 09:51:22 +0100 +Subject: [PATCH 04/10] multitasking: make graphics work in dark mode + +- more of a workaround than a solution. Getting rid of the white fills + at the expense of clarity and style. + +Fixes #1565 +--- + .../assets/active-screen-edges.svg | 159 +++++------- + panels/multitasking/assets/hot-corner.svg | 175 ++++++------- + .../assets/workspaces-primary-display.svg | 187 ++++++-------- + .../assets/workspaces-span-displays.svg | 244 +++++++----------- + 4 files changed, 301 insertions(+), 464 deletions(-) + +diff --git a/panels/multitasking/assets/active-screen-edges.svg b/panels/multitasking/assets/active-screen-edges.svg +index 34dc67b4e..66694cdca 100644 +--- a/panels/multitasking/assets/active-screen-edges.svg ++++ b/panels/multitasking/assets/active-screen-edges.svg +@@ -1,118 +1,79 @@ + +- +- + ++ + +- +- +- +- +- +- +- +- ++ showborder="false" ++ inkscape:current-layer="svg20"> ++ ++ ++ ++ + +- ++ transform="matrix(0.26458,0,0,0.26458,-400.06245,1156.76)" ++ style="display:inline" ++ id="g16"> + ++ ry="3" ++ rx="3" ++ y="-4353.0068" ++ x="1520.006" ++ height="58" ++ width="76" ++ style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#3584e4;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" ++ id="rect6" /> ++ + +- ++ style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#3584e4;stroke-opacity:1" ++ id="g14"> ++ + +- +- +- +- ++ style="color:#000000;display:block;overflow:visible;visibility:visible;fill:#3584e4;fill-opacity:1;fill-rule:nonzero;stroke:#3584e4;stroke-width:0.612915;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" ++ d="m 26.605,2.318 v 16.44 l 3.712,-3.624 2.122,4.331 c 0.52,1.172 3.22,0.23 2.452,-1.337 l -2.099,-4.496 h 4.685 z" ++ transform="matrix(1.6306,0,0,1.63249,1484.124,-4348.541)" ++ id="path12" /> + +- + ++ + +diff --git a/panels/multitasking/assets/hot-corner.svg b/panels/multitasking/assets/hot-corner.svg +index 0a1732c0e..f540458ce 100644 +--- a/panels/multitasking/assets/hot-corner.svg ++++ b/panels/multitasking/assets/hot-corner.svg +@@ -1,124 +1,97 @@ + +- +- + + ++ inkscape:current-layer="svg31" /> + ++ id="defs5"> + +- ++ + + + +- +- +- +- +- +- +- +- +- +- ++ style="display:inline" ++ id="g11"> ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + ++ style="display:inline" ++ id="g27"> + +- +- +- +- ++ style="color:#000;display:block;overflow:visible;visibility:visible;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#3584e4;stroke-width:0.612915;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:1.22583, 0.612915;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" ++ d="M29.691 6.634v16.44l3.712-3.624 2.122 4.331c.52 1.171 3.22.23 2.452-1.337l-2.099-4.497h4.685z" ++ transform="matrix(.42866 0 0 .42916 1.739 7.533)" ++ id="path25" /> + + + +diff --git a/panels/multitasking/assets/workspaces-primary-display.svg b/panels/multitasking/assets/workspaces-primary-display.svg +index 56e05c4bb..5930fab69 100644 +--- a/panels/multitasking/assets/workspaces-primary-display.svg ++++ b/panels/multitasking/assets/workspaces-primary-display.svg +@@ -1,130 +1,99 @@ + +- +- + + ++ inkscape:current-layer="svg29" ++ width="326px"> ++ ++ + ++ id="defs5"> + +- ++ ++ d="m 1448,-3870.014 h 127 v 73 h -127 z" ++ id="path2" /> + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + +diff --git a/panels/multitasking/assets/workspaces-span-displays.svg b/panels/multitasking/assets/workspaces-span-displays.svg +index 7b3655df9..a18c74eae 100644 +--- a/panels/multitasking/assets/workspaces-span-displays.svg ++++ b/panels/multitasking/assets/workspaces-span-displays.svg +@@ -1,178 +1,112 @@ + +- +- + + ++ inkscape:current-layer="svg29"> ++ ++ + ++ id="defs5"> + +- ++ +- +- +- +- +- +- ++ d="m 1448,-3870.014 h 127 v 73 h -127 z" ++ id="path2" /> + + ++ ++ ++ ++ ++ ++ ++ ++ + ++ id="g4804" ++ transform="translate(43.921149,-0.5285854)"> + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ style="opacity:1;fill:#3584e4;fill-opacity:1;stroke:#ed333b;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none" ++ id="rect4795" ++ width="26.458509" ++ height="15.345935" ++ x="7.9374046" ++ y="5.2917023" ++ rx="1.3229257" ++ ry="1.3229256" /> ++ ++ + + +-- +2.34.1 + + +From 1de41cac78f7b740d48e12947b0191c2a067318a Mon Sep 17 00:00:00 2001 +From: Christopher Davis +Date: Thu, 6 Jan 2022 18:24:25 -0800 +Subject: [PATCH 05/10] cc-multitasking-panel: Fix initial state for "all + workspaces" setting + +--- + panels/multitasking/cc-multitasking-panel.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/panels/multitasking/cc-multitasking-panel.c b/panels/multitasking/cc-multitasking-panel.c +index 1523e35b1..9a4041e43 100644 +--- a/panels/multitasking/cc-multitasking-panel.c ++++ b/panels/multitasking/cc-multitasking-panel.c +@@ -35,6 +35,7 @@ struct _CcMultitaskingPanel + GSettings *wm_settings; + + GtkSwitch *active_screen_edges_switch; ++ GtkToggleButton *all_workspaces_radio; + GtkToggleButton *current_workspace_radio; + GtkToggleButton *dynamic_workspaces_radio; + GtkToggleButton *fixed_workspaces_radio; +@@ -74,6 +75,7 @@ cc_multitasking_panel_class_init (CcMultitaskingPanelClass *klass) + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/multitasking/cc-multitasking-panel.ui"); + + gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, active_screen_edges_switch); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, all_workspaces_radio); + gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, current_workspace_radio); + gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, dynamic_workspaces_radio); + gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, fixed_workspaces_radio); +@@ -137,6 +139,8 @@ cc_multitasking_panel_init (CcMultitaskingPanel *self) + + if (g_settings_get_boolean (self->shell_settings, "current-workspace-only")) + gtk_toggle_button_set_active (self->current_workspace_radio, TRUE); ++ else ++ gtk_toggle_button_set_active (self->all_workspaces_radio, TRUE); + + g_settings_bind (self->shell_settings, + "current-workspace-only", +-- +2.34.1 + + +From 7431df3d58327e39daf6f5a4e46aa1e9a18d6aae Mon Sep 17 00:00:00 2001 +From: Jakub Steiner +Date: Fri, 28 Jan 2022 15:53:48 +0100 +Subject: [PATCH 06/10] multitasking: provide rtl asset + +- provide a RTL variant of the hot corner graphic +- revert one of the arrow to be outine only (unrelated to rtl) +- provide RTL variant of the active screen edges (close button + on the opposite side) + +See https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1559 +--- + .../assets/active-screen-edges-rtl.svg | 73 ++++++++++++++ + panels/multitasking/assets/hot-corner-rtl.svg | 94 +++++++++++++++++++ + panels/multitasking/assets/hot-corner.svg | 2 +- + 3 files changed, 168 insertions(+), 1 deletion(-) + create mode 100644 panels/multitasking/assets/active-screen-edges-rtl.svg + create mode 100644 panels/multitasking/assets/hot-corner-rtl.svg + +diff --git a/panels/multitasking/assets/active-screen-edges-rtl.svg b/panels/multitasking/assets/active-screen-edges-rtl.svg +new file mode 100644 +index 000000000..4a0351213 +--- /dev/null ++++ b/panels/multitasking/assets/active-screen-edges-rtl.svg +@@ -0,0 +1,73 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/panels/multitasking/assets/hot-corner-rtl.svg b/panels/multitasking/assets/hot-corner-rtl.svg +new file mode 100644 +index 000000000..e0286f57d +--- /dev/null ++++ b/panels/multitasking/assets/hot-corner-rtl.svg +@@ -0,0 +1,94 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/panels/multitasking/assets/hot-corner.svg b/panels/multitasking/assets/hot-corner.svg +index f540458ce..bfff29791 100644 +--- a/panels/multitasking/assets/hot-corner.svg ++++ b/panels/multitasking/assets/hot-corner.svg +@@ -80,7 +80,7 @@ + style="display:inline" + id="g29"> + +-- +2.34.1 + + +From 65becdf1b6544184c0c914f0c90eecdf6bb06558 Mon Sep 17 00:00:00 2001 +From: Jakub Steiner +Date: Wed, 23 Feb 2022 13:34:18 +0100 +Subject: [PATCH 07/10] multitasking: no more rounded top bar + +- update the look of the top bar not to have the rounding of +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ +\ No newline at end of file +diff --git a/panels/multitasking/assets/active-screen-edges.svg b/panels/multitasking/assets/active-screen-edges.svg +index 66694cdca..bc249ab39 100644 +--- a/panels/multitasking/assets/active-screen-edges.svg ++++ b/panels/multitasking/assets/active-screen-edges.svg +@@ -1,79 +1 @@ +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ +\ No newline at end of file +diff --git a/panels/multitasking/assets/hot-corner-rtl.svg b/panels/multitasking/assets/hot-corner-rtl.svg +index e0286f57d..9d02e4aba 100644 +--- a/panels/multitasking/assets/hot-corner-rtl.svg ++++ b/panels/multitasking/assets/hot-corner-rtl.svg +@@ -1,94 +1 @@ +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ +\ No newline at end of file +diff --git a/panels/multitasking/assets/hot-corner.svg b/panels/multitasking/assets/hot-corner.svg +index bfff29791..7ce8e501e 100644 +--- a/panels/multitasking/assets/hot-corner.svg ++++ b/panels/multitasking/assets/hot-corner.svg +@@ -1,97 +1 @@ +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ +\ No newline at end of file +diff --git a/panels/multitasking/assets/workspaces-primary-display.svg b/panels/multitasking/assets/workspaces-primary-display.svg +index 5930fab69..3a3bed759 100644 +--- a/panels/multitasking/assets/workspaces-primary-display.svg ++++ b/panels/multitasking/assets/workspaces-primary-display.svg +@@ -1,99 +1 @@ +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ +\ No newline at end of file +diff --git a/panels/multitasking/assets/workspaces-span-displays.svg b/panels/multitasking/assets/workspaces-span-displays.svg +index a18c74eae..571ee10c1 100644 +--- a/panels/multitasking/assets/workspaces-span-displays.svg ++++ b/panels/multitasking/assets/workspaces-span-displays.svg +@@ -1,112 +1 @@ +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ +\ No newline at end of file +-- +2.34.1 + + +From b0563736af68abb643fa5ef60a672f402c6024f5 Mon Sep 17 00:00:00 2001 +From: Jakub Steiner +Date: Wed, 2 Mar 2022 09:57:10 +0100 +Subject: [PATCH 08/10] multitasking: clean up illustration + +- fills removed to make dark mode possible exposed the rings + going through the cursors and arrows, which isn't a nice + aesthetic. convert to shapes and cut them with booleans + to get the previous look without using solid color fills +--- + panels/multitasking/assets/hot-corner-rtl.svg | 2 +- + panels/multitasking/assets/hot-corner.svg | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/panels/multitasking/assets/hot-corner-rtl.svg b/panels/multitasking/assets/hot-corner-rtl.svg +index 9d02e4aba..4eb3aba22 100644 +--- a/panels/multitasking/assets/hot-corner-rtl.svg ++++ b/panels/multitasking/assets/hot-corner-rtl.svg +@@ -1 +1 @@ +- +\ No newline at end of file ++ +\ No newline at end of file +diff --git a/panels/multitasking/assets/hot-corner.svg b/panels/multitasking/assets/hot-corner.svg +index 7ce8e501e..66cee2a0b 100644 +--- a/panels/multitasking/assets/hot-corner.svg ++++ b/panels/multitasking/assets/hot-corner.svg +@@ -1 +1 @@ +- +\ No newline at end of file ++ +\ No newline at end of file +-- +2.34.1 + + +From 61b9191a527c9444b2dc1b66388611c319d78099 Mon Sep 17 00:00:00 2001 +From: Felipe Borges +Date: Mon, 28 Feb 2022 11:23:48 +0100 +Subject: [PATCH 09/10] multitasking: Display Right-to-Left ilustrations for + RTL locales + +Fixes #1559 +--- + panels/multitasking/cc-multitasking-panel.c | 12 ++++++++++++ + panels/multitasking/cc-multitasking-panel.ui | 4 ++-- + panels/multitasking/multitasking.gresource.xml | 2 ++ + 3 files changed, 16 insertions(+), 2 deletions(-) + +diff --git a/panels/multitasking/cc-multitasking-panel.c b/panels/multitasking/cc-multitasking-panel.c +index 9a4041e43..448f8cc55 100644 +--- a/panels/multitasking/cc-multitasking-panel.c ++++ b/panels/multitasking/cc-multitasking-panel.c +@@ -34,11 +34,13 @@ struct _CcMultitaskingPanel + GSettings *shell_settings; + GSettings *wm_settings; + ++ GtkImage *active_screen_edges_picture; + GtkSwitch *active_screen_edges_switch; + GtkToggleButton *all_workspaces_radio; + GtkToggleButton *current_workspace_radio; + GtkToggleButton *dynamic_workspaces_radio; + GtkToggleButton *fixed_workspaces_radio; ++ GtkImage *hot_corner_picture; + GtkSwitch *hot_corner_switch; + GtkSpinButton *number_of_workspaces_spin; + GtkToggleButton *workspaces_primary_display_radio; +@@ -74,11 +76,13 @@ cc_multitasking_panel_class_init (CcMultitaskingPanelClass *klass) + + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/multitasking/cc-multitasking-panel.ui"); + ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, active_screen_edges_picture); + gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, active_screen_edges_switch); + gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, all_workspaces_radio); + gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, current_workspace_radio); + gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, dynamic_workspaces_radio); + gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, fixed_workspaces_radio); ++ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, hot_corner_picture); + gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, hot_corner_switch); + gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, number_of_workspaces_spin); + gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, workspaces_primary_display_radio); +@@ -147,4 +151,12 @@ cc_multitasking_panel_init (CcMultitaskingPanel *self) + self->current_workspace_radio, + "active", + G_SETTINGS_BIND_DEFAULT); ++ ++ if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL) ++ { ++ gtk_image_set_from_resource (self->hot_corner_picture, ++ "/org/gnome/control-center/multitasking/assets/hot-corner-rtl.svg"); ++ gtk_image_set_from_resource (self->active_screen_edges_picture, ++ "/org/gnome/control-center/multitasking/assets/active-screen-edges-rtl.svg"); ++ } + } +diff --git a/panels/multitasking/cc-multitasking-panel.ui b/panels/multitasking/cc-multitasking-panel.ui +index 5b5725038..32c85afe5 100644 +--- a/panels/multitasking/cc-multitasking-panel.ui ++++ b/panels/multitasking/cc-multitasking-panel.ui +@@ -64,7 +64,7 @@ + + + +- ++ + True + True + center +@@ -92,7 +92,7 @@ + + + +- ++ + True + True + center +diff --git a/panels/multitasking/multitasking.gresource.xml b/panels/multitasking/multitasking.gresource.xml +index db8365f68..df47764c1 100644 +--- a/panels/multitasking/multitasking.gresource.xml ++++ b/panels/multitasking/multitasking.gresource.xml +@@ -6,7 +6,9 @@ + + + assets/active-screen-edges.svg ++ assets/active-screen-edges-rtl.svg + assets/hot-corner.svg ++ assets/hot-corner-rtl.svg + assets/workspaces-primary-display.svg + assets/workspaces-span-displays.svg + +-- +2.34.1 + + +From 4a557d08f17d35c8ffaf84efba89933b240af908 Mon Sep 17 00:00:00 2001 +From: Felipe Borges +Date: Mon, 14 Mar 2022 10:50:34 +0100 +Subject: [PATCH 10/10] multitasking: Backport translations + +--- + po/POTFILES.in | 2 + + po/be.po | 116 +++++++- + po/bg.po | 129 ++++++++- + po/ca.po | 403 ++++++++++++++++++---------- + po/cs.po | 135 +++++++++- + po/da.po | 141 +++++++++- + po/de.po | 109 +++++++- + po/es.po | 127 ++++++++- + po/eu.po | 602 ++++++++++++++++++++++++++++++++--------- + po/fa.po | 707 ++++++++++++++++++++++++++++++------------------- + po/fi.po | 111 +++++++- + po/fr.po | 152 ++++++++++- + po/gl.po | 143 +++++++++- + po/he.po | 120 ++++++++- + po/hr.po | 109 +++++++- + po/hu.po | 131 ++++++++- + po/id.po | 119 ++++++++- + po/is.po | 142 ++++++++-- + po/ja.po | 140 +++++++++- + po/kk.po | 109 +++++++- + po/ko.po | 113 +++++++- + po/lt.po | 110 +++++++- + po/lv.po | 180 ++++++++++--- + po/nl.po | 150 ++++++++++- + po/oc.po | 183 ++++++++++--- + po/pa.po | 392 +++++++++++++-------------- + po/pl.po | 109 +++++++- + po/pt.po | 130 ++++++++- + po/pt_BR.po | 144 +++++++++- + po/ro.po | 116 +++++++- + po/ru.po | 108 +++++++- + po/sk.po | 129 ++++++++- + po/sl.po | 122 ++++++++- + po/sr.po | 123 ++++++++- + po/sv.po | 123 ++++++++- + po/tr.po | 125 ++++++++- + po/uk.po | 123 ++++++++- + po/vi.po | 120 ++++++++- + po/zh_CN.po | 140 +++++++++- + 39 files changed, 5486 insertions(+), 1001 deletions(-) + +diff --git a/po/POTFILES.in b/po/POTFILES.in +index 5f7e8d49a..b5c6e98ce 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -82,6 +82,8 @@ panels/mouse/cc-mouse-panel.ui + panels/mouse/cc-mouse-test.c + panels/mouse/cc-mouse-test.ui + panels/mouse/gnome-mouse-panel.desktop.in.in ++panels/multitasking/cc-multitasking-panel.ui ++panels/multitasking/gnome-multitasking-panel.desktop.in.in + panels/network/cc-network-panel.c + panels/network/cc-network-panel.ui + panels/network/cc-wifi-connection-row.c +diff --git a/po/be.po b/po/be.po +index fba62b145..e7ea7074a 100644 +--- a/po/be.po ++++ b/po/be.po +@@ -4,8 +4,27 @@ + # Ihar Hrachyshka , 2011, 2012, 2013, 2014. + # Kasia Bondarava , 2012. + # Yuras Shumovich , 2017. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# be.po.multitasking (gnome-control-center.master) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center.master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-07 09:53+0000\n" ++"PO-Revision-Date: 2021-09-08 01:31+0300\n" ++"Last-Translator: Launchpad translators\n" ++"Language-Team: Belarusian \n" ++"Language: be\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" ++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" ++"X-Launchpad-Export-Date: 2020-05-05 21:37+0000\n" ++"X-Generator: Poedit 3.0\n" ++"X-Project-Style: gnome\n" ++"#-#-#-#-# be.po (gnome-control-center.master) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center.master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -22,6 +41,99 @@ msgstr "" + "X-Generator: Poedit 2.1.1\n" + "X-Project-Style: gnome\n" + ++#. #-#-#-#-# be.po.multitasking (gnome-control-center.master) #-#-#-#-# ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++#: panels/mouse/gnome-mouse-properties.ui:50 ++#, fuzzy ++msgid "General" ++msgstr "" ++"#-#-#-#-# be.po.multitasking (gnome-control-center.master) #-#-#-#-#\n" ++"Агульныя\n" ++"#-#-#-#-# be.po (gnome-control-center.master) #-#-#-#-#\n" ++"Агульныя настройкі" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "Актыўны _кут" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Крананне верхняга левага кута адкрывае меню Агляд дзейнасці." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Актыўныя краі экрана" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Каб змяніць памер акна, перацягніце яго да верхняга, левага ці правага краю " ++"экрана." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Працоўныя прасторы" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Дынамічныя працоўныя прасторы" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Пустыя працоўныя прасторы выдаляюцца аўтаматычна." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Фіксаваная колькасць працоўных прастор" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Вызначыце колькасць пастаянных працоўных прастор." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Колькасць працоўных прастор" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Некалькі манітораў" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Працоўныя прасторы толькі на _асноўным дысплэі" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Працоўныя прасторы на _ўсіх дысплэях" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Пераключэнне паміж праграмамі" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Уключаць праграмы з усіх працоўных прастор" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Уключаць толькі праграмы з бягучай працоўнай прасторы" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Шматзадачнасць" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Кіраванне параметрамі прадукцыйнасці і шматзадачнасці" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Шматзадачнасць;Прадукцыйнасць;Працоўны стол;Кастамізацыя;" ++ + #: panels/background/background.ui:49 + msgid "_Background" + msgstr "_Абрус" +@@ -2014,10 +2126,6 @@ msgstr "" + "Чулая панэль;Паказальнік;Пстрычка;Дотык;Падвойная пстрычка;Кнопка;Трэкбол;" + "Пракрутка;" + +-#: panels/mouse/gnome-mouse-properties.ui:50 +-msgid "General" +-msgstr "Агульныя настройкі" +- + #: panels/mouse/gnome-mouse-properties.ui:88 + msgid "Primary Button" + msgstr "Галоўная кнопка" +diff --git a/po/bg.po b/po/bg.po +index 63d9c3dfb..f35ab413f 100644 +--- a/po/bg.po ++++ b/po/bg.po +@@ -1,3 +1,22 @@ ++# #-#-#-#-# bg.po.multitasking (gnome-control-center master) #-#-#-#-# ++# Bulgarian translation of gnome-control-center po-file. ++# Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc. ++# Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ++# Copyright (C) 2011, 2012, 2013, 2014 Free Software Foundation, Inc. ++# Copyright (C) 2015, 2016 Free Software Foundation, Inc. ++# Copyright (C) 2009 Krasimir "Bfaf" Chonov . ++# Copyright (C) 2021 Alexander Shopov . ++# Borislav Aleksandrov , 2002. ++# Yanko Kaneti , 2002. ++# Rostislav Raykov , 2004, 2005. ++# Vladimir Petkov , 2004, 2005, 2006. ++# Alexander Shopov , 2006, 2007, 2009, 2012, 2014, 2015, 2016, 2021. ++# Yavor Doganov , 2007, 2008. ++# Krasimir "Bfaf" Chonov , 2009. ++# Jordan Miladinov , 2011 ++# Ivaylo Valkov , 2011, 2012, 2013. ++# ++# #-#-#-#-# bg.po (gnome-control-center master) #-#-#-#-# + # Bulgarian translation of gnome-control-center po-file. + # Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc. + # Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +@@ -14,8 +33,23 @@ + # Jordan Miladinov , 2011 + # Ivaylo Valkov , 2011, 2012, 2013. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# bg.po.multitasking (gnome-control-center master) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-15 07:31+0000\n" ++"PO-Revision-Date: 2021-09-21 11:02+0200\n" ++"Last-Translator: Alexander Shopov \n" ++"Language-Team: Bulgarian \n" ++"Language: bg\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" ++"#-#-#-#-# bg.po (gnome-control-center master) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center master\n" + "Report-Msgid-Bugs-To: \n" + "POT-Creation-Date: 2017-09-12 22:26+0300\n" +@@ -28,6 +62,97 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + ++#. #-#-#-#-# bg.po.multitasking (gnome-control-center master) #-#-#-#-# ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++#: ../panels/mouse/gnome-mouse-properties.ui.h:1 ++msgid "General" ++msgstr "Общи" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "Активен _ъгъл" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "" ++"Натиснете горния ляв ъгъл на екрана, за да отворите прегледа на дейностите." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "Активни _ръбове" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Завлачете прозорците до горния, долния, левия или десния ръб на екрана, за " ++"да ги преоразмерите." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Работно пространство" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Динамични работни пространства" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Автоматично изчистване на незаети работни пространства." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Постоянен брой работни пространства" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Укажете точен брой на работните пространства" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Брой работни пространства" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "На много монитори" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Работни пространства _само на основния екран" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Работни пространства на _всички екрани" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Смяна на програмите" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Програми от всички _работни пространства" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Програми само от текущото _работно пространство" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Многозадачност" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Настройките за производителност и работа по много задачи" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"multitasking;multitask;productivity;customize;desktop;многозадачност;" ++"паралелност;производителност;продуктивност;работно пространство;" ++ + #: ../panels/background/background.ui.h:1 + msgid "_Background" + msgstr "_Фон" +@@ -2013,10 +2138,6 @@ msgstr "" + "натискане;бутон;джойстик;придвижване;trackpad;pointer;click;tap;double;" + "button;trackball;scroll;" + +-#: ../panels/mouse/gnome-mouse-properties.ui.h:1 +-msgid "General" +-msgstr "Общи" +- + #: ../panels/mouse/gnome-mouse-properties.ui.h:2 + msgid "Primary Button" + msgstr "Основен бутон" +diff --git a/po/ca.po b/po/ca.po +index db22a817f..fd49a05f5 100644 +--- a/po/ca.po ++++ b/po/ca.po +@@ -1,3 +1,24 @@ ++# #-#-#-#-# ca.po.multitasking (gnome-control-center) #-#-#-#-# ++# Traducció del gnome-control-center de l'equip de Softcatalà. ++# Copyright © 1999-2009 Free Software Foundation, Inc. ++# ++# Terminologia ++# ++# Hotspot -> punt d'accés Wi-Fi ++# Plugged In -> endollat (si es refereix al corrent) ++# ++# Ivan Vilata i Balaguer , 1999, 2000. ++# Softcatalà , 2000, 2001. ++# Jordi Mallach , 2002, 2003, 2004, 2005. ++# Xavier Conde Rueda , 2005. ++# Josep Puigdemont i Casamajó , 2005, 2006, 2007. ++# Joan Duran , 2008-2013. ++# Jordi Serratosa , 2012, 2017. ++# Josep Sànchez , 2013. ++# Jordi Mas i Hernàndez , 2015-2021 ++# Gil Forcada , 2013-2020. ++# Carles Ferrando Garcia , 2018. ++# #-#-#-#-# ca.po (gnome-control-center) #-#-#-#-# + # Traducció del gnome-control-center de l'equip de Softcatalà. + # Copyright © 1999-2009 Free Software Foundation, Inc. + # +@@ -17,13 +38,31 @@ + # Jordi Mas i Hernàndez , 2015-2018. + # Gil Forcada , 2013-2020. + # Carles Ferrando Garcia , 2018. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# ca.po.multitasking (gnome-control-center) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-08 08:29+0000\n" ++"PO-Revision-Date: 2020-12-21 13:29+0100\n" ++"Last-Translator: Jordi Mas \n" ++"Language-Team: Catalan \n" ++"Language: ca\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.4.1\n" ++"#-#-#-#-# ca.po (gnome-control-center) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center\n" +-"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/issues\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" + "POT-Creation-Date: 2021-02-02 07:02+0000\n" + "PO-Revision-Date: 2020-12-21 13:29+0100\n" +-"Last-Translator: Miquel-Àngel Burgos i Fradeja \n" ++"Last-Translator: Miquel-Àngel Burgos i Fradeja \n" + "Language-Team: Catalan \n" + "Language: ca\n" + "MIME-Version: 1.0\n" +@@ -32,6 +71,95 @@ msgstr "" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Poedit 2.4.1\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "General" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Cantonada activa" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "" ++"Toqueu la cantonada superior esquerra per a obrir la vista general " ++"d'Activitats." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Activa les vores de la pantalla" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Arrossegueu les finestres contra les vores superior, esquerra i dreta de la " ++"pantalla per a redimensionar-les." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Espais de treball" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Espais de treball dinàmics" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Suprimeix automàticament els espais de treball buits." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Nombre fix d'espais de treball" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Especifiqueu un nombre d'espais de treball permanents." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Nombre d'espais de treball" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Multi-Monitor" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "_Només espais de treball en la pantalla primària" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "_Espais de treball en totes les pantalles" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Commutació d'aplicacions" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "_Inclou aplicacions de tots els espais de treball" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "I_nclou aplicacions només de l'espai de treball actual" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Multitasca" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Gestiona les preferències de productivitat i multitasca" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or ++#. localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Multitasca;Productivitat;Personalitza;Escriptori;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Bus del sistema" +@@ -101,8 +229,7 @@ msgid "" + "are concerned about these permissions, consider removing this application." + msgstr "" + "%s té els següents permisos integrats. Aquests no poden ser alterats. Si " +-"esteu preocupats per aquests permisos, considereu suprimir aquesta " +-"aplicació." ++"esteu preocupats per aquests permisos, considereu suprimir aquesta aplicació." + + #: panels/applications/cc-applications-panel.c:1024 + msgid "Web Links" +@@ -184,8 +311,8 @@ msgstr "Permisos i accés" + + #: panels/applications/cc-applications-panel.ui:106 + msgid "" +-"Data and services that this app has asked for access to and permissions that" +-" it requires." ++"Data and services that this app has asked for access to and permissions that " ++"it requires." + msgstr "" + "Dades i serveis que aquesta aplicació ha demanat accés i permisos que " + "requereix." +@@ -208,8 +335,7 @@ msgstr "Càmera" + #: panels/applications/cc-applications-panel.ui:262 + #: panels/keyboard/cc-keyboard-shortcut-editor.ui:85 + #: panels/keyboard/cc-xkb-modifier-dialog.c:355 +-#: panels/keyboard/keyboard-shortcuts.c:367 +-#: panels/network/network-proxy.ui:129 ++#: panels/keyboard/keyboard-shortcuts.c:367 panels/network/network-proxy.ui:129 + #: panels/user-accounts/cc-user-panel.c:843 + #: panels/user-accounts/cc-user-panel.c:938 + #: subprojects/gvc/gvc-mixer-control.c:1900 +@@ -239,8 +365,8 @@ msgstr "No es pot canviar" + + #: panels/applications/cc-applications-panel.ui:175 + msgid "" +-"Individual permissions for applications can be reviewed in the Privacy Settings." ++"Individual permissions for applications can be reviewed in the Privacy Settings." + msgstr "" + "Els permisos individuals per aplicacions poden revisar-se en els paràmetres " + "de Privacitat." +@@ -502,8 +628,8 @@ msgstr "Cap aplicació pot capturar fotografies o vídeo." + + #: panels/camera/cc-camera-panel.ui:75 + msgid "" +-"Use of the camera allows applications to capture photos and video. Disabling" +-" the camera may cause some applications to not function properly." ++"Use of the camera allows applications to capture photos and video. Disabling " ++"the camera may cause some applications to not function properly." + msgstr "" + "L'ús de la càmera permet a les aplicacions capturar fotografies i vídeo. " + "Inhabilitar la càmera pot causar que algunes aplicacions no funcionin " +@@ -527,9 +653,11 @@ msgstr "Protegiu les vostres imatges" + #: panels/camera/gnome-camera-panel.desktop.in.in:20 + #: panels/microphone/gnome-microphone-panel.desktop.in.in:20 + msgid "" +-"screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;network;identity;" ++"screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;" ++"network;identity;" + msgstr "" +-"pantalla;bloca;diagnòstics;fallades;privat;recent;temporal;tmp;índex;nom;xarxa;identitat;" ++"pantalla;bloca;diagnòstics;fallades;privat;recent;temporal;tmp;índex;nom;" ++"xarxa;identitat;" + + #. TRANSLATORS: The user has to attach the sensor to the screen + #: panels/color/cc-color-calibrate.c:347 +@@ -839,8 +967,8 @@ msgstr "Tipus de pantalla" + + #: panels/color/cc-color-panel.ui:241 + msgid "" +-"Select a display target white point. Most displays should be calibrated to a" +-" D65 illuminant." ++"Select a display target white point. Most displays should be calibrated to a " ++"D65 illuminant." + msgstr "" + "Seleccioneu un punt blanc objectiu de la pantalla. La majoria de pantalles " + "s'haurien de calibrar amb una il·luminació D65." +@@ -907,13 +1035,13 @@ msgstr "Requereix connexió a Internet" + + #: panels/color/cc-color-panel.ui:591 + msgid "" +-"You may find these instructions on how to use the profile on GNU/Linux, Apple OS X and Microsoft Windows systems useful." ++"You may find these instructions on how to use the profile on GNU/Linux, Apple OS X and Microsoft Windows systems useful." + msgstr "" + "Podeu trobar les instruccions de com utilitzar el perfil als sistemes GNU/Linux, Apple OS X i Microsoft Windows." ++"href=\"linux\">GNU/Linux, Apple OS X i Microsoft Windows." + + #: panels/color/cc-color-panel.ui:607 + msgid "Summary" +@@ -939,8 +1067,8 @@ msgid "" + "Problems detected. The profile may not work correctly. Show " + "details." + msgstr "" +-"S'han detectat problemes. Aquest perfil no funcionarà correctament. Mostra els detalls." ++"S'han detectat problemes. Aquest perfil no funcionarà correctament. Mostra els detalls." + + #: panels/color/cc-color-panel.ui:788 + msgid "Each device needs an up to date color profile to be color managed." +@@ -1154,8 +1282,8 @@ msgstr "Dades de calibratge de fàbrica proporcionades pel venedor" + #: panels/color/cc-color-profile.c:197 + msgid "Full-screen display correction not possible with this profile" + msgstr "" +-"Amb aquest perfil no es pot fer la correcció de la pantalla en mode pantalla" +-" completa" ++"Amb aquest perfil no es pot fer la correcció de la pantalla en mode pantalla " ++"completa" + + #: panels/color/cc-color-profile.c:219 + msgid "This profile may no longer be accurate" +@@ -1577,9 +1705,11 @@ msgstr "Informeu de problemes" + #: panels/lock/gnome-lock-panel.desktop.in.in:20 + #: panels/usage/gnome-usage-panel.desktop.in.in:20 + msgid "" +-"screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;network;identity;privacy;" ++"screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;" ++"network;identity;privacy;" + msgstr "" +-"pantalla;bloca;diagnòstics;fallades;privat;recent;temporal;tmp;índex;nom;xarxa;identitat;privadesa;privacitat;" ++"pantalla;bloca;diagnòstics;fallades;privat;recent;temporal;tmp;índex;nom;" ++"xarxa;identitat;privadesa;privacitat;" + + #: panels/display/cc-display-panel.c:1014 + #: panels/network/connection-editor/connection-editor.ui:27 +@@ -1793,10 +1923,11 @@ msgstr "Trieu com utilitzar els monitors i projectors connectats" + #. 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;" ++"Panel;Projector;xrandr;Screen;Resolution;Refresh;Monitor;Night;Light;Blue;" ++"redshift;color;sunset;sunrise;" + msgstr "" +-"Quadre;Projector;xrandr;Pantalla;Resolució;Refresca;Monitor;Nit;Llum;Blau;color;posta" +-" de sol;" ++"Quadre;Projector;xrandr;Pantalla;Resolució;Refresca;Monitor;Nit;Llum;Blau;" ++"color;posta de sol;" + + #: panels/info-overview/cc-info-overview-panel.c:417 + #: panels/info-overview/cc-info-overview-panel.c:432 +@@ -1902,8 +2033,8 @@ msgid "" + "The device name is used to identify this device when it is viewed over the " + "network, or when pairing Bluetooth devices." + msgstr "" +-"El nom del dispositiu s'utilitza per a identificar aquest dispositiu quan es" +-" visualitza en xarxa, o quan s'emparella amb dispositius Bluetooth." ++"El nom del dispositiu s'utilitza per a identificar aquest dispositiu quan es " ++"visualitza en xarxa, o quan s'emparella amb dispositius Bluetooth." + + #: panels/info-overview/cc-info-overview-panel.ui:234 + msgid "_Rename" +@@ -1924,11 +2055,12 @@ msgstr "Visualitzeu informació sobre el sistema" + #. sure that you use the same "translation" for those keywords + #: panels/info-overview/gnome-info-overview-panel.desktop.in.in:23 + msgid "" +-"device;system;information;hostname;memory;processor;version;default;application;preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;" ++"device;system;information;hostname;memory;processor;version;default;" ++"application;preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;" + msgstr "" + "dispositiu;sistema;informació;amfitrió;memòria;processador;versió;per " +-"defecte;aplicació;preferit;cd;dvd;usb;àudio;vídeo;disc;extraïble;multimèdia;execució" +-" automàtica;" ++"defecte;aplicació;preferit;cd;dvd;usb;àudio;vídeo;disc;extraïble;multimèdia;" ++"execució automàtica;" + + #: panels/keyboard/00-multimedia.xml.in:2 + msgid "Sound and Media" +@@ -2335,8 +2467,7 @@ msgstr "No s'ha trobat la tecla de drecera" + + #: panels/keyboard/cc-keyboard-shortcut-editor.c:391 + #, c-format +-msgid "" +-"%s is already being used for %s. If you replace it, %s will be disabled" ++msgid "%s is already being used for %s. If you replace it, %s will be disabled" + msgstr "%s ja s'utilitza per %s. Si la reemplaceu, %s s'inhabilitarà" + + #: panels/keyboard/cc-keyboard-shortcut-editor.c:535 +@@ -2418,8 +2549,8 @@ msgstr "" + msgid "" + "Shortcut;Workspace;Window;Resize;Zoom;Contrast;Input;Source;Lock;Volume;" + msgstr "" +-"Drecera;Espai de treball;Finestra;Canvia la " +-"mida;Amplia;Contrast;Entrada;Font;Bloqueig;Volum;" ++"Drecera;Espai de treball;Finestra;Canvia la mida;Amplia;Contrast;Entrada;" ++"Font;Bloqueig;Volum;" + + #: panels/location/cc-location-panel.ui:31 + msgid "Location services turned off" +@@ -2439,12 +2570,11 @@ msgstr "" + + #: panels/location/cc-location-panel.ui:81 + msgid "" +-"Uses Mozilla Location Service: Privacy Policy" ++"Uses Mozilla Location Service: Privacy Policy" + msgstr "" +-"Utilitza el servei d'ubicació de Mozilla: Política de " +-"privacitat" ++"Utilitza el servei d'ubicació de Mozilla: Política de privacitat" + + #: panels/location/cc-location-panel.ui:93 + msgid "Allow the applications below to determine your location." +@@ -2461,8 +2591,8 @@ msgstr "Protegiu la vostra informació d'ubicació" + #. FIXME + #: panels/lock/cc-lock-panel.ui:27 + msgid "" +-"Automatically locking the screen prevents others from accessing the computer" +-" while you're away." ++"Automatically locking the screen prevents others from accessing the computer " ++"while you're away." + msgstr "" + "Blocar la pantalla automàticament evita que altres puguin accedir a " + "l'ordinador mentre no hi sou." +@@ -2473,8 +2603,7 @@ msgstr "Retard per a posar la pantalla en blanc" + + #: panels/lock/cc-lock-panel.ui:45 + msgid "Period of inactivity after which the screen will go blank." +-msgstr "" +-"Període d'inactivitat després del qual la pantalla es posarà en blanc." ++msgstr "Període d'inactivitat després del qual la pantalla es posarà en blanc." + + #: panels/lock/cc-lock-panel.ui:65 + msgid "Automatic Screen _Lock" +@@ -2485,8 +2614,7 @@ msgid "Automatic _Screen Lock Delay" + msgstr "_Retard per a blocar la pantalla automàticament" + + #: panels/lock/cc-lock-panel.ui:83 +-msgid "" +-"Period after the screen blanks when the screen is automatically locked." ++msgid "Period after the screen blanks when the screen is automatically locked." + msgstr "" + "Període després del qual la pantalla es posa en blanc quan la pantalla es " + "bloca automàticament." +@@ -2661,11 +2789,6 @@ msgstr "Cap aplicació ha demanat accés al micròfon" + msgid "Protect your conversations" + msgstr "Protegiu les vostres converses" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "General" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Botó primari" +@@ -2785,8 +2908,7 @@ msgstr "Ratolí tàctil;Punter;Clic;Toc;Doble;Botó;Ratolí de bola;Desplaça;" + #: panels/network/cc-network-panel.c:661 panels/network/cc-wifi-panel.ui:307 + msgid "Oops, something has gone wrong. Please contact your software vendor." + msgstr "" +-"S'ha produït un error inesperat. Contacteu el vostre proveïdor de " +-"programari." ++"S'ha produït un error inesperat. Contacteu el vostre proveïdor de programari." + + #: panels/network/cc-network-panel.c:667 + msgid "NetworkManager needs to be running." +@@ -2834,8 +2956,7 @@ msgid "Secure network" + msgstr "Xarxa segura" + + #. TRANSLATORS: device status +-#: panels/network/cc-wifi-connection-row.ui:68 +-#: panels/network/panel-common.c:63 ++#: panels/network/cc-wifi-connection-row.ui:68 panels/network/panel-common.c:63 + msgid "Connected" + msgstr "Connectat" + +@@ -2867,8 +2988,8 @@ msgstr "Cal activar el punt d'accés Wi-Fi?" + + #: panels/network/cc-wifi-hotspot-dialog.ui:19 + msgid "" +-"Wi-Fi hotspot allows others to share your internet connection, by creating a" +-" Wi-Fi network that they can connect to. To do this, you must have an " ++"Wi-Fi hotspot allows others to share your internet connection, by creating a " ++"Wi-Fi network that they can connect to. To do this, you must have an " + "internet connection through a source other than Wi-Fi." + msgstr "" + "El punt d'accés Wi-Fi permet compatir la vostra connexió a Internet amb " +@@ -2987,8 +3108,8 @@ msgstr "Estable" + #: panels/network/connection-editor/ce-page.c:241 + msgid "" + "The MAC address entered here will be used as hardware address for the " +-"network device this connection is activated on. This feature is known as MAC" +-" cloning or spoofing. Example: 00:11:22:33:44:55" ++"network device this connection is activated on. This feature is known as MAC " ++"cloning or spoofing. Example: 00:11:22:33:44:55" + msgstr "" + "L'adreça MAC introduïda aquí s'utilitzarà com adreça de maquinari per la " + "connexió per la qual s'activi aquest dispositiu. Aquesta funcionalitat es " +@@ -3268,8 +3389,7 @@ msgstr "Connexió li_mitada: té dades limitades o pot incórrer en càrrecs" + + #: panels/network/connection-editor/details-page.ui:478 + msgid "" +-"Software updates and other large downloads will not be started " +-"automatically." ++"Software updates and other large downloads will not be started automatically." + msgstr "" + "Les actualitzacions de programari i altres baixades grans no s'iniciaran " + "automàticament." +@@ -3432,11 +3552,13 @@ msgstr "No es pot importar la connexió VPN" + #: panels/network/connection-editor/vpn-helpers.c:141 + #, c-format + msgid "" +-"The file “%s” could not be read or does not contain recognized VPN connection information\n" ++"The file “%s” could not be read or does not contain recognized VPN " ++"connection information\n" + "\n" + "Error: %s." + msgstr "" +-"No s'ha pogut llegir el fitxer «%s» o no conté informació reconeguda d'una connexió VPN\n" ++"No s'ha pogut llegir el fitxer «%s» o no conté informació reconeguda d'una " ++"connexió VPN\n" + "\n" + "Error: %s." + +@@ -3509,8 +3631,8 @@ msgstr "Controleu com us connecteu a les xarxes sense fil" + #: panels/network/gnome-wifi-panel.desktop.in.in:19 + msgid "Network;Wireless;Wi-Fi;Wifi;IP;LAN;Broadband;DNS;Hotspot;" + msgstr "" +-"Xarxa;Sense fil;Wi-Fi;Wifi;IP;LAN;Servidor intermediari;WAN;Banda " +-"ampla;DNS;punt d'accés Wi-Fi;" ++"Xarxa;Sense fil;Wi-Fi;Wifi;IP;LAN;Servidor intermediari;WAN;Banda ampla;DNS;" ++"punt d'accés Wi-Fi;" + + #: panels/network/net-device-ethernet.c:95 + msgid "never" +@@ -3533,8 +3655,7 @@ msgstr "Utilitzada per últim cop" + #. * profile. It is also used to display ethernet in the + #. * device list. + #: panels/network/net-device-ethernet.c:261 +-#: panels/network/network-bluetooth.ui:38 +-#: panels/network/network-ethernet.ui:18 ++#: panels/network/network-bluetooth.ui:38 panels/network/network-ethernet.ui:18 + msgid "Wired" + msgstr "Amb fil" + +@@ -4160,11 +4281,15 @@ msgstr "Les claus privades sense xifrar no són segures" + + #: panels/network/wireless-security/eap-method-tls.c:275 + msgid "" +-"The selected private key does not appear to be protected by a password. This could allow your security credentials to be compromised. Please select a password-protected private key.\n" ++"The selected private key does not appear to be protected by a password. This " ++"could allow your security credentials to be compromised. Please select a " ++"password-protected private key.\n" + "\n" + "(You can password-protect your private key with openssl)" + msgstr "" +-"La clau privada que heu seleccionat no sembla protegida amb una contrasenya. Això podria permetre que les credencials de seguretat fossin compromeses. Seleccioneu una clau privada protegida per contrasenya.\n" ++"La clau privada que heu seleccionat no sembla protegida amb una contrasenya. " ++"Això podria permetre que les credencials de seguretat fossin compromeses. " ++"Seleccioneu una clau privada protegida per contrasenya.\n" + "\n" + "(Podeu protegir la vostra clau privada amb una contrasenya amb l'openssl)" + +@@ -4341,14 +4466,13 @@ msgid "" + "invalid wpa-psk: invalid key-length %zu. Must be [8,63] bytes or 64 hex " + "digits" + msgstr "" +-"wpa-psk no vàlid: longitud de clau %zu no vàlida. Ha de tenir [8,63] bytes o" +-" 64 dígits hexadecimals" ++"wpa-psk no vàlid: longitud de clau %zu no vàlida. Ha de tenir [8,63] bytes o " ++"64 dígits hexadecimals" + + #: panels/network/wireless-security/ws-wpa-psk.c:86 + msgid "invalid wpa-psk: cannot interpret key with 64 bytes as hex" + msgstr "" +-"wpa-psk no vàlid: no es pot interpretar la clau de 64 bytes com a " +-"hexadecimal" ++"wpa-psk no vàlid: no es pot interpretar la clau de 64 bytes com a hexadecimal" + + #. This is the per application switch for message tray usage. + #: panels/notifications/cc-app-notifications-dialog.ui:60 +@@ -4458,10 +4582,11 @@ msgstr "Connecteu-vos als comptes en línia i decidiu quin ús en voleu fer" + #. http://en.wikipedia.org/wiki/Pocket_(application) + #: 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;" ++"Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;" ++"Kerberos;IMAP;SMTP;Pocket;ReadItLater;" + msgstr "" +-"Google;Facebook;Twitter;Yahoo;Web;En " +-"línia;Xat;Calendari;Correu;Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;" ++"Google;Facebook;Twitter;Yahoo;Web;En línia;Xat;Calendari;Correu;Contacte;" ++"ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;" + + #. Translators: This is the button which allows undoing the removal of the + #. printer. +@@ -4476,8 +4601,8 @@ msgstr "Connecteu-vos a les vostres dades al núvol" + #: panels/online-accounts/online-accounts.ui:109 + msgid "No internet connection — connect to set up new online accounts" + msgstr "" +-"No hi ha connexió a Internet. Connecteu-vos per a configurar nous comptes en" +-" línia" ++"No hi ha connexió a Internet. Connecteu-vos per a configurar nous comptes en " ++"línia" + + #: panels/online-accounts/online-accounts.ui:134 + msgid "Add an account" +@@ -4779,8 +4904,8 @@ msgstr "Banda ampla _mòbil" + #: panels/power/cc-power-panel.ui:621 + msgid "Mobile broadband (LTE, 4G, 3G, etc.) can be turned off to save power." + msgstr "" +-"La banda ampla mòbil (LTE, 4G, 3G, etc.) pot ser desactivada per a estalviar" +-" energia." ++"La banda ampla mòbil (LTE, 4G, 3G, etc.) pot ser desactivada per a estalviar " ++"energia." + + #: panels/power/cc-power-panel.ui:671 + msgid "_Bluetooth" +@@ -4867,11 +4992,11 @@ msgstr "" + #. 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;Energy;" ++"Power;Sleep;Suspend;Hibernate;Battery;Brightness;Dim;Blank;Monitor;DPMS;Idle;" ++"Energy;" + msgstr "" +-"Energia;Baix consum;Aturada " +-"temporal;Hibernació;Bateria;Brillantor;Atenuar;En " +-"blanc;Monitor;DPMS;Inactiu;Energia;" ++"Energia;Baix consum;Aturada temporal;Hibernació;Bateria;Brillantor;Atenuar;" ++"En blanc;Monitor;DPMS;Inactiu;Energia;" + + #: panels/printers/authentication-dialog.ui:11 + msgid " " +@@ -4954,8 +5079,8 @@ msgstr "Introduïu una adreça de xarxa o cerqueu una impressora" + #: panels/printers/new-printer-dialog.ui:356 + msgid "Enter username and password to view printers on Print Server." + msgstr "" +-"Introduïu el nom d'usuari i la contrasenya per a visualitzar les impressores" +-" al servidor d'impressió." ++"Introduïu el nom d'usuari i la contrasenya per a visualitzar les impressores " ++"al servidor d'impressió." + + #. Translators: This is the title of the dialog. %s is the printer name. + #: panels/printers/pp-details-dialog.c:74 +@@ -4974,14 +5099,13 @@ msgstr "Selecció d'un fitxer PPD" + + #: panels/printers/pp-details-dialog.c:261 + msgid "" +-"PostScript Printer Description files (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, " +-"*.PPD.GZ)" ++"PostScript Printer Description files (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *." ++"PPD.GZ)" + msgstr "" +-"Fitxers de descripció d'impressora PostScript (*.ppd, *.PPD, *.ppd.gz, " +-"*.PPD.gz, *.PPD.GZ)" ++"Fitxers de descripció d'impressora PostScript (*.ppd, *.PPD, *.ppd.gz, *.PPD." ++"gz, *.PPD.GZ)" + +-#: panels/printers/pp-details-dialog.ui:68 +-#: panels/printers/printer-entry.ui:223 ++#: panels/printers/pp-details-dialog.ui:68 panels/printers/printer-entry.ui:223 + msgid "Location" + msgstr "Ubicació" + +@@ -5185,8 +5309,8 @@ msgstr "Desbloqueja %s." + #, c-format + msgid "Enter username and password to view printers on %s." + msgstr "" +-"Introduïu el nom d'usuari i la contrasenya per a visualitzar les impressores" +-" a %s." ++"Introduïu el nom d'usuari i la contrasenya per a visualitzar les impressores " ++"a %s." + + #: panels/printers/pp-new-printer-dialog.c:790 + msgid "Searching for Printers" +@@ -5822,11 +5946,11 @@ msgstr "Configura els paràmetres del suport extraïble" + #. semicolon! + #: panels/removable-media/gnome-removable-media-panel.desktop.in.in:19 + msgid "" +-"device;system;default;application;preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;" ++"device;system;default;application;preferred;cd;dvd;usb;audio;video;disc;" ++"removable;media;autorun;" + msgstr "" +-"dispositiu;sistema;informació;per " +-"defecte;aplicació;preferit;cd;dvd;usb;àudio;vídeo;disc;extraïble;multimèdia;execució" +-" automàtica;" ++"dispositiu;sistema;informació;per defecte;aplicació;preferit;cd;dvd;usb;" ++"àudio;vídeo;disc;extraïble;multimèdia;execució automàtica;" + + #: panels/search/cc-search-locations-dialog.c:636 + msgid "Select Location" +@@ -5845,8 +5969,8 @@ msgstr "Ubicacions de cerca" + #: panels/search/cc-search-locations-dialog.ui:69 + #: panels/search/cc-search-locations-dialog.ui:107 + msgid "" +-"Folders which are searched by system applications, such as Files, Photos and" +-" Videos." ++"Folders which are searched by system applications, such as Files, Photos and " ++"Videos." + msgstr "" + "Carpetes que se cerquen per les aplicacions del sistema, com Fitxers, Fotos " + "i Vídeos." +@@ -5877,8 +6001,8 @@ msgstr "Mou avall" + + #: panels/search/cc-search-panel.ui:31 + msgid "" +-"Control which search results are shown in the Activities Overview. The order" +-" of search results can also be changed by moving rows in the list." ++"Control which search results are shown in the Activities Overview. The order " ++"of search results can also be changed by moving rows in the list." + msgstr "" + "Controleu quins resultats de la cerca es mostren a la vista general " + "d'activitats. Podeu canviar l'ordre dels resultats de la cerca movent les " +@@ -5945,10 +6069,12 @@ msgstr "" + #: panels/sharing/cc-sharing-panel.c:702 + #, c-format + msgid "" +-"When remote login is enabled, remote users can connect using the Secure Shell command:\n" ++"When remote login is enabled, remote users can connect using the Secure " ++"Shell command:\n" + "%s" + msgstr "" +-"Quan l'entrada remota està habilitada, els usuaris remots poden connectar-se utilitzant l'ordre del Secure Shell:\n" ++"Quan l'entrada remota està habilitada, els usuaris remots poden connectar-se " ++"utilitzant l'ordre del Secure Shell:\n" + "%s" + + #. TRANSLATORS: %s is replaced with a link to a vnc:// URL +@@ -6058,9 +6184,11 @@ msgstr "Controleu què voleu compartir amb els altres" + #. 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;" ++"share;sharing;ssh;host;name;remote;desktop;media;audio;video;pictures;photos;" ++"movies;server;renderer;" + msgstr "" +-"comparteix;compartició;ssh;amfitrió;nom;remot;escriptori;multimèdia;àudio;vídeo;imatges;fotografies;pel·lícules;servidor;renderitzar;" ++"comparteix;compartició;ssh;amfitrió;nom;remot;escriptori;multimèdia;àudio;" ++"vídeo;imatges;fotografies;pel·lícules;servidor;renderitzar;" + + #: panels/sharing/org.gnome.controlcenter.remote-login-helper.policy.in.in:11 + msgid "Enable or disable remote login" +@@ -6179,7 +6307,8 @@ msgstr "" + msgid "" + "Card;Microphone;Volume;Fade;Balance;Bluetooth;Headset;Audio;Output;Input;" + msgstr "" +-"Targeta;Micròfon;Volum;Esvair;Balanç;Bluetooth;Auriculars;Àudio;Sortida;Entrada;" ++"Targeta;Micròfon;Volum;Esvair;Balanç;Bluetooth;Auriculars;Àudio;Sortida;" ++"Entrada;" + + #: panels/thunderbolt/cc-bolt-device-dialog.c:94 + #: panels/thunderbolt/cc-bolt-device-entry.c:125 +@@ -6298,10 +6427,12 @@ msgstr "" + #: panels/thunderbolt/cc-bolt-panel.c:468 + msgid "" + "Thunderbolt could not be detected.\n" +-"Either the system lacks Thunderbolt support, it has been disabled in the BIOS or is set to an unsupported security level in the BIOS." ++"Either the system lacks Thunderbolt support, it has been disabled in the " ++"BIOS or is set to an unsupported security level in the BIOS." + msgstr "" + "No s'ha pogut detectar Thunderbolt.\n" +-"O bé el sistema no és compatible amb Thunderbolt, s'ha inhabilitat al BIOS o està configurat amb un nivell de seguretat no compatible al BIOS." ++"O bé el sistema no és compatible amb Thunderbolt, s'ha inhabilitat al BIOS o " ++"està configurat amb un nivell de seguretat no compatible al BIOS." + + #: panels/thunderbolt/cc-bolt-panel.c:512 + msgid "Thunderbolt support has been disabled in the BIOS." +@@ -6897,13 +7028,15 @@ msgstr "Feu més fàcil veure, sentir, teclejar, apuntar i fer clic" + #. 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;Universal " +-"Access;Contrast;Cursor;Sound;Zoom;Screen;Reader;big;high;large;text;font;size;AccessX;Sticky;Keys;Slow;Bounce;Mouse;Double;click;Delay;Speed;Assist;Repeat;Blink;visual;hearing;audio;typing;" ++"Keyboard;Mouse;a11y;Accessibility;Universal Access;Contrast;Cursor;Sound;" ++"Zoom;Screen;Reader;big;high;large;text;font;size;AccessX;Sticky;Keys;Slow;" ++"Bounce;Mouse;Double;click;Delay;Speed;Assist;Repeat;Blink;visual;hearing;" ++"audio;typing;" + msgstr "" +-"Teclat;Ratolí;a11y;Accessibilitat;Accés " +-"universal;Contrast;Cursor;So;Zoom;Pantalla;Lector;gran;alt;llarg;text;lletra;mida;AccessX;Tecles" +-" " +-"enganxoses;Tecles;Lent;Salt;Ratolí;Doble;clic;Retard;Assistència;Repetició;Parpelleig;visual;escoltar;àudio;teclejar;" ++"Teclat;Ratolí;a11y;Accessibilitat;Accés universal;Contrast;Cursor;So;Zoom;" ++"Pantalla;Lector;gran;alt;llarg;text;lletra;mida;AccessX;Tecles enganxoses;" ++"Tecles;Lent;Salt;Ratolí;Doble;clic;Retard;Assistència;Repetició;Parpelleig;" ++"visual;escoltar;àudio;teclejar;" + + #: panels/usage/cc-usage-panel.c:154 + msgid "Empty all items from Trash?" +@@ -6935,8 +7068,8 @@ msgstr "Historial dels fitxers" + + #: panels/usage/cc-usage-panel.ui:41 + msgid "" +-"File history keeps a record of files that you have used. This information is" +-" shared between applications, and makes it easier to find files that you " ++"File history keeps a record of files that you have used. This information is " ++"shared between applications, and makes it easier to find files that you " + "might want to use." + msgstr "" + "L'historial dels fitxers manté un registre dels fitxers que heu utilitzat. " +@@ -7261,8 +7394,8 @@ msgid "" + "Fingerprint login allows you to unlock and log into your computer with your " + "finger" + msgstr "" +-"L'inici de sessió amb empremta dactilar permet desbloquejar i iniciar sessió" +-" a l'ordinador amb el dit" ++"L'inici de sessió amb empremta dactilar permet desbloquejar i iniciar sessió " ++"a l'ordinador amb el dit" + + #: panels/user-accounts/cc-fingerprint-dialog.ui:352 + msgid "_Delete Fingerprints" +@@ -7399,8 +7532,7 @@ msgid "" + "Repeatedly lift and place your finger on the reader to enroll your " + "fingerprint" + msgstr "" +-"Aixequeu i poseu el dit al lector per a inscriure la vostra empremta " +-"dactilar" ++"Aixequeu i poseu el dit al lector per a inscriure la vostra empremta dactilar" + + #. TRANSLATORS: This is the label for the button to enroll a new finger + #: panels/user-accounts/cc-fingerprint-dialog.c:1118 +@@ -7610,8 +7742,7 @@ msgstr "C_onserva els fitxers" + #: panels/user-accounts/cc-user-panel.c:646 + #, c-format + msgid "Are you sure you want to revoke remotely managed %s’s account?" +-msgstr "" +-"Segur que voleu revocar el compte %s de l'usuari gestionat remotament?" ++msgstr "Segur que voleu revocar el compte %s de l'usuari gestionat remotament?" + + #: panels/user-accounts/cc-user-panel.c:650 + msgid "_Delete" +@@ -7906,8 +8037,7 @@ msgstr "Combineu majúscules i minúscules i empreu un o dos nombres." + #: panels/user-accounts/pw-utils.c:132 + msgctxt "Password hint" + msgid "" +-"Adding more letters, numbers and punctuation will make the password " +-"stronger." ++"Adding more letters, numbers and punctuation will make the password stronger." + msgstr "" + "Si hi afegiu més lletres, nombres i signes de puntuació la contrasenya serà " + "més segura." +@@ -7980,8 +8110,7 @@ msgstr "El nom d'usuari és massa llarg." + #: panels/user-accounts/user-utils.c:537 + msgid "This will be used to name your home folder and can’t be changed." + msgstr "" +-"Es farà servir per a anomenar la vostra carpeta personal i no es pot " +-"canviar." ++"Es farà servir per a anomenar la vostra carpeta personal i no es pot canviar." + + #: panels/wacom/button-mapping.ui:9 + msgid "Map Buttons" +@@ -8002,8 +8131,8 @@ msgid "" + "shortcut button and hold down the new keys or press Backspace to clear." + msgstr "" + "Per a editar una drecera, feu clic a l'acció «Envia una pulsació de tecla», " +-"premeu el botó de drecera de teclat i premeu la combinació de tecles nova, o" +-" premeu la tecla de retrocés per a netejar-la." ++"premeu el botó de drecera de teclat i premeu la combinació de tecles nova, o " ++"premeu la tecla de retrocés per a netejar-la." + + #: panels/wacom/calibrator/calibrator.ui:61 + msgid "" +@@ -8274,8 +8403,8 @@ msgid "" + "issues. " + msgstr "" + "Aquesta versió del Paràmetres només s'ha d'utilitzar amb finalitats de " +-"desenvolupament. Podeu exposar-vos a un comportament incorrecte del sistema," +-" pèrdua de dades, i altres problemes inesperats. " ++"desenvolupament. Podeu exposar-vos a un comportament incorrecte del sistema, " ++"pèrdua de dades, i altres problemes inesperats. " + + #: shell/cc-window.ui:330 + msgid "Help" +@@ -8323,8 +8452,8 @@ msgstr "L'identificador de l'últim quadre de configuració a obrir" + + #: shell/org.gnome.ControlCenter.gschema.xml:6 + msgid "" +-"The identifier for the last Settings panel to be opened. Unrecognised values" +-" will be ignored and the first panel in the list selected." ++"The identifier for the last Settings panel to be opened. Unrecognised values " ++"will be ignored and the first panel in the list selected." + msgstr "" + "L'identificador de l'últim quadre de configuració a obrir. S'ignoraran els " + "valors que no siguin reconeguts i se seleccionarà el primer quadre de la " +diff --git a/po/cs.po b/po/cs.po +index 6501155ad..ccf0ad9bb 100644 +--- a/po/cs.po ++++ b/po/cs.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# cs.po.multitasking (gnome-control-center) #-#-#-#-# + # Czech translation of gnome-control-center. + # Copyright (C) 1999, 2003, 2006, 2007, 2008, 2009, 2010, 2011 the author(s) of gnome-control-center. + # Copyright (C) 2003, 2004, 2005, 2006 Miloslav Trmac . +@@ -18,9 +19,49 @@ + # Jiri Eischmann , 2013. + # František Zatloukal , 2014. + # Marek Černocký , 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021. ++# Vojtěch Perník , 2021. + # ++# #-#-#-#-# cs.po (gnome-control-center) #-#-#-#-# ++# Czech translation of gnome-control-center. ++# Copyright (C) 1999, 2003, 2006, 2007, 2008, 2009, 2010, 2011 the author(s) of gnome-control-center. ++# Copyright (C) 2003, 2004, 2005, 2006 Miloslav Trmac . ++# Copyright (C) 2006 Lukas Novotny . ++# This file is distributed under the same license as the gnome-control-center package. ++# ++# David Šauer , 1999. ++# Jiří Lebl , 2002. ++# Michal Bukovjan , 2002, 2003. ++# Miloslav Trmac , 2003, 2004, 2005, 2006. ++# Jakub Friedl , 2006, 2007. ++# Petr Tomeš , 2006. ++# Lukas Novotny , 2006. ++# Petr Kovar , 2007, 2008, 2009, 2010, 2011, 2012. ++# Andre Klapper , 2009. ++# Ondřej Kopka , 2011. ++# Adam Matoušek , 2012. ++# Jiri Eischmann , 2013. ++# František Zatloukal , 2014. ++# Marek Černocký , 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# cs.po.multitasking (gnome-control-center) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-08 08:29+0000\n" ++"PO-Revision-Date: 2021-09-08 10:36+0200\n" ++"Last-Translator: Marek Černocký \n" ++"Language-Team: Czech \n" ++"Language: cs\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" ++"X-Generator: Gtranslator 40.0\n" ++"X-Project-Style: gnome\n" ++"#-#-#-#-# cs.po (gnome-control-center) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -36,6 +77,94 @@ msgstr "" + "X-Generator: Poedit 2.3\n" + "X-Project-Style: gnome\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Obecné" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "Citlivý ro_h" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Dotkněte se levého horního roku a otevře se přehled Činností." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Aktivní okraje obrazovky" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Přetažením okna k horní, levé nebo pravé hraně obrazovky změníte jeho " ++"velikost." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Pracovní plochy" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Dynamické pracovní plochy" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Bude automaticky odebírat prázdné pracovní plochy." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Neměnný počet pracovních ploch" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Je dán počet trvalých pracovních ploch." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Počet pracovních ploch" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Více monitorů" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Pracovní plochy pouze na _hlavním displeji" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Pracovní plochy na _všech displejích" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Přepínání aplikací" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Zahrnovat aplikace ze _všech pracovních ploch" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Zahrnovat jen aplikace ze _aktuální pracovní plochy" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Multitasking" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Správa předvoleb pro produktivitu a multitasking" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"multitasking;multitask;více úkolů;více úloh;produktivita;přizpůsobit;" ++"přizpůsobení;desktop;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Systémová sběrnice" +@@ -2642,11 +2771,6 @@ msgstr "Žádná aplikace si nepožádala o přístup k mikrofonu" + msgid "Protect your conversations" + msgstr "Ochránit své konverzace" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Obecné" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Hlavní tlačítko" +@@ -8310,4 +8434,3 @@ msgstr[2] "%u vstupů" + #: subprojects/gvc/gvc-mixer-control.c:2867 + msgid "System Sounds" + msgstr "Systémové zvuky" +- +diff --git a/po/da.po b/po/da.po +index 8278336a1..07f7d6509 100644 +--- a/po/da.po ++++ b/po/da.po +@@ -1,3 +1,37 @@ ++# #-#-#-#-# da.po.multitasking (gnome-control-center) #-#-#-#-# ++# Danish translation of the Gnome Control Center. ++# Copyright (C) 1998-2018 ++# This file is distributed under the same license as the gnome-control-center package. ++# Kenneth Christiansen , 1998-2000. ++# Birger Langkjer . ++# Keld Simonsen , 2000. ++# Ole Laursen , 2001, 02, 03, 04, 06. ++# Martin Willemoes Hansen , 2004, 05. ++# Lasse Bang Mikkelsen , 2006. ++# flemming christensen , 2011. ++# Kris Thomsen , 2014. ++# Ask Hjorth Larsen , 2007, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18. ++# scootergrisen, 2015-2016, 2019-2020. ++# Alan Mortensen , 2019-21. ++# ++# Konventioner: ++# ++# detach -> frigøre ++# display -> skærm (fysisk) ++# -> skærmvisning (logisk, når der skal skelnes; ellers skærm) ++# extension -> endelse (det refererer nemlig som regel til f.eks. '.html') ++# GL -> 3d ++# help browser -> hjælpefremviser ++# properties -> indstillinger ++# torn off -> frigøre ++# typing break -> tastepause ++# toggle key -> skiftetast ++# modifier key -> modifikationstast ++# universal access -> tilgængelighed (med mindre nogen kan finde grund til at der bør skelnes) ++# ++# Vær opmærksom på at ordet key bruges både i betydningen nøgle og (genvejs)tast ++# ++# #-#-#-#-# da.po (gnome-control-center) #-#-#-#-# + # Danish translation of the Gnome Control Center. + # Copyright (C) 1998-2018 + # This file is distributed under the same license as the gnome-control-center package. +@@ -30,8 +64,24 @@ + # + # Vær opmærksom på at ordet key bruges både i betydningen nøgle og (genvejs)tast + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# da.po.multitasking (gnome-control-center) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-08 08:29+0000\n" ++"PO-Revision-Date: 2021-09-13 20:12+0200\n" ++"Last-Translator: Alan Mortensen \n" ++"Language-Team: Danish \n" ++"Language: da\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.3\n" ++"#-#-#-#-# da.po (gnome-control-center) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -45,6 +95,92 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Generelt" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "Aktivt _hjørne" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Berør det øverste venstre hjørne for at åbne aktivitetsoversigten." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Aktive skærmkanter" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Træk vinduer til øverste, venstre eller højre skærmkanter for at ændre deres " ++"størrelse." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Arbejdsområder" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Dynamiske arbejdsområder" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Fjerner automatisk tomme arbejdsområder." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Fast antal arbejdsområder" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Angiv et antal permanente arbejdsområder." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Antal arbejdsområder" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Flere skærme" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Arbejdsområder kun på den _primære skærm" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Arbejdsområder _på alle skærme" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Skift mellem programmer" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "_Medtag programmer fra alle arbejdsområder" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Medtag _kun programmer fra aktuelle arbejdsområde" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Multitasking" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Håndtér indstillinger for produktivitet og multitasking" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Multitasking;Multitaske;Produktivitet;Tilpas;Skrivebord;" ++ + #: panels/applications/cc-applications-panel.c:815 + msgid "System Bus" + msgstr "Systembus" +@@ -2549,11 +2685,6 @@ msgstr "Ingen programmer har spurgt om adgang til mikrofon" + msgid "Protect your conversations" + msgstr "Beskyt dine samtaler" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Generelt" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Primær knap" +diff --git a/po/de.po b/po/de.po +index 8f23a5242..6a885be3c 100644 +--- a/po/de.po ++++ b/po/de.po +@@ -24,8 +24,24 @@ + # Tim Sabsch , 2019-2021. + # Philipp Kiemle , 2020-2021. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# de.po.multitasking (gnome-control-center master) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-18 09:55+0000\n" ++"PO-Revision-Date: 2021-09-21 22:08+0200\n" ++"Last-Translator: Philipp Kiemle \n" ++"Language-Team: German \n" ++"Language: de\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 3.0\n" ++"#-#-#-#-# de.po (gnome-control-center master) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -40,6 +56,94 @@ msgstr "" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Poedit 2.4.2\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Allgemein" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "Funktionale _Ecke" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Die obere linke Ecke berühren, um die Aktivitäten-Übersicht zu öffnen." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "Aktive Bildschirmkanten" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Fenster an den oberen, linken und rechten Bildschirmrand ziehen, um dessen " ++"Größe anzupassen." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Arbeitsflächen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Dynamische Arbeitsflächen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Entfernt leere Arbeitsflächen automatisch." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Feste Anzahl an Arbeitsflächen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Anzahl an permanenten Arbeitsflächen angeben." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "An_zahl der Arbeitsflächen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Mehrere Bildschirme" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Arbeitsflächen nur auf dem _primären Bildschirm" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Arbeitsflächen auf _allen Bildschirmen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Anwendungen wechseln" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Anwendungen von allen A_rbeitsflächen anzeigen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Anwendungen nur von der a_ktuellen Arbeitsfläche anzeigen" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Multitasking" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Einstellungen für Produktivität und Multitasking verwalten" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"Multitasking;Multitask;Productivity;Produktivität;Customize;Bearbeiten;" ++"Desktop;Arbeitsumgebung;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "System-Bus" +@@ -2667,11 +2771,6 @@ msgstr "Es hat keine Anwendung um Mikrofonzugriff gebeten" + msgid "Protect your conversations" + msgstr "Ihre Unterhaltungen schützen" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Allgemein" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Primäre Taste" +diff --git a/po/es.po b/po/es.po +index 6a0f7b997..f2da3977a 100644 +--- a/po/es.po ++++ b/po/es.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# es.po.multitasking (gnome-control-center master) #-#-#-#-# + # translation of gnome-control-center.master.po to Español + # Copyright © 1999-2002, 2006, 2007, 2008 Free Software Foundation, Inc. + # This file is distributed under the same license as the gnome-control-center package. +@@ -14,9 +15,44 @@ + # + # Jorge González , 2007, 2008, 2009, 2010, 2011. + # Daniel Mustieles , 2010-2021. ++# Daniel Mustieles García , 2021. + # ++# #-#-#-#-# es.po (gnome-control-center master) #-#-#-#-# ++# translation of gnome-control-center.master.po to Español ++# Copyright © 1999-2002, 2006, 2007, 2008 Free Software Foundation, Inc. ++# This file is distributed under the same license as the gnome-control-center package. ++# ++# Pablo Saratxaga , 1998-2001. ++# Carlos Perelló Marín , 2001. ++# Héctor García Álvarez , 2001. ++# Germán Poo Caamaño , 2002 (Revisor). ++# Lucas Di Pentima , 2002. ++# Pablo Gonzalo del Campo , 2002,2003. ++# Francisco Javier F. Serrador , 2003, 2004, 2005, 2006. ++# Claudio Saavedra , 2007. ++# ++# ++# Jorge González , 2007, 2008, 2009, 2010, 2011. ++# Daniel Mustieles , 2010-2021. ++# ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# es.po.multitasking (gnome-control-center master) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-08 16:00+0000\n" ++"PO-Revision-Date: 2021-09-14 13:59+0200\n" ++"Last-Translator: Daniel Mustieles García \n" ++"Language-Team: Spanish - Spain \n" ++"Language: es_ES\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: Gtranslator 40.0\n" ++"#-#-#-#-# es.po (gnome-control-center master) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -31,6 +67,92 @@ msgstr "" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Gtranslator 3.38.0\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "General" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Esquina activa" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Toque la esquina superior izquierda para abrir la vista de Actividades" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Activar bordes de la pantalla" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Arrastre ventanas a los bordes superior, izquierdo y derecho para " ++"redimensionarlas." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Áreas de trabajo" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "Áreas de trabajo _dinámicas" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Quita las áreas de trabajo vacías automáticamente" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "Número _fijo de áreas de trabajo" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Especifique un número de áreas de trabajo permanentes." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Número de áreas de trabajo" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Multi-pantalla" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Áreas de trabajo sólo en la pantalla _primaria" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Áreas de trabajo en todas las pa_ntallas" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Cambio de aplicaciones" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Incluir aplicaciones de todas las áreas de trabajo" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Incluir aplicaciones sólo del área de trabajo a_ctual" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Multitarea" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Gestionar las preferencias para productividad y multitarea" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "multitarea;productividad;personalizar;escritorio;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Bus del sistema" +@@ -2640,11 +2762,6 @@ msgstr "Ninguna aplicación ha solicitado acceso al micrófono" + msgid "Protect your conversations" + msgstr "Proteger sus conversaciones" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "General" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Botón primario" +diff --git a/po/eu.po b/po/eu.po +index 1e8ded63c..fc6a0792e 100644 +--- a/po/eu.po ++++ b/po/eu.po +@@ -7,9 +7,26 @@ + # Iñaki Larrañaga Murgoitio , 2011, 2012, 2013, 2014, 2015, 2016, 2017. + # Asier Sarasua Garmendia , 2013, 2019, 2020, 2021. + # ++#, fuzzy + msgid "" +-msgstr "Project-Id-Version: gnome-control-center master\n" +-"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/issues\n" ++msgstr "" ++"#-#-#-#-# eu.po.multitasking (gnome-control-center master) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-08 08:29+0000\n" ++"PO-Revision-Date: 2021-09-08 14:00+0100\n" ++"Last-Translator: Asier Sarasua Garmendia \n" ++"Language-Team: Basque \n" ++"Language: eu\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" ++"#-#-#-#-# eu.po (gnome-control-center master) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" + "POT-Creation-Date: 2021-02-17 19:12+0000\n" + "PO-Revision-Date: 2021-02-20 06:00+0100\n" + "Last-Translator: Asier Sarasua Garmendia \n" +@@ -20,6 +37,92 @@ msgstr "Project-Id-Version: gnome-control-center master\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Orokorra" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "Izkina _beroa" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Ukitu goiko ezkerreko izkina jardueren ikuspegi orokorra irekitzeko." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "Pantailaren ertz _aktiboak" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Arrastatu leihoak pantailaren goiko, ezkerreko eta eskuineko ertzetara haien " ++"tamaina aldatzeko." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Laneko areak" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "Laneko area _dinamikoak" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Laneko area hutsak automatikoki kentzen ditu." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "Laneko areen kopuru _finkoa" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Zehaztu laneko area iraunkorren kopuru bat." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "Laneko areen _kopurua" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Monitore anitz" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Laneko areak monitore _nagusian soilik" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Laneko areak pantaila _guztietan" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Aplikazioen txandakatzea" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Sartu _laneko area guztietako aplikazioak" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Sartu _uneko laneko areako aplikazioak soilik" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Aldi bereko zereginak" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Kudeatu hobespenak produktibitaterako eta aldi bereko zereginetarako" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Aldi bereko zereginak;Produktibitatea:Pertsonalizazioa;Mahaigaina;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Sistemaren bus-a" +@@ -87,7 +190,10 @@ msgstr "Ezarpenak aldatu ditzake" + msgid "" + "%s has the following permissions built-in. These cannot be altered. If you " + "are concerned about these permissions, consider removing this application." +-msgstr "%s aplikazioak honako baimenak ditu integratuta. Baimen horiek ezin dira aldatu. Baimen horien inguruko kezkaren bat baduzu, beharbada aplikazio hori kendu beharko zenuke." ++msgstr "" ++"%s aplikazioak honako baimenak ditu integratuta. Baimen horiek ezin dira " ++"aldatu. Baimen horien inguruko kezkaren bat baduzu, beharbada aplikazio hori " ++"kendu beharko zenuke." + + #: panels/applications/cc-applications-panel.c:1024 + msgid "Web Links" +@@ -171,7 +277,9 @@ msgstr "Baimenak eta sarbidea" + msgid "" + "Data and services that this app has asked for access to and permissions that " + "it requires." +-msgstr "Aplikazio honek atzitu nahi dituen datuak eta zerbitzuak eta horrek behar dituen baimenak." ++msgstr "" ++"Aplikazio honek atzitu nahi dituen datuak eta zerbitzuak eta horrek behar " ++"dituen baimenak." + + #: panels/applications/cc-applications-panel.ui:121 + #: panels/applications/cc-applications-panel.ui:127 +@@ -224,7 +332,9 @@ msgstr "Ezin dira aldatu" + msgid "" + "Individual permissions for applications can be reviewed in the Privacy Settings." +-msgstr "Aplikazioen banakako baimenak Pribatutasuna ezarpenetan berrikusi daitezke." ++msgstr "" ++"Aplikazioen banakako baimenak Pribatutasuna " ++"ezarpenetan berrikusi daitezke." + + #: panels/applications/cc-applications-panel.ui:199 + msgid "Integration" +@@ -305,7 +415,8 @@ msgstr "Saiatu bestelako bilaketa" + #: panels/applications/cc-applications-panel.ui:552 + msgid "" + "How much disk space this application is occupying with app data and caches." +-msgstr "Diskoko zenbat espazio betetzen ari den aplikazio hau datuekin eta cacheekin." ++msgstr "" ++"Diskoko zenbat espazio betetzen ari den aplikazio hau datuekin eta cacheekin." + + #: panels/applications/cc-applications-panel.ui:561 + msgid "Application" +@@ -481,7 +592,10 @@ msgstr "Aplikazioek ezin dituzte argazkiak edo bideoa kapturatu." + msgid "" + "Use of the camera allows applications to capture photos and video. Disabling " + "the camera may cause some applications to not function properly." +-msgstr "Kamera erabilita, aplikazioek argazkiak eta bideoak kaptura ditzakete. Kamera desgaitzen bada, beharbada zenbait aplikaziok ez dute behar den moduan funtzionatuko." ++msgstr "" ++"Kamera erabilita, aplikazioek argazkiak eta bideoak kaptura ditzakete. " ++"Kamera desgaitzen bada, beharbada zenbait aplikaziok ez dute behar den " ++"moduan funtzionatuko." + + #: panels/camera/cc-camera-panel.ui:85 + msgid "Allow the applications below to use your camera." +@@ -502,12 +616,16 @@ msgstr "Babestu zure irudiak" + msgid "" + "screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;" + "network;identity;" +-msgstr "pantaila;blokeoa;diagnostikoa;kraskadura;pribatua;azkena;aldi baterako;tmp;izena;sarea;identitatea;" ++msgstr "" ++"pantaila;blokeoa;diagnostikoa;kraskadura;pribatua;azkena;aldi baterako;tmp;" ++"izena;sarea;identitatea;" + + #. TRANSLATORS: The user has to attach the sensor to the screen + #: panels/color/cc-color-calibrate.c:347 + msgid "Place your calibration device over the square and press “Start”" +-msgstr "Jarri kalibrazioaren gailua karratuaren gainean eta egin klik \"Hasi\" botoian" ++msgstr "" ++"Jarri kalibrazioaren gailua karratuaren gainean eta egin klik \"Hasi\" " ++"botoian" + + #. TRANSLATORS: Some calibration devices need the user to move a + #. * dial or switch manually. We also show a picture showing them +@@ -515,7 +633,9 @@ msgstr "Jarri kalibrazioaren gailua karratuaren gainean eta egin klik \"Hasi\" b + #: panels/color/cc-color-calibrate.c:353 + msgid "" + "Move your calibration device to the calibrate position and press “Continue”" +-msgstr "Mugitu kalibrazioaren gailua posizioa kalibratzeko eta egin klik \"Jarraitu\" botoian" ++msgstr "" ++"Mugitu kalibrazioaren gailua posizioa kalibratzeko eta egin klik \"Jarraitu" ++"\" botoian" + + #. TRANSLATORS: Some calibration devices need the user to move a + #. * dial or switch manually. We also show a picture showing them +@@ -523,7 +643,9 @@ msgstr "Mugitu kalibrazioaren gailua posizioa kalibratzeko eta egin klik \"Jarr + #: panels/color/cc-color-calibrate.c:359 + msgid "" + "Move your calibration device to the surface position and press “Continue”" +-msgstr "Mugitu kalibrazioaren gailua gainazalaren posiziora eta egin klik \"Jarraitu\" botoian" ++msgstr "" ++"Mugitu kalibrazioaren gailua gainazalaren posiziora eta egin klik \"Jarraitu" ++"\" botoian" + + #. TRANSLATORS: on some hardware e.g. Lenovo W700 the sensor + #. * is built into the palmrest and we need to fullscreen the +@@ -720,7 +842,8 @@ msgstr "Berrabiarazi ordenagailu hau eta abiatu sistema eragile arrunta." + + #: panels/color/cc-color-panel.c:855 + msgid "Type the URL into your browser to download and install the profile." +-msgstr "Idatzi URLa zure web arakatzailean profila deskargatzeko eta instalatzeko" ++msgstr "" ++"Idatzi URLa zure web arakatzailean profila deskargatzeko eta instalatzeko" + + #. TRANSLATORS: this is the dialog to save the ICC profile + #: panels/color/cc-color-panel.c:883 +@@ -742,7 +865,9 @@ msgstr "Sortu kolore-profil bat hautatutako gailuarentzako" + msgid "" + "The measuring instrument is not detected. Please check it is turned on and " + "correctly connected." +-msgstr "Ez da neurgailurik detektatu. Ziurtatu zaitez piztuta eta ongi konektatuta dagoela." ++msgstr "" ++"Ez da neurgailurik detektatu. Ziurtatu zaitez piztuta eta ongi konektatuta " ++"dagoela." + + #. TRANSLATORS: this is when the button is insensitive + #: panels/color/cc-color-panel.c:1245 +@@ -763,7 +888,10 @@ msgid "" + "Calibration will produce a profile that you can use to color manage your " + "screen. The longer you spend on calibration, the better the quality of the " + "color profile." +-msgstr "Kalibrazioak profil bat sortuko du pantailaren kolorea kudeatzeko. Kalibrazioa zenbat eta sakonagoa izan, kolore-profilaren kalitatea hobea izango da." ++msgstr "" ++"Kalibrazioak profil bat sortuko du pantailaren kolorea kudeatzeko. " ++"Kalibrazioa zenbat eta sakonagoa izan, kolore-profilaren kalitatea hobea " ++"izango da." + + #: panels/color/cc-color-panel.ui:38 + msgid "" +@@ -804,7 +932,9 @@ msgstr "Pantaila mota" + msgid "" + "Select a display target white point. Most displays should be calibrated to a " + "D65 illuminant." +-msgstr "Hautatu helburuko pantailaren puntu zuria. Pantaila gehienak D65 argitasunera doitu beharko lirateke." ++msgstr "" ++"Hautatu helburuko pantailaren puntu zuria. Pantaila gehienak D65 " ++"argitasunera doitu beharko lirateke." + + #: panels/color/cc-color-panel.ui:278 + msgid "Profile Whitepoint" +@@ -814,13 +944,17 @@ msgstr "Profilaren puntu zuria" + msgid "" + "Please set the display to a brightness that is typical for you. Color " + "management will be most accurate at this brightness level." +-msgstr "Ezarri pantailan zuretzako ohikoa den distira. Kolorearen kudeaketa zehatzagoa izango da distiraren maila horretan." ++msgstr "" ++"Ezarri pantailan zuretzako ohikoa den distira. Kolorearen kudeaketa " ++"zehatzagoa izango da distiraren maila horretan." + + #: panels/color/cc-color-panel.ui:307 + msgid "" + "Alternatively, you can use the brightness level used with one of the other " + "profiles for this device." +-msgstr "Bestela, gailu honen beste profiletariko batekin erabilitako distiraren maila erabil dezakezu" ++msgstr "" ++"Bestela, gailu honen beste profiletariko batekin erabilitako distiraren " ++"maila erabil dezakezu" + + #: panels/color/cc-color-panel.ui:318 + msgid "Display Brightness" +@@ -830,7 +964,9 @@ msgstr "Pantailaren distira" + msgid "" + "You can use a color profile on different computers, or even create profiles " + "for different lighting conditions." +-msgstr "KOlore-profila bat erabil dezakezu ordenagailu desberdinetan, edo argitasun baldintza desberdinetarako profilak sor ditzakezu baita ere." ++msgstr "" ++"KOlore-profila bat erabil dezakezu ordenagailu desberdinetan, edo argitasun " ++"baldintza desberdinetarako profilak sor ditzakezu baita ere." + + #: panels/color/cc-color-panel.ui:348 + msgid "Profile Name:" +@@ -865,7 +1001,11 @@ msgid "" + "You may find these instructions on how to use the profile on GNU/Linux, Apple OS X and Microsoft Windows systems useful." +-msgstr "You may find these instructions on how to use the profile on Profila GNU/Linux, Apple OS X eta Microsoft Windows sistemetan nola erabil daitekeen buruzko informazioa lagungarri gerta dakizuke." ++msgstr "" ++"You may find these instructions on how to use the profile on Profila GNU/Linux, Apple OS X eta Microsoft Windows sistemetan nola erabil daitekeen buruzko " ++"informazioa lagungarri gerta dakizuke." + + #: panels/color/cc-color-panel.ui:607 + msgid "Summary" +@@ -890,11 +1030,14 @@ msgstr "_Gehitu" + msgid "" + "Problems detected. The profile may not work correctly. Show " + "details." +-msgstr "Arazoak aurkitu dira. Baliteke profilak ongi ez funtzionatzea. Erakutsi xehetasunak." ++msgstr "" ++"Arazoak aurkitu dira. Baliteke profilak ongi ez funtzionatzea. Erakutsi xehetasunak." + + #: panels/color/cc-color-panel.ui:788 + msgid "Each device needs an up to date color profile to be color managed." +-msgstr "Gailu bakoitzak koloreen profilaren eguneratzea behar du koloreak kudeatzeko." ++msgstr "" ++"Gailu bakoitzak koloreen profilaren eguneratzea behar du koloreak kudeatzeko." + + #. translators: Text used in link to privacy policy + #: panels/color/cc-color-panel.ui:810 +@@ -1408,7 +1551,9 @@ msgstr "Ordu-_zona automatikoa" + + #: panels/datetime/cc-datetime-panel.ui:439 + msgid "Requires location services enabled and internet access" +-msgstr "Kokaleku-zerbitzuek gaituta egon behar dute eta Interneterako sarbide eduki behar da" ++msgstr "" ++"Kokaleku-zerbitzuek gaituta egon behar dute eta Interneterako sarbide eduki " ++"behar da" + + #: panels/datetime/cc-datetime-panel.ui:454 + msgid "Time Z_one" +@@ -1441,7 +1586,9 @@ msgstr "Aldatu sistemaren ordua eta dataren ezarpenak" + + #: panels/datetime/org.gnome.controlcenter.datetime.policy.in:12 + msgid "To change time or date settings, you need to authenticate." +-msgstr "Sistemaren ordua eta dataren ezarpenak aldatzeko, autentifikatu egin behar zara." ++msgstr "" ++"Sistemaren ordua eta dataren ezarpenak aldatzeko, autentifikatu egin behar " ++"zara." + + #: panels/default-apps/cc-default-apps-panel.ui:31 + msgid "_Web" +@@ -1487,7 +1634,9 @@ msgstr "lehenetsia;aplikazioa;hobetsia;euskarria;" + msgid "" + "Sending reports of technical problems helps us improve %s. Reports are sent " + "anonymously and are scrubbed of personal data. %s" +-msgstr "Arazo teknikoei buruzko txostenak bidaltzean %s hobetzen laguntzen diguzu. Txostenak modu anonimoan bidaltzen dira eta ez dute datu pertsonalik. %s" ++msgstr "" ++"Arazo teknikoei buruzko txostenak bidaltzean %s hobetzen laguntzen diguzu. " ++"Txostenak modu anonimoan bidaltzen dira eta ez dute datu pertsonalik. %s" + + #: panels/diagnostics/cc-diagnostics-panel.ui:28 + msgid "Problem Reporting" +@@ -1514,7 +1663,9 @@ msgstr "Eman zure arazoen berri" + msgid "" + "screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;" + "network;identity;privacy;" +-msgstr "pantaila;blokeoa;diagnostikoa;kraskadura;pribatua;azkena;aldi baterakoa;tmp;indizea;izena;sarea;identitatea;pribatutasuna;" ++msgstr "" ++"pantaila;blokeoa;diagnostikoa;kraskadura;pribatua;azkena;aldi baterakoa;tmp;" ++"indizea;izena;sarea;identitatea;pribatutasuna;" + + #: panels/display/cc-display-panel.c:1014 + #: panels/network/connection-editor/connection-editor.ui:27 +@@ -1562,7 +1713,9 @@ msgstr "Pantaila nagusia" + msgid "" + "Drag displays to match your physical display setup. Select a display to " + "change its settings." +-msgstr "Arrastatu pantailak zure pantaila fisikoaren konfigurazioarekin bat egin dezaten. Hautatu pantaila bat haren ezarpenak aldatzeko." ++msgstr "" ++"Arrastatu pantailak zure pantaila fisikoaren konfigurazioarekin bat egin " ++"dezaten. Hautatu pantaila bat haren ezarpenak aldatzeko." + + #: panels/display/cc-display-panel.ui:250 + msgid "Display Arrangement" +@@ -1657,7 +1810,9 @@ msgstr "Denbora baterako desgaituta bihar arte" + msgid "" + "Night light makes the screen color warmer. This can help to prevent eye " + "strain and sleeplessness." +-msgstr "Gaueko argiaren moduak pantailaren kolorea epeltzen du. Horrek begien estresa eta lo arazoak saihesten lagun dezake." ++msgstr "" ++"Gaueko argiaren moduak pantailaren kolorea epeltzen du. Horrek begien " ++"estresa eta lo arazoak saihesten lagun dezake." + + #: panels/display/cc-night-light-page.ui:127 + msgid "Schedule" +@@ -1724,7 +1879,9 @@ msgstr "Aldatu konektatutako pantaila eta proiektagailuak nola erabiliko diren" + msgid "" + "Panel;Projector;xrandr;Screen;Resolution;Refresh;Monitor;Night;Light;Blue;" + "redshift;color;sunset;sunrise;" +-msgstr "Panela;Proiektagailua;xrandr;Pantaila;Bereizmena;Freskatu;Monitorea;Gaua;Argia;Urdina;kolorea;egunsentia;ilunabarra;" ++msgstr "" ++"Panela;Proiektagailua;xrandr;Pantaila;Bereizmena;Freskatu;Monitorea;Gaua;" ++"Argia;Urdina;kolorea;egunsentia;ilunabarra;" + + #: panels/info-overview/cc-info-overview-panel.c:418 + #: panels/info-overview/cc-info-overview-panel.c:433 +@@ -1829,7 +1986,9 @@ msgstr "Aldatu gailuaren izena" + msgid "" + "The device name is used to identify this device when it is viewed over the " + "network, or when pairing Bluetooth devices." +-msgstr "Gailuaren izena hura identifikatzeko erabiltzen da sarean barrena bistaratzen denean, edo Bluetooth gailuekin parekatzen denean." ++msgstr "" ++"Gailuaren izena hura identifikatzeko erabiltzen da sarean barrena " ++"bistaratzen denean, edo Bluetooth gailuekin parekatzen denean." + + #: panels/info-overview/cc-info-overview-panel.ui:233 + msgid "_Rename" +@@ -1852,7 +2011,10 @@ msgstr "Ikusi sistemari buruzko informazioa" + msgid "" + "device;system;information;hostname;memory;processor;version;default;" + "application;preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;" +-msgstr "gailua;sistema;informazioa;ostalari-izena;memoria;prozesadorea;bertsioa;lehenetsia;aplikazioa;hobetsia;cd;dvd;usb;audioa;bideoa;diskoa;aldagarria;euskarria;auto-exekuzioa;" ++msgstr "" ++"gailua;sistema;informazioa;ostalari-izena;memoria;prozesadorea;bertsioa;" ++"lehenetsia;aplikazioa;hobetsia;cd;dvd;usb;audioa;bideoa;diskoa;aldagarria;" ++"euskarria;auto-exekuzioa;" + + #: panels/keyboard/00-multimedia.xml.in:2 + msgid "Sound and Media" +@@ -2082,7 +2244,9 @@ msgstr "Ordezko karaktereen tekla" + msgid "" + "The alternate characters key can be used to enter additional characters. " + "These are sometimes printed as a third-option on your keyboard." +-msgstr "Ordezko karaktereen tekla karaktere gehigarriak sartzeko erabil daiteke. Batzuetan hirugarren aukera gisa inprimatuta ageri dira zure teklatuan." ++msgstr "" ++"Ordezko karaktereen tekla karaktere gehigarriak sartzeko erabil daiteke. " ++"Batzuetan hirugarren aukera gisa inprimatuta ageri dira zure teklatuan." + + #: panels/keyboard/cc-keyboard-panel.c:74 + #: panels/keyboard/cc-keyboard-panel.c:92 +@@ -2131,7 +2295,12 @@ msgid "" + "it, press compose then a sequence of characters. For example, compose key " + "followed by C and o will enter ©, a followed by " + "' will enter á." +-msgstr "Compose teklak mota askotako karaktereak sartzea ahalbidetzen du. Hura erabiltzeko, sakatu Compose tekla eta, ondoren, karaktereen sekuentzia bat. Adibidez, Compose tekla sakatuta, eta ondoren C eta o erabilita, © sartuko du; a eta ondoren ' erabilita, á sartuko du." ++msgstr "" ++"Compose teklak mota askotako karaktereak sartzea ahalbidetzen du. Hura " ++"erabiltzeko, sakatu Compose tekla eta, ondoren, karaktereen sekuentzia bat. " ++"Adibidez, Compose tekla sakatuta, eta ondoren C eta o " ++"erabilita, © sartuko du; a eta ondoren ' erabilita, " ++"á sartuko du." + + #: panels/keyboard/cc-keyboard-panel.c:98 + msgctxt "keyboard key" +@@ -2202,7 +2371,9 @@ msgstr "Berrezarri lasterbide guztiak?" + msgid "" + "Resetting the shortcuts may affect your custom shortcuts. This cannot be " + "undone." +-msgstr "Lasterbideak berrezartzeak zure lasterbide pertsonalizatuei eragin diezaieke. Hori ezin da desegin." ++msgstr "" ++"Lasterbideak berrezartzeak zure lasterbide pertsonalizatuei eragin " ++"diezaieke. Hori ezin da desegin." + + #: panels/keyboard/cc-keyboard-shortcut-dialog.c:430 + #: panels/keyboard/cc-keyboard-shortcut-editor.ui:275 +@@ -2221,7 +2392,9 @@ msgstr "Gehitu laster-tekla pertsonalizatuak" + + #: panels/keyboard/cc-keyboard-shortcut-dialog.ui:124 + msgid "Set up custom shortcuts for launching apps, running scripts, and more." +-msgstr "Konfiguratu laster-tekla pertsonalizatuak aplikazioak abiarazteko, scriptak exekutatzeko eta gehiagorako." ++msgstr "" ++"Konfiguratu laster-tekla pertsonalizatuak aplikazioak abiarazteko, scriptak " ++"exekutatzeko eta gehiagorako." + + #: panels/keyboard/cc-keyboard-shortcut-dialog.ui:131 + msgid "Add Shortcut" +@@ -2249,7 +2422,9 @@ msgstr "Berrezarri laster-tekla guztiak beraien laster-tekla lehenetsira" + #: panels/keyboard/cc-keyboard-shortcut-editor.c:391 + #, c-format + msgid "%s is already being used for %s. If you replace it, %s will be disabled" +-msgstr "%s dagoeneko erabilia izaten ari da %s(e)rako. Hura ordezten baduzu, %s desgaitu egingo da" ++msgstr "" ++"%s dagoeneko erabilia izaten ari da %s(e)rako. Hura ordezten baduzu, %s " ++"desgaitu egingo da" + + #: panels/keyboard/cc-keyboard-shortcut-editor.c:535 + msgid "Enter the new shortcut" +@@ -2275,7 +2450,9 @@ msgstr "Gehitu laster-tekla pertsonalizatua" + + #: panels/keyboard/cc-keyboard-shortcut-editor.ui:60 + msgid "Press Esc to cancel or Backspace to disable the keyboard shortcut." +-msgstr "Sakatu Esc tekla laster-tekla bertan behera uzteko edo atzera-tekla desgaitzeko." ++msgstr "" ++"Sakatu Esc tekla laster-tekla bertan behera uzteko edo atzera-tekla " ++"desgaitzeko." + + #: panels/keyboard/cc-keyboard-shortcut-editor.ui:135 + #: panels/printers/pp-details-dialog.ui:40 +@@ -2320,13 +2497,16 @@ msgstr "Teklatua" + + #: panels/keyboard/gnome-keyboard-panel.desktop.in.in:4 + msgid "View and change keyboard shortcuts and set your typing preferences" +-msgstr "Ikusi eta aldatu teklatuaren laster-teklak eta ezarri idazteko hobespenak" ++msgstr "" ++"Ikusi eta aldatu teklatuaren laster-teklak eta ezarri idazteko hobespenak" + + #. 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 "Laster-tekla;Laneko area;Leihoa;Tamaina aldatzea;Zooma;Kontrastea;Sarrera;Iturburua;Blokeatu;Bolumena;" ++msgstr "" ++"Laster-tekla;Laneko area;Leihoa;Tamaina aldatzea;Zooma;Kontrastea;Sarrera;" ++"Iturburua;Blokeatu;Bolumena;" + + #: panels/location/cc-location-panel.ui:31 + msgid "Location services turned off" +@@ -2340,13 +2520,18 @@ msgstr "Aplikazioek ezin dute kokalekuaren informazioa eskuratu." + msgid "" + "Location services allow applications to know your location. Using Wi-Fi and " + "mobile broadband increases accuracy." +-msgstr "Kokaleku-zerbitzuek aplikazioek zure kokalekua ezagutzea baimentzen dute. Haririk gabekoa eta mugikorren banda zabala erabiltzeak zehaztasuna handiagotzen du." ++msgstr "" ++"Kokaleku-zerbitzuek aplikazioek zure kokalekua ezagutzea baimentzen dute. " ++"Haririk gabekoa eta mugikorren banda zabala erabiltzeak zehaztasuna " ++"handiagotzen du." + + #: panels/location/cc-location-panel.ui:81 + msgid "" + "Uses Mozilla Location Service: Privacy Policy" +-msgstr "Mozilla Location Service erabiltzen du: Pribatutasun-politika" ++msgstr "" ++"Mozilla Location Service erabiltzen du: Pribatutasun-politika" + + #: panels/location/cc-location-panel.ui:93 + msgid "Allow the applications below to determine your location." +@@ -2365,7 +2550,9 @@ msgstr "Babestu zure kokalekuaren informazioa" + msgid "" + "Automatically locking the screen prevents others from accessing the computer " + "while you're away." +-msgstr "Pantaila automatikoki blokeatuta, beste batzuk zure ordenagailura sar daitezen eragozten da zu kanpoan zauden bitartean." ++msgstr "" ++"Pantaila automatikoki blokeatuta, beste batzuk zure ordenagailura sar " ++"daitezen eragozten da zu kanpoan zauden bitartean." + + #: panels/lock/cc-lock-panel.ui:44 + msgid "Blank Screen Delay" +@@ -2385,7 +2572,9 @@ msgstr "Pantailaren blokeo _automatikoaren atzerapena" + + #: panels/lock/cc-lock-panel.ui:83 + msgid "Period after the screen blanks when the screen is automatically locked." +-msgstr "Pantaila automatikoki blokeatuta dagoenean pantaila belzteko igaroko den denbora-tartea." ++msgstr "" ++"Pantaila automatikoki blokeatuta dagoenean pantaila belzteko igaroko den " ++"denbora-tartea." + + #: panels/lock/cc-lock-panel.ui:103 + msgid "Show _Notifications on Lock Screen" +@@ -2399,7 +2588,9 @@ msgstr "Debekatu _USB gailu berriak" + msgid "" + "Prevent new USB devices from interacting with the system when the screen is " + "locked." +-msgstr "Eragotzi USB gailu berriek sistemarekin lan egin dezaten pantaila blokeatuta dagoenean." ++msgstr "" ++"Eragotzi USB gailu berriek sistemarekin lan egin dezaten pantaila blokeatuta " ++"dagoenean." + + #. Translators: Option for "Lock screen after blank for" in "Screen Lock" dialog. + #: panels/lock/cc-lock-panel.ui:166 +@@ -2531,7 +2722,10 @@ msgid "" + "Use of the microphone allows applications to record and listen to audio. " + "Disabling the microphone may cause some applications to not function " + "properly." +-msgstr "Mikrofonoa erabilita, aplikazioek audioa grabatu eta entzun dezakete. Mikrofonoa desgaitzen bada, beharbada zenbait aplikaziok ez dute behar den moduan funtzionatuko." ++msgstr "" ++"Mikrofonoa erabilita, aplikazioek audioa grabatu eta entzun dezakete. " ++"Mikrofonoa desgaitzen bada, beharbada zenbait aplikaziok ez dute behar den " ++"moduan funtzionatuko." + + #: panels/microphone/cc-microphone-panel.ui:85 + msgid "Allow the applications below to use your microphone." +@@ -2545,11 +2739,6 @@ msgstr "Ez dago aplikaziorik mikrofonoa erabiltzea eskatu duenik" + msgid "Protect your conversations" + msgstr "Babestu zure hizketaldiak" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Orokorra" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Botoi nagusia" +@@ -2651,7 +2840,9 @@ msgstr "Sagua eta ukipen-panela" + #: panels/mouse/gnome-mouse-panel.desktop.in.in:4 + msgid "" + "Change your mouse or touchpad sensitivity and select right or left-handed" +-msgstr "Aldatu saguaren edo ukipen-panelaren sentikortasuna eta hautatu eskuin edo ezkerreko eskuarekin erabiltzea" ++msgstr "" ++"Aldatu saguaren edo ukipen-panelaren sentikortasuna eta hautatu eskuin edo " ++"ezkerreko eskuarekin erabiltzea" + + #. 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 +@@ -2660,7 +2851,8 @@ msgstr "Trackpad;Erakuslea;Klik;Sakatu;Bikoitza;Botoia;Trackball;Korritu;" + + #: panels/network/cc-network-panel.c:661 panels/network/cc-wifi-panel.ui:307 + msgid "Oops, something has gone wrong. Please contact your software vendor." +-msgstr "Zerbait gaizki joan da. Jar zaitez harremanetan softwarearen sortzailearekin." ++msgstr "" ++"Zerbait gaizki joan da. Jar zaitez harremanetan softwarearen sortzailearekin." + + #: panels/network/cc-network-panel.c:667 + msgid "NetworkManager needs to be running." +@@ -2725,7 +2917,9 @@ msgstr "Aukerak…" + msgid "" + "Turning on the hotspot will disconnect from %s, and it will not be possible " + "to access the internet through Wi-Fi." +-msgstr "Wifigunea aktibatzen bada, gailua %s saretik deskonektatuko da eta ezin izango da internetera sartu wifi bidez." ++msgstr "" ++"Wifigunea aktibatzen bada, gailua %s saretik deskonektatuko da eta ezin " ++"izango da internetera sartu wifi bidez." + + #: panels/network/cc-wifi-hotspot-dialog.c:265 + msgid "Must have a minimum of 8 characters" +@@ -2740,7 +2934,10 @@ msgid "" + "Wi-Fi hotspot allows others to share your internet connection, by creating a " + "Wi-Fi network that they can connect to. To do this, you must have an " + "internet connection through a source other than Wi-Fi." +-msgstr "Wifiguneari esker, zure internet-konexioa beste batzuekin partekatuko duzu, haiek konektatu ahal izango diren wifi-sare bat sortuko baituzu. Hori egiteko, wifi bidezkoa ez den interneteko konexio bat izan behar duzu." ++msgstr "" ++"Wifiguneari esker, zure internet-konexioa beste batzuekin partekatuko duzu, " ++"haiek konektatu ahal izango diren wifi-sare bat sortuko baituzu. Hori " ++"egiteko, wifi bidezkoa ez den interneteko konexio bat izan behar duzu." + + #: panels/network/cc-wifi-hotspot-dialog.ui:44 + msgid "Network Name" +@@ -2795,7 +2992,8 @@ msgstr "Ez da haririk gabeko moldagailurik aurkitu" + + #: panels/network/cc-wifi-panel.ui:99 + msgid "Make sure you have a Wi-Fi adapter plugged and turned on" +-msgstr "Ziurtatu zaitez haririk gabeko moldagailua entxufatuta eta piztuta edukitzeaz" ++msgstr "" ++"Ziurtatu zaitez haririk gabeko moldagailua entxufatuta eta piztuta edukitzeaz" + + #: panels/network/cc-wifi-panel.ui:134 + msgid "Airplane Mode On" +@@ -2856,7 +3054,10 @@ msgid "" + "The MAC address entered here will be used as hardware address for the " + "network device this connection is activated on. This feature is known as MAC " + "cloning or spoofing. Example: 00:11:22:33:44:55" +-msgstr "Hemen sartutako MAC helbidea erabiliko da konexio hau aktibatzen den sareko gailuaren hardwarearen helbide gisa. Eginbide hau MAC helbidea klonatzea edo iruzurtzea bezala ezagutzen da. Adibidea: 00:11:22:33:44:55" ++msgstr "" ++"Hemen sartutako MAC helbidea erabiliko da konexio hau aktibatzen den sareko " ++"gailuaren hardwarearen helbide gisa. Eginbide hau MAC helbidea klonatzea edo " ++"iruzurtzea bezala ezagutzen da. Adibidea: 00:11:22:33:44:55" + + #: panels/network/connection-editor/ce-page.c:399 + #, c-format +@@ -3128,12 +3329,15 @@ msgstr "Egin erabilgarri beste _erabiltzaileentzako" + + #: panels/network/connection-editor/details-page.ui:467 + msgid "_Metered connection: has data limits or can incur charges" +-msgstr "_Neurtutako konexioa: datu-mugak ditu edo ordainketaren bat eragin dezake" ++msgstr "" ++"_Neurtutako konexioa: datu-mugak ditu edo ordainketaren bat eragin dezake" + + #: panels/network/connection-editor/details-page.ui:478 + msgid "" + "Software updates and other large downloads will not be started automatically." +-msgstr "Software eguneratzeak eta beste deskarga handi batzuk ez dira automatikoki abiaraziko." ++msgstr "" ++"Software eguneratzeak eta beste deskarga handi batzuk ez dira automatikoki " ++"abiaraziko." + + #: panels/network/connection-editor/ethernet-page.ui:25 + #: panels/network/connection-editor/vpn-page.ui:23 +@@ -3297,7 +3501,9 @@ msgid "" + "connection information\n" + "\n" + "Error: %s." +-msgstr "Ezin izan da “%s” fitxategia irakurri, edo ez dauka VPN konexioaren informazio ezagunik.\n" ++msgstr "" ++"Ezin izan da “%s” fitxategia irakurri, edo ez dauka VPN konexioaren " ++"informazio ezagunik.\n" + "\n" + "Errorea: %s." + +@@ -3329,7 +3535,8 @@ msgid "" + "The VPN connection “%s” could not be exported to %s.\n" + "\n" + "Error: %s." +-msgstr "The VPN connection “%s” could not be exported to %s.\n" ++msgstr "" ++"The VPN connection “%s” could not be exported to %s.\n" + "\n" + "Error: %s." + +@@ -3401,7 +3608,9 @@ msgstr "Gehitu konexio berria" + msgid "" + "Network details for the selected networks, including passwords and any " + "custom configuration will be lost." +-msgstr "Hautatutako sareen xehetasunak, pasahitzak eta konfigurazio pertsonalizatuak barne, galdu egingo dira." ++msgstr "" ++"Hautatutako sareen xehetasunak, pasahitzak eta konfigurazio pertsonalizatuak " ++"barne, galdu egingo dira." + + #: panels/network/net-device-wifi.c:855 + msgid "_Forget" +@@ -3448,7 +3657,9 @@ msgstr "Desaktibatuta" + #: panels/network/net-proxy.c:112 + msgid "" + "Web Proxy Autodiscovery is used when a Configuration URL is not provided." +-msgstr "Webeko proxy-autoaurkitzailea erabiltzen da konfigurazioaren URLa ez denean ematen." ++msgstr "" ++"Webeko proxy-autoaurkitzailea erabiltzen da konfigurazioaren URLa ez denean " ++"ematen." + + #. TRANSLATORS: WPAD is bad: if you enable it on an untrusted + #. * network, then anyone else on that network can tell your +@@ -4015,7 +4226,10 @@ msgid "" + "password-protected private key.\n" + "\n" + "(You can password-protect your private key with openssl)" +-msgstr "Hautatutako gako pribatua ez dirudi pasahitz batekin babestuta dagoenik. Horrek zure segurtasun-kredentzialak arriskuan jar ditzake. Hautatu pasahitzarekin babestutako gako pribatu bat.\n" ++msgstr "" ++"Hautatutako gako pribatua ez dirudi pasahitz batekin babestuta dagoenik. " ++"Horrek zure segurtasun-kredentzialak arriskuan jar ditzake. Hautatu " ++"pasahitzarekin babestutako gako pribatu bat.\n" + "\n" + "(Zure gako pribatua pasahitz batekin babes dezakezu openssl-rekin)" + +@@ -4133,20 +4347,26 @@ msgstr "wep gakoa falta da" + #: panels/network/wireless-security/ws-wep-key.c:123 + #, c-format + msgid "invalid wep-key: key with a length of %zu must contain only hex-digits" +-msgstr "baliogabeko wep gakoa: %zu luzera duen gakoak soilik digitu hamaseitarrak eduki ditzake" ++msgstr "" ++"baliogabeko wep gakoa: %zu luzera duen gakoak soilik digitu hamaseitarrak " ++"eduki ditzake" + + #: panels/network/wireless-security/ws-wep-key.c:131 + #, c-format + msgid "" + "invalid wep-key: key with a length of %zu must contain only ascii characters" +-msgstr "baliogabeko wep gakoa: %zu luzera duen gakoak soilik ascii karaktereak eduki ditzake" ++msgstr "" ++"baliogabeko wep gakoa: %zu luzera duen gakoak soilik ascii karaktereak eduki " ++"ditzake" + + #: panels/network/wireless-security/ws-wep-key.c:137 + #, c-format + msgid "" + "invalid wep-key: wrong key length %zu. A key must be either of length 5/13 " + "(ascii) or 10/26 (hex)" +-msgstr "baliogabeko wep gakoa: gakoak okerreko %zu luzera du. Gako baten luzerak 5/13 (ascii) edo 10/26 (hamaseitarra) izan behar du" ++msgstr "" ++"baliogabeko wep gakoa: gakoak okerreko %zu luzera du. Gako baten luzerak " ++"5/13 (ascii) edo 10/26 (hamaseitarra) izan behar du" + + #: panels/network/wireless-security/ws-wep-key.c:144 + msgid "invalid wep-key: passphrase must be non-empty" +@@ -4154,7 +4374,9 @@ msgstr "baliogabeko wep gakoa: pasaesaldia ezin da hutsik egon behar" + + #: panels/network/wireless-security/ws-wep-key.c:146 + msgid "invalid wep-key: passphrase must be shorter than 64 characters" +-msgstr "baliogabeko wep gakoa: pasaesaldiak 64 karaktere baino gutxiago izan behar ditu" ++msgstr "" ++"baliogabeko wep gakoa: pasaesaldiak 64 karaktere baino gutxiago izan behar " ++"ditu" + + #: panels/network/wireless-security/ws-wep-key.ui:11 + msgid "1 (Default)" +@@ -4185,11 +4407,15 @@ msgstr "WEP _indizea" + msgid "" + "invalid wpa-psk: invalid key-length %zu. Must be [8,63] bytes or 64 hex " + "digits" +-msgstr "baliogabeko wpa-psk: gakoaren %zu luzera baliogabea. [8,63] byte edo 64 digitu hamaseitarrekoa izan behar du" ++msgstr "" ++"baliogabeko wpa-psk: gakoaren %zu luzera baliogabea. [8,63] byte edo 64 " ++"digitu hamaseitarrekoa izan behar du" + + #: panels/network/wireless-security/ws-wpa-psk.c:86 + msgid "invalid wpa-psk: cannot interpret key with 64 bytes as hex" +-msgstr "baliogabeko wepwpa-psk: ezin da hamaseitar gisa 64 byte dituen gakoa interpretatu" ++msgstr "" ++"baliogabeko wepwpa-psk: ezin da hamaseitar gisa 64 byte dituen gakoa " ++"interpretatu" + + #. This is the per application switch for message tray usage. + #: panels/notifications/cc-app-notifications-dialog.ui:60 +@@ -4212,7 +4438,9 @@ msgstr "_Jakinarazpenen laster-leihoak" + msgid "" + "Notifications will continue to appear in the notification list when popups " + "are disabled." +-msgstr "Jakinarazpenak jakinarazpenen zerrendan agertzen jarraituko dute laster-leihoak desgaituta daudenean." ++msgstr "" ++"Jakinarazpenak jakinarazpenen zerrendan agertzen jarraituko dute laster-" ++"leihoak desgaituta daudenean." + + #. Popups here refers to message tray notifications in the middle of the screen. + #: panels/notifications/cc-app-notifications-dialog.ui:249 +@@ -4250,7 +4478,8 @@ msgstr "Pantaila b_lokeatzearen jakinarazpenak" + + #: panels/notifications/gnome-notifications-panel.desktop.in.in:4 + msgid "Control which notifications are displayed and what they show" +-msgstr "Kontrolatu jakinarazpenak nola bistaratzen diren eta zer erakusten duten" ++msgstr "" ++"Kontrolatu jakinarazpenak nola bistaratzen diren eta zer erakusten duten" + + #. 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 +@@ -4287,7 +4516,8 @@ msgstr "Lineako kontuak" + + #: panels/online-accounts/gnome-online-accounts-panel.desktop.in.in:4 + msgid "Connect to your online accounts and decide what to use them for" +-msgstr "Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun" ++msgstr "" ++"Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzun" + + #. Translators: Search terms to find the Online Accounts panel. + #. Do NOT translate or localize the semicolons! +@@ -4297,7 +4527,9 @@ msgstr "Konektatu lineako zure kontuetara eta erabaki zertarako erabiliko dituzu + msgid "" + "Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;" + "Kerberos;IMAP;SMTP;Pocket;ReadItLater;" +-msgstr "Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;" ++msgstr "" ++"Google;Facebook;Twitter;Yahoo;Weba;Linean;Berriketa;Egutegia;Posta;Kontaktua;" ++"ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;" + + #. Translators: This is the button which allows undoing the removal of the printer. + #: panels/online-accounts/online-accounts.ui:38 panels/printers/printers.ui:61 +@@ -4310,7 +4542,9 @@ msgstr "Konektatu zure datuak lainoan" + + #: panels/online-accounts/online-accounts.ui:109 + msgid "No internet connection — connect to set up new online accounts" +-msgstr "Ez dago Interneteko konexiorik — konektatu lineako kontu berriak konfiguratzeko" ++msgstr "" ++"Ez dago Interneteko konexiorik — konektatu lineako kontu berriak " ++"konfiguratzeko" + + #: panels/online-accounts/online-accounts.ui:134 + msgid "Add an account" +@@ -4611,7 +4845,9 @@ msgstr "Bandazabal _mugikorra" + + #: panels/power/cc-power-panel.ui:621 + msgid "Mobile broadband (LTE, 4G, 3G, etc.) can be turned off to save power." +-msgstr "Banda zabala mugikorra (LTE, 4G, 3G eta abar) itzali egin daiteke energia aurrezteko." ++msgstr "" ++"Banda zabala mugikorra (LTE, 4G, 3G eta abar) itzali egin daiteke energia " ++"aurrezteko." + + #: panels/power/cc-power-panel.ui:671 + msgid "_Bluetooth" +@@ -4696,7 +4932,9 @@ msgstr "Ikusi bateriaren egoera eta aldatu energia aurrezteko ezarpenak" + msgid "" + "Power;Sleep;Suspend;Hibernate;Battery;Brightness;Dim;Blank;Monitor;DPMS;Idle;" + "Energy;" +-msgstr "Argindarra;Lo egin;Eseki;Hibernatu;Bateria;Distira;Itzali;Belztu;Monitorea;DPMS;Inaktibo;Energia;" ++msgstr "" ++"Argindarra;Lo egin;Eseki;Hibernatu;Bateria;Distira;Itzali;Belztu;Monitorea;" ++"DPMS;Inaktibo;Energia;" + + #: panels/printers/authentication-dialog.ui:11 + msgid " " +@@ -4741,7 +4979,9 @@ msgstr "Inprimagailuak" + + #: panels/printers/gnome-printers-panel.desktop.in.in:4 + msgid "Add printers, view printer jobs and decide how you want to print" +-msgstr "Gehitu inprimagailuak, ikusi inprimatze-lanak eta erabaki zer inprimatzea nahi duzun" ++msgstr "" ++"Gehitu inprimagailuak, ikusi inprimatze-lanak eta erabaki zer inprimatzea " ++"nahi duzun" + + #. 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 +@@ -4795,7 +5035,9 @@ msgstr "Hautatu PPD fitxategia" + msgid "" + "PostScript Printer Description files (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *." + "PPD.GZ)" +-msgstr "PostScript Printer Description fitxategiak (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *.PPD.GZ)" ++msgstr "" ++"PostScript Printer Description fitxategiak (*.ppd, *.PPD, *.ppd.gz, *.PPD." ++"gz, *.PPD.GZ)" + + #: panels/printers/pp-details-dialog.ui:68 panels/printers/printer-entry.ui:223 + msgid "Location" +@@ -4992,7 +5234,9 @@ msgstr "Desblokeatu %s." + #: panels/printers/pp-new-printer-dialog.c:367 + #, c-format + msgid "Enter username and password to view printers on %s." +-msgstr "Sartu zure erabiltzaile-izena eta pasahitza %s kokalekuan dauden inprimagailuak ikusteko." ++msgstr "" ++"Sartu zure erabiltzaile-izena eta pasahitza %s kokalekuan dauden " ++"inprimagailuak ikusteko." + + #: panels/printers/pp-new-printer-dialog.c:790 + msgid "Searching for Printers" +@@ -5352,7 +5596,8 @@ msgstr "Gehitu inprimagailua…" + msgid "" + "Sorry! The system printing service\n" + "doesn’t seem to be available." +-msgstr "Badirudi sistemako inprimatzeko\n" ++msgstr "" ++"Badirudi sistemako inprimatzeko\n" + "zerbitzua ez dagoela erabilgarri." + + #: panels/region/cc-format-chooser.c:148 panels/region/cc-format-chooser.c:189 +@@ -5364,7 +5609,9 @@ msgstr "Formatuak" + msgid "" + "Choose the format for numbers, dates and currencies. Changes take effect on " + "next login." +-msgstr "Aukeratu zenbakietarako, datetarako eta monetetarako formatuak. Aldaketak hurrengo saioa hastean sartuko dira indarrean." ++msgstr "" ++"Aukeratu zenbakietarako, datetarako eta monetetarako formatuak. Aldaketak " ++"hurrengo saioa hastean sartuko dira indarrean." + + #: panels/region/cc-format-chooser.ui:117 + msgid "Search locales..." +@@ -5455,7 +5702,9 @@ msgstr "_Formatuak" + + #: panels/region/cc-region-panel.ui:231 + msgid "Login settings are used by all users when logging into the system" +-msgstr "Erabiltzaile guztiek saio-hasierako ezarpenak darabilte sisteman saioa hastean" ++msgstr "" ++"Erabiltzaile guztiek saio-hasierako ezarpenak darabilte sisteman saioa " ++"hastean" + + #: panels/region/gnome-region-panel.desktop.in.in:3 + msgid "Region & Language" +@@ -5464,7 +5713,9 @@ msgstr "Eskualdea eta hizkuntza" + #: panels/region/gnome-region-panel.desktop.in.in:4 + msgid "" + "Select your display language, formats, keyboard layouts and input sources" +-msgstr "Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako iturburuak" ++msgstr "" ++"Hautatu pantailaren hizkuntza, formatua, teklatuaren diseinua eta sarrerako " ++"iturburuak" + + #. 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 +@@ -5497,7 +5748,8 @@ msgstr "Hautatu aplikazioa bideo DVDentzako" + + #: panels/removable-media/cc-removable-media-panel.c:364 + msgid "Select an application to run when a music player is connected" +-msgstr "Hautatu aplikazio bat exekutatzeko musika erreproduzigailu bat konektatzean" ++msgstr "" ++"Hautatu aplikazio bat exekutatzeko musika erreproduzigailu bat konektatzean" + + #: panels/removable-media/cc-removable-media-panel.c:365 + msgid "Select an application to run when a camera is connected" +@@ -5613,7 +5865,9 @@ msgstr "Konfiguratu euskarri aldagarriaren ezarpenak" + msgid "" + "device;system;default;application;preferred;cd;dvd;usb;audio;video;disc;" + "removable;media;autorun;" +-msgstr "gailua;sistema;lehenetsia;aplikazioa;hobetsia;cd;dvd;usb;audioa;bideoa;diskoa;aldagarria;euskarria;exekuzioa;" ++msgstr "" ++"gailua;sistema;lehenetsia;aplikazioa;hobetsia;cd;dvd;usb;audioa;bideoa;" ++"diskoa;aldagarria;euskarria;exekuzioa;" + + #: panels/search/cc-search-locations-dialog.c:636 + msgid "Select Location" +@@ -5634,7 +5888,9 @@ msgstr "Bilatu kokalekuak" + msgid "" + "Folders which are searched by system applications, such as Files, Photos and " + "Videos." +-msgstr "Sistema-aplikazioek zein karpetetan egingo dituzten bilaketak, adibidez 'Fitxategiak', 'Argazkiak' eta 'Bideoak' karpetetan" ++msgstr "" ++"Sistema-aplikazioek zein karpetetan egingo dituzten bilaketak, adibidez " ++"'Fitxategiak', 'Argazkiak' eta 'Bideoak' karpetetan" + + #: panels/search/cc-search-locations-dialog.ui:52 + msgid "Places" +@@ -5664,12 +5920,16 @@ msgstr "Eraman behera" + msgid "" + "Control which search results are shown in the Activities Overview. The order " + "of search results can also be changed by moving rows in the list." +-msgstr "Jardueren ikuspegi orokorrean zein emaitza erakutsiko den kontrolatzen du. Bilaketa-emaitzen ordena ere aldatu daiteke zerrendako errenkadak mugituta." ++msgstr "" ++"Jardueren ikuspegi orokorrean zein emaitza erakutsiko den kontrolatzen du. " ++"Bilaketa-emaitzen ordena ere aldatu daiteke zerrendako errenkadak mugituta." + + #: panels/search/gnome-search-panel.desktop.in.in:4 + msgid "" + "Control which applications show search results in the Activities Overview" +-msgstr "Kontrolatu zer aplikaziok erakusten dituzten bilaketen emaitzak Jardueren ikuspegian" ++msgstr "" ++"Kontrolatu zer aplikaziok erakusten dituzten bilaketen emaitzak Jardueren " ++"ikuspegian" + + #. 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 +@@ -5715,7 +5975,9 @@ msgstr "Aukeratu karpeta" + msgid "" + "File Sharing allows you to share your Public folder with others on your " + "current network using: %s" +-msgstr "Fitxategiak partekatzeak zure uneko sareko beste erabiltzaileek zure 'Publikoa' karpeta ikustea ahalbidetzen du honakoa erabilita: %s" ++msgstr "" ++"Fitxategiak partekatzeak zure uneko sareko beste erabiltzaileek zure " ++"'Publikoa' karpeta ikustea ahalbidetzen du honakoa erabilita: %s" + + #. TRANSLATORS: %s is replaced with a link to a "ssh " command to run + #: panels/sharing/cc-sharing-panel.c:702 +@@ -5724,7 +5986,9 @@ msgid "" + "When remote login is enabled, remote users can connect using the Secure " + "Shell command:\n" + "%s" +-msgstr "Urruneko saio-hasiera gaituta dagoenean, urruneko erabiltzaileek konekta daitezke Shell Seguruko komandoa erabiliz: \n" ++msgstr "" ++"Urruneko saio-hasiera gaituta dagoenean, urruneko erabiltzaileek konekta " ++"daitezke Shell Seguruko komandoa erabiliz: \n" + "%s" + + #. TRANSLATORS: %s is replaced with a link to a vnc:// URL +@@ -5733,7 +5997,9 @@ msgstr "Urruneko saio-hasiera gaituta dagoenean, urruneko erabiltzaileek konekta + msgid "" + "Screen sharing allows remote users to view or control your screen by " + "connecting to %s" +-msgstr "Urruneko pantaila partekatzeak urruneko erabiltzaileek zure pantaila ikustea edo kontrolatzea baimentzen du hona konektatuz: %s" ++msgstr "" ++"Urruneko pantaila partekatzeak urruneko erabiltzaileek zure pantaila ikustea " ++"edo kontrolatzea baimentzen du hona konektatuz: %s" + + #: panels/sharing/cc-sharing-panel.c:813 + msgid "Copy" +@@ -5833,7 +6099,9 @@ msgstr "Kontrolatu besteekin zer partekatzea nahi duzun" + msgid "" + "share;sharing;ssh;host;name;remote;desktop;media;audio;video;pictures;photos;" + "movies;server;renderer;" +-msgstr "partekatu;partekatzea;ssh;ostalaria;izena;urrunekoa;mahaigaina;multimedia;bideoa;irudiak;argazkiak;filmak;zerbitzaria;errendatzea;" ++msgstr "" ++"partekatu;partekatzea;ssh;ostalaria;izena;urrunekoa;mahaigaina;multimedia;" ++"bideoa;irudiak;argazkiak;filmak;zerbitzaria;errendatzea;" + + #: panels/sharing/org.gnome.controlcenter.remote-login-helper.policy.in.in:11 + msgid "Enable or disable remote login" +@@ -5949,7 +6217,9 @@ msgstr "Aldatu soinuaren bolumena, sarrerak, irteerak eta eta alerten soinuak" + #: panels/sound/gnome-sound-panel.desktop.in.in:20 + msgid "" + "Card;Microphone;Volume;Fade;Balance;Bluetooth;Headset;Audio;Output;Input;" +-msgstr "Txartela;Mikrofonoa;Bolumena;Iraungi;Balantzea;Bluetooth-a;Entzungailua;Audioa;Irteera;Sarrera;" ++msgstr "" ++"Txartela;Mikrofonoa;Bolumena;Iraungi;Balantzea;Bluetooth-a;Entzungailua;" ++"Audioa;Irteera;Sarrera;" + + #: panels/thunderbolt/cc-bolt-device-dialog.c:94 + #: panels/thunderbolt/cc-bolt-device-entry.c:125 +@@ -6061,15 +6331,19 @@ msgstr "Baimendua" + #: panels/thunderbolt/cc-bolt-panel.c:175 + msgid "" + "The Thunderbolt subsystem (boltd) is not installed or not set up properly." +-msgstr "Thunderbolt azpisistema (boltd) ez dago instalatuta edo gaizki konfiguratuta dago." ++msgstr "" ++"Thunderbolt azpisistema (boltd) ez dago instalatuta edo gaizki konfiguratuta " ++"dago." + + #: panels/thunderbolt/cc-bolt-panel.c:468 + msgid "" + "Thunderbolt could not be detected.\n" + "Either the system lacks Thunderbolt support, it has been disabled in the " + "BIOS or is set to an unsupported security level in the BIOS." +-msgstr "Thunderbolt ezin izan da detektatu.\n" +-"Sistemak ez dauka Thunderbolt euskarririk, BIOSean desgaitu egin da edo onartzen ez den segurtasun-maila batean ezarri da BIOSean." ++msgstr "" ++"Thunderbolt ezin izan da detektatu.\n" ++"Sistemak ez dauka Thunderbolt euskarririk, BIOSean desgaitu egin da edo " ++"onartzen ez den segurtasun-maila batean ezarri da BIOSean." + + #: panels/thunderbolt/cc-bolt-panel.c:512 + msgid "Thunderbolt support has been disabled in the BIOS." +@@ -6094,7 +6368,8 @@ msgstr "Sarbide zuzena" + + #: panels/thunderbolt/cc-bolt-panel.ui:269 + msgid "Allow direct access to devices such as docks and external GPUs." +-msgstr "Sarbide zuzena baimentzen du atrakeak eta kanpoko GPUak bezalako gailuetara." ++msgstr "" ++"Sarbide zuzena baimentzen du atrakeak eta kanpoko GPUak bezalako gailuetara." + + #: panels/thunderbolt/cc-bolt-panel.ui:289 + msgid "Only USB and Display Port devices can attach." +@@ -6145,7 +6420,9 @@ msgstr "Kurtsorearen tamaina" + #: panels/universal-access/cc-cursor-size-dialog.ui:29 + msgid "" + "Cursor size can be combined with zoom to make it easier to see the cursor." +-msgstr "Kurtsorearen tamaina zoomarekin erabil daiteke kurtsorea errazago ikus ahal izateko." ++msgstr "" ++"Kurtsorearen tamaina zoomarekin erabil daiteke kurtsorea errazago ikus ahal " ++"izateko." + + #: panels/universal-access/cc-pointing-dialog.ui:7 + msgid "Click Assist" +@@ -6221,7 +6498,8 @@ msgstr "Errepikatze-teklak" + + #: panels/universal-access/cc-repeat-keys-dialog.ui:37 + msgid "Key presses repeat when key is held down." +-msgstr "Tekla sakatuta dagoen bitartean, tekla hori behin eta berriz errepikatzen da." ++msgstr "" ++"Tekla sakatuta dagoen bitartean, tekla hori behin eta berriz errepikatzen da." + + #: panels/universal-access/cc-repeat-keys-dialog.ui:102 + msgid "Repeat keys delay" +@@ -6237,7 +6515,9 @@ msgstr "Teklak soinuarekin" + + #: panels/universal-access/cc-sound-keys-dialog.ui:25 + msgid "Beep when Num Lock or Caps Lock are turned on or off." +-msgstr "Jo soinua zenbakiak blokeatzeko edo maiuskulak blokeatzeko teklak aktibatzen edo desaktibatzen direnean." ++msgstr "" ++"Jo soinua zenbakiak blokeatzeko edo maiuskulak blokeatzeko teklak aktibatzen " ++"edo desaktibatzen direnean." + + #: panels/universal-access/cc-sound-keys-dialog.ui:45 + #: panels/universal-access/cc-ua-panel.ui:374 +@@ -6250,7 +6530,9 @@ msgstr "Pantaila irakurlea" + + #: panels/universal-access/cc-screen-reader-dialog.ui:24 + msgid "The screen reader reads displayed text as you move the focus." +-msgstr "Pantailaren irakurleak bistaratutako testua irakurtzen du fokua mugitzen duzun arabera." ++msgstr "" ++"Pantailaren irakurleak bistaratutako testua irakurtzen du fokua mugitzen " ++"duzun arabera." + + #: panels/universal-access/cc-screen-reader-dialog.ui:52 + msgid "_Screen Reader" +@@ -6651,7 +6933,8 @@ msgstr "Kolore-efektuak" + + #: panels/universal-access/gnome-universal-access-panel.desktop.in.in:4 + msgid "Make it easier to see, hear, type, point and click" +-msgstr "Egin errazagoa ikusteko, entzuteko, idazteko, kokatzeko eta klik egiteko" ++msgstr "" ++"Egin errazagoa ikusteko, entzuteko, idazteko, kokatzeko eta klik egiteko" + + #. Translators: Search terms to find the Accessibility 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 +@@ -6660,7 +6943,12 @@ msgid "" + "Zoom;Screen;Reader;big;high;large;text;font;size;AccessX;Sticky;Keys;Slow;" + "Bounce;Mouse;Double;click;Delay;Speed;Assist;Repeat;Blink;visual;hearing;" + "audio;typing;" +-msgstr "Teklatua;Sagua;a11y;Irisgarritasuna;Irisgarritasun Unibertsala;Kontrastea;Kurtsorea;Soinua;Zooma;Pantaila;Irakurgailua;handia;altua;handia;testua;letra-tipoa;tamaina;AccessX;Itsaskorra;Teklak;Geldoa;Errebotea;Sagua;Bikoitza;klik;Atzerapena;Abiadura;Lagundu;Errepikatu;Keinua;bisuala;entzumena;audioa;idazketa;" ++msgstr "" ++"Teklatua;Sagua;a11y;Irisgarritasuna;Irisgarritasun Unibertsala;Kontrastea;" ++"Kurtsorea;Soinua;Zooma;Pantaila;Irakurgailua;handia;altua;handia;testua;" ++"letra-tipoa;tamaina;AccessX;Itsaskorra;Teklak;Geldoa;Errebotea;Sagua;" ++"Bikoitza;klik;Atzerapena;Abiadura;Lagundu;Errepikatu;Keinua;bisuala;" ++"entzumena;audioa;idazketa;" + + #: panels/usage/cc-usage-panel.c:154 + msgid "Empty all items from Trash?" +@@ -6695,7 +6983,10 @@ msgid "" + "File history keeps a record of files that you have used. This information is " + "shared between applications, and makes it easier to find files that you " + "might want to use." +-msgstr "Fitxategien historiak zuk erabilitako fitxategien erregistro bat gordetzen du. Informazio hori aplikazioen artean partekatzen da, eta errazago bihurtzen du erabili nahi dituzun fitxategiak aurkitzeko lana." ++msgstr "" ++"Fitxategien historiak zuk erabilitako fitxategien erregistro bat gordetzen " ++"du. Informazio hori aplikazioen artean partekatzen da, eta errazago " ++"bihurtzen du erabili nahi dituzun fitxategiak aurkitzeko lana." + + #: panels/usage/cc-usage-panel.ui:56 + msgid "File H_istory" +@@ -6717,7 +7008,10 @@ msgstr "Zakarrontziko eta aldi baterako fitxategiak" + msgid "" + "Trash and temporary files can sometimes include personal or sensitive " + "information. Automatically deleting them can help to protect privacy." +-msgstr "Zakarrontziko eta aldi baterako fitxategiek zenbaitetan informazio pertsonala edo sentikorra izan dezakete. Automatikoki ezabatzen badira, pribatutasuna babesten lagundu dezakete." ++msgstr "" ++"Zakarrontziko eta aldi baterako fitxategiek zenbaitetan informazio " ++"pertsonala edo sentikorra izan dezakete. Automatikoki ezabatzen badira, " ++"pribatutasuna babesten lagundu dezakete." + + #: panels/usage/cc-usage-panel.ui:159 + msgid "Automatically Delete _Trash Content" +@@ -6863,14 +7157,16 @@ msgstr "Huts egin du domeinuarekin elkartzean" + msgid "" + "That login name didn’t work.\n" + "Please try again." +-msgstr "Saioaren hasierako izenak ez du funtzionatzen.\n" ++msgstr "" ++"Saioaren hasierako izenak ez du funtzionatzen.\n" + "Saiatu berriro." + + #: panels/user-accounts/cc-add-user-dialog.c:1173 + msgid "" + "That login password didn’t work.\n" + "Please try again." +-msgstr "Saioaren hasierako pasahitzak ez du funtzionatzen.\n" ++msgstr "" ++"Saioaren hasierako pasahitzak ez du funtzionatzen.\n" + "Saiatu berriro." + + #: panels/user-accounts/cc-add-user-dialog.c:1181 +@@ -6920,7 +7216,10 @@ msgid "" + "Enterprise login allows an existing centrally managed user account to be " + "used on this device. You can also use this account to access company " + "resources on the internet." +-msgstr "Enpresako saio-hasieran baimenduta dago erabiltzaileen kontu zentralizatua erabiltzea gailu honetan. Kontu hau enpresaren interneteko baliabideak atzitzeko ere erabil dezakezu." ++msgstr "" ++"Enpresako saio-hasieran baimenduta dago erabiltzaileen kontu zentralizatua " ++"erabiltzea gailu honetan. Kontu hau enpresaren interneteko baliabideak " ++"atzitzeko ere erabil dezakezu." + + #: panels/user-accounts/cc-add-user-dialog.ui:732 + msgid "You are Offline" +@@ -6966,7 +7265,9 @@ msgstr "_Bai" + msgid "" + "Do you want to delete your registered fingerprints so fingerprint login is " + "disabled?" +-msgstr "Erregistratutako zure hatz-markak ezabatze nahi duzu, hatz-marken bidezko saio-hasiera desgaituz?" ++msgstr "" ++"Erregistratutako zure hatz-markak ezabatze nahi duzu, hatz-marken bidezko " ++"saio-hasiera desgaituz?" + + #. Translators: This is the empty state page label which states that there are no devices ready. + #: panels/user-accounts/cc-fingerprint-dialog.ui:249 +@@ -6993,7 +7294,9 @@ msgstr "Hatz-marken gailua" + msgid "" + "Fingerprint login allows you to unlock and log into your computer with your " + "finger" +-msgstr "Hatz-marken bidezko saio-hasierak hatza erabilita ordenagailua desblokeatzea eta saioa hastea ahalbidetzen du." ++msgstr "" ++"Hatz-marken bidezko saio-hasierak hatza erabilita ordenagailua desblokeatzea " ++"eta saioa hastea ahalbidetzen du." + + #: panels/user-accounts/cc-fingerprint-dialog.ui:352 + msgid "_Delete Fingerprints" +@@ -7129,7 +7432,9 @@ msgstr "Huts egin du erregistroa gelditzeak: %s" + msgid "" + "Repeatedly lift and place your finger on the reader to enroll your " + "fingerprint" +-msgstr "Altxatu eta kokatu hatza irakurgailuan behin eta berriro, zure hatz-marka erregistratzeko" ++msgstr "" ++"Altxatu eta kokatu hatza irakurgailuan behin eta berriro, zure hatz-marka " ++"erregistratzeko" + + #. TRANSLATORS: This is the label for the button to enroll a new finger + #: panels/user-accounts/cc-fingerprint-dialog.c:1118 +@@ -7255,7 +7560,8 @@ msgstr "Uneko _pasahitza" + + #: panels/user-accounts/cc-password-dialog.ui:254 + msgid "Allow user to change their password on next login" +-msgstr "Baimendu erabiltzaileei hurrengo saio-hasieran haien pasahitzak ezartzea" ++msgstr "" ++"Baimendu erabiltzaileei hurrengo saio-hasieran haien pasahitzak ezartzea" + + #: panels/user-accounts/cc-password-dialog.ui:267 + msgid "Set a password now" +@@ -7311,7 +7617,9 @@ msgstr "%s oraindik saioan sartuta dago" + msgid "" + "Deleting a user while they are logged in can leave the system in an " + "inconsistent state." +-msgstr "Erabiltzailea ezabatzen bada saioan sartuta dagoen bitartean, sistema egoera inkoherentean utz daiteke." ++msgstr "" ++"Erabiltzailea ezabatzen bada saioan sartuta dagoen bitartean, sistema egoera " ++"inkoherentean utz daiteke." + + #: panels/user-accounts/cc-user-panel.c:624 + #, c-format +@@ -7322,7 +7630,9 @@ msgstr "%s(r)en fitxategiak mantentzea nahi dituzu?" + msgid "" + "It is possible to keep the home directory, mail spool and temporary files " + "around when deleting a user account." +-msgstr "Karpeta nagusia, postaren ilara eta aldi baterako fitxategiak gordetzeko aukera dago erabiltzaile baten kontua ezabatzean." ++msgstr "" ++"Karpeta nagusia, postaren ilara eta aldi baterako fitxategiak gordetzeko " ++"aukera dago erabiltzaile baten kontua ezabatzean." + + #: panels/user-accounts/cc-user-panel.c:631 + msgid "_Delete Files" +@@ -7335,7 +7645,8 @@ msgstr "_Mantendu fitxategiak" + #: panels/user-accounts/cc-user-panel.c:646 + #, c-format + msgid "Are you sure you want to revoke remotely managed %s’s account?" +-msgstr "Ziur zaude urrunetik kudeatutako “%s”(r)en kontua errebokatzea nahi duzula?" ++msgstr "" ++"Ziur zaude urrunetik kudeatutako “%s”(r)en kontua errebokatzea nahi duzula?" + + #: panels/user-accounts/cc-user-panel.c:650 + msgid "_Delete" +@@ -7382,7 +7693,8 @@ msgstr "Ziurtatu zaitez kontuen zerbitzua instalatuta eta gaituta dagoela." + msgid "" + "To make changes,\n" + "click the * icon first" +-msgstr "Aldaketak egiteko\n" ++msgstr "" ++"Aldaketak egiteko\n" + "aurrenik egin klik * ikonoan" + + #: panels/user-accounts/cc-user-panel.c:1361 +@@ -7394,7 +7706,8 @@ msgstr "Ezabatu hautatutako erabiltzailearen kontua" + msgid "" + "To delete the selected user account,\n" + "click the * icon first" +-msgstr "Hautatutako erabiltzailearen kontua ezabatzeko\n" ++msgstr "" ++"Hautatutako erabiltzailearen kontua ezabatzeko\n" + "aurrenik egin klik * ikonoan" + + #: panels/user-accounts/cc-user-panel.c:1545 +@@ -7434,7 +7747,9 @@ msgstr "_Administratzailea" + msgid "" + "Administrators can add and remove other users, and can change settings for " + "all users." +-msgstr "Administratzaileek beste erabiltzaile batzuk gehitu edo kendu ditzakete, eta erabiltzaile guztien ezarpenak aldatu ditzakete." ++msgstr "" ++"Administratzaileek beste erabiltzaile batzuk gehitu edo kendu ditzakete, eta " ++"erabiltzaile guztien ezarpenak aldatu ditzakete." + + #: panels/user-accounts/cc-user-panel.ui:333 + msgid "_Parental Controls" +@@ -7484,7 +7799,8 @@ msgstr "Gehitu edo kendu erabiltzaileak eta aldatu zure pasahitza" + #. 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 "Erabiltzaile-izena;Izena;Hatz-marka;Avatarra;Logotipoa;Aurpegia;Pasahitza;" ++msgstr "" ++"Erabiltzaile-izena;Izena;Hatz-marka;Avatarra;Logotipoa;Aurpegia;Pasahitza;" + + #. Translators: This button enrolls the computer in the domain in order to use enterprise logins. + #: panels/user-accounts/data/join-dialog.ui:39 +@@ -7500,7 +7816,8 @@ msgid "" + "In order to use enterprise logins, this computer needs to be\n" + "enrolled in the domain. Please have your network administrator\n" + "type their domain password here." +-msgstr "Enpresako saioa erabil ahal izateko, ordenagailu honek\n" ++msgstr "" ++"Enpresako saioa erabil ahal izateko, ordenagailu honek\n" + "domeinun erregistratuta egon behar du. Eskatu iezaiozu sareko\n" + "administratzaileari domeinuaren bere pasahitza idazteko hemen." + +@@ -7538,7 +7855,8 @@ msgstr "Saiatu pasahitza piska bat gehiago aldatzen." + #: panels/user-accounts/pw-utils.c:100 + msgctxt "Password hint" + msgid "A password without your user name would be stronger." +-msgstr "Zure erabiltzaile-izenik gabeko pasahitz bat askoz ere sendoagoa litzateke." ++msgstr "" ++"Zure erabiltzaile-izenik gabeko pasahitz bat askoz ere sendoagoa litzateke." + + #: panels/user-accounts/pw-utils.c:102 + msgctxt "Password hint" +@@ -7578,7 +7896,8 @@ msgstr "Saiatu hizki minuskulak gehiago erabiltzea." + #: panels/user-accounts/pw-utils.c:118 + msgctxt "Password hint" + msgid "Try to use more special characters, like punctuation." +-msgstr "Saiatu karaktere berezi gehiago erabiltzea, harridura ikurra bezalakoak." ++msgstr "" ++"Saiatu karaktere berezi gehiago erabiltzea, harridura ikurra bezalakoak." + + #: panels/user-accounts/pw-utils.c:120 + msgctxt "Password hint" +@@ -7595,7 +7914,9 @@ msgctxt "Password hint" + msgid "" + "Try to avoid repeating the same type of character: you need to mix up " + "letters, numbers and punctuation." +-msgstr "Saiatu karaktere mota berdina errepikatzea saihestea: hizki, zenbaki eta ikurrak nahastu behar dituzu." ++msgstr "" ++"Saiatu karaktere mota berdina errepikatzea saihestea: hizki, zenbaki eta " ++"ikurrak nahastu behar dituzu." + + #: panels/user-accounts/pw-utils.c:126 + msgctxt "Password hint" +@@ -7607,12 +7928,15 @@ msgctxt "Password hint" + msgid "" + "Password needs to be longer. Try to add more letters, numbers and " + "punctuation." +-msgstr "Pasahitzak luzeagoa izan behar du. Saiatu hizki, zenbaki eta ikurren arteko nahasketa gehiagorekin." ++msgstr "" ++"Pasahitzak luzeagoa izan behar du. Saiatu hizki, zenbaki eta ikurren arteko " ++"nahasketa gehiagorekin." + + #: panels/user-accounts/pw-utils.c:130 + msgctxt "Password hint" + msgid "Mix uppercase and lowercase and try to use a number or two." +-msgstr "Nahastu hizki maiuskulak eta minuskulak eta erabili zenbaki bat edo bi." ++msgstr "" ++"Nahastu hizki maiuskulak eta minuskulak eta erabili zenbaki bat edo bi." + + #: panels/user-accounts/pw-utils.c:132 + msgctxt "Password hint" +@@ -7673,7 +7997,9 @@ msgstr "Errore ezezaguna" + msgid "" + "The username should usually only consist of lower case letters from a-z, " + "digits and the following characters: - _" +-msgstr "Erabiltzaile-izenak honako karaktereak soilik eduki ditzake: alfabetoko a-z arteko hizki minuskulak, digituak eta '.', '-' eta '_' karaktereak." ++msgstr "" ++"Erabiltzaile-izenak honako karaktereak soilik eduki ditzake: alfabetoko a-z " ++"arteko hizki minuskulak, digituak eta '.', '-' eta '_' karaktereak." + + #: panels/user-accounts/user-utils.c:436 + msgid "Sorry, that user name isn’t available. Please try another." +@@ -7704,13 +8030,18 @@ msgstr "Mapatu botoiak funtzioetara" + msgid "" + "To edit a shortcut, choose the “Send Keystroke” action, press the keyboard " + "shortcut button and hold down the new keys or press Backspace to clear." +-msgstr "Laster-tekla bat editatzeko: aukeratu \"Bidali tekla sakatzea\" ekintza, sakatu teklatuaren laster-teklaren botoia eta eduki sakatuta tekla berriak edo sakatu Atzera-tekla garbitzeko." ++msgstr "" ++"Laster-tekla bat editatzeko: aukeratu \"Bidali tekla sakatzea\" ekintza, " ++"sakatu teklatuaren laster-teklaren botoia eta eduki sakatuta tekla berriak " ++"edo sakatu Atzera-tekla garbitzeko." + + #: panels/wacom/calibrator/calibrator.ui:61 + msgid "" + "Please tap the target markers as they appear on screen to calibrate the " + "tablet." +-msgstr "Ukitu helburuko markatzaileak pantailan agertzen diren ordenan taula kalibratzeko." ++msgstr "" ++"Ukitu helburuko markatzaileak pantailan agertzen diren ordenan taula " ++"kalibratzeko." + + #: panels/wacom/calibrator/calibrator.ui:78 + msgid "Mis-click detected, restarting…" +@@ -7779,7 +8110,9 @@ msgstr "Wacom taula" + + #: panels/wacom/gnome-wacom-panel.desktop.in.in:4 + msgid "Set button mappings and adjust stylus sensitivity for graphics tablets" +-msgstr "Ezarri botoi-mapatzea eta doitu arkatzaren sentikortasuna taula grafikoentzako" ++msgstr "" ++"Ezarri botoi-mapatzea eta doitu arkatzaren sentikortasuna taula " ++"grafikoentzako" + + #. 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 +@@ -7968,7 +8301,10 @@ msgid "" + "This version of Settings should only be used for development purposes. You " + "may experience incorrect system behavior, data loss, and other unexpected " + "issues. " +-msgstr "Ezarpenen bertsio hau garapenerako soilik erabili beharko litzateke. Sistemaren portaera okerra, datuen galera eta espero gabeko beste arazo batzuk gerta daitezke. " ++msgstr "" ++"Ezarpenen bertsio hau garapenerako soilik erabili beharko litzateke. " ++"Sistemaren portaera okerra, datuen galera eta espero gabeko beste arazo " ++"batzuk gerta daitezke. " + + #: shell/cc-window.ui:330 + msgid "Help" +@@ -8017,7 +8353,9 @@ msgstr "Irekiko den ezarpenen azken panelaren identifikatzailea" + msgid "" + "The identifier for the last Settings panel to be opened. Unrecognised values " + "will be ignored and the first panel in the list selected." +-msgstr "Irekiko den ezarpenen azken panelaren identifikatzailea. Ezagutzen ez diren balioak ezikusi egingo dira eta zerrendako lehen panela hautatuko da." ++msgstr "" ++"Irekiko den ezarpenen azken panelaren identifikatzailea. Ezagutzen ez diren " ++"balioak ezikusi egingo dira eta zerrendako lehen panela hautatuko da." + + #: shell/org.gnome.ControlCenter.gschema.xml:13 + msgid "Show warning when running a development build of Settings" +@@ -8026,7 +8364,9 @@ msgstr "Erakutsi abisu bat ezarpenen garapen-bertsio bat exekutatzean" + #: shell/org.gnome.ControlCenter.gschema.xml:14 + msgid "" + "Whether Settings should show a warning when running a development build." +-msgstr "Ezarpenek abisu bat erakutsi behar duen ala ez garapen-bertsio bat exekutatzen denean." ++msgstr "" ++"Ezarpenek abisu bat erakutsi behar duen ala ez garapen-bertsio bat " ++"exekutatzen denean." + + #. translators: + #. * The number of sound outputs on a particular device +diff --git a/po/fa.po b/po/fa.po +index c83473ac8..c701e1e47 100644 +--- a/po/fa.po ++++ b/po/fa.po +@@ -7,8 +7,26 @@ + # Arash Mousavi , 2011-2015, 2017. + # Danial Behzadi , 2018-2021. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# fa.po.multitasking (procman) #-#-#-#-#\n" ++"Project-Id-Version: procman\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-24 15:42+0000\n" ++"PO-Revision-Date: 2021-10-19 14:44+0330\n" ++"Last-Translator: eshagh \n" ++"Language-Team: Persian\n" ++"Language: fa\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-DamnedLies-Scope: partial\n" ++"X-Generator: Poedit 3.0\n" ++"X-Poedit-SourceCharset: utf-8\n" ++"#-#-#-#-# fa.po (procman) #-#-#-#-#\n" + "Project-Id-Version: procman\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -25,6 +43,92 @@ msgstr "" + "X-Generator: Poedit 2.4.2\n" + "X-Poedit-SourceCharset: utf-8\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "عمومی" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_گوشهٔ داغ" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "لمس گوشهٔ راست بالا برای گشودن نمای کلّی فعّالیت‌ها." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "لیه‌های صفحهٔ _فعّال" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "کشیدن پنجره‌ها مقابل لبه‌های بالا، راست و جپ صفحه برای تغییر اندازه‌شان." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "فضاهای کاری" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "فضاهای کاری _پویا" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "برداشتن خودکار فضاهای کاری خالی." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "تعداد _ثابت برای فضاهای کاری" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "مشخّص کردن تعداد فضاهای کاری ثابت." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_تعداد فضاهای کاری" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "چندنمایشگره" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "فضاهای کاری فقط روی نمایشگر _اصلی" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "فضاهای کاری روی _تمامی نمایشگرها" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "تعویض برنامه" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "شامل برنامه‌ها از تمامی _فضاهای کاری" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "شامل برنامه‌ها فقط از فضای کاری _کنونی" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "چندوظیفگی" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "مدیریت ترجیحات برای بهره‌وری و چندوظیفگی" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"Multitasking;Multitask;Productivity;Customize;Desktop;چندوظیفگی;بهره‌وری;" ++"شخصی‌سازی;میزکار;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "گذرگاه سامانه" +@@ -90,8 +194,8 @@ msgstr "می‌تواند تنظیمات را تغییر دهد" + #: panels/applications/cc-applications-panel.c:851 + #, c-format + msgid "" +-"%s has the following permissions built-in. These cannot be altered. If you are " +-"concerned about these permissions, consider removing this application." ++"%s has the following permissions built-in. These cannot be altered. If you " ++"are concerned about these permissions, consider removing this application." + msgstr "" + "%s این اجازه‌ها را به صورت توکار دارد و نمی‌توان تغییرش داد. در صورتی که نگران " + "این اجازه‌هایید، حذف این برنامه را در نظر بگیرید." +@@ -176,8 +280,8 @@ msgstr "اجازه‌ها و دسترسی" + + #: panels/applications/cc-applications-panel.ui:106 + msgid "" +-"Data and services that this app has asked for access to and permissions that it " +-"requires." ++"Data and services that this app has asked for access to and permissions that " ++"it requires." + msgstr "" + "داده‌ها و خدماتی که این کاره برای دسترسی به آن‌ها درخواست کرده و اجازه‌هایی که " + "نیاز دارد." +@@ -231,11 +335,11 @@ msgstr "قابل تغییر نیست" + + #: panels/applications/cc-applications-panel.ui:175 + msgid "" +-"Individual permissions for applications can be reviewed in the Privacy Settings." ++"Individual permissions for applications can be reviewed in the Privacy Settings." + msgstr "" +-"اجازه‌های تکّی برای برنامه‌ها می‌توانند در تنظیمات محرمانگی " +-"بازبینی شوند." ++"اجازه‌های تکّی برای برنامه‌ها می‌توانند در تنظیمات محرمانگی بازبینی شوند." + + #: panels/applications/cc-applications-panel.ui:199 + msgid "Integration" +@@ -308,7 +412,8 @@ msgid "No results found" + msgstr "هیچ نتیجه‌ای پیدا نشد" + + #: panels/applications/cc-applications-panel.ui:484 +-#: panels/keyboard/cc-keyboard-shortcut-dialog.ui:177 shell/cc-panel-list.ui:132 ++#: panels/keyboard/cc-keyboard-shortcut-dialog.ui:177 ++#: shell/cc-panel-list.ui:132 + msgid "Try a different search" + msgstr "جست‌وجویی دیگر را بیازمایید" + +@@ -356,15 +461,19 @@ msgstr "گزینش یک عکس" + #: panels/background/cc-background-chooser.c:348 + #: panels/color/cc-color-calibrate.ui:25 panels/color/cc-color-panel.c:238 + #: panels/color/cc-color-panel.c:886 panels/color/cc-color-panel.ui:657 +-#: panels/common/cc-language-chooser.ui:25 panels/display/cc-display-panel.c:1003 ++#: panels/common/cc-language-chooser.ui:25 ++#: panels/display/cc-display-panel.c:1003 + #: panels/info-overview/cc-info-overview-panel.ui:242 + #: panels/keyboard/cc-input-chooser.ui:11 +-#: panels/network/cc-wifi-hotspot-dialog.ui:122 panels/network/cc-wifi-panel.c:866 ++#: panels/network/cc-wifi-hotspot-dialog.ui:122 ++#: panels/network/cc-wifi-panel.c:866 + #: panels/network/connection-editor/connection-editor.ui:17 + #: panels/network/connection-editor/vpn-helpers.c:176 + #: panels/network/connection-editor/vpn-helpers.c:299 +-#: panels/network/net-device-wifi.c:854 panels/printers/new-printer-dialog.ui:45 +-#: panels/printers/pp-details-dialog.c:235 panels/region/cc-format-chooser.ui:28 ++#: panels/network/net-device-wifi.c:854 ++#: panels/printers/new-printer-dialog.ui:45 ++#: panels/printers/pp-details-dialog.c:235 ++#: panels/region/cc-format-chooser.ui:28 + #: panels/search/cc-search-locations-dialog.c:639 + #: panels/sharing/cc-sharing-panel.c:396 panels/usage/cc-usage-panel.c:133 + #: panels/user-accounts/cc-add-user-dialog.ui:28 +@@ -380,7 +489,8 @@ msgstr "_لغو" + + #: panels/background/cc-background-chooser.c:349 + #: panels/network/connection-editor/vpn-helpers.c:177 +-#: panels/printers/pp-details-dialog.c:236 panels/sharing/cc-sharing-panel.c:397 ++#: panels/printers/pp-details-dialog.c:236 ++#: panels/sharing/cc-sharing-panel.c:397 + #: panels/user-accounts/cc-avatar-chooser.c:224 + msgid "_Open" + msgstr "گشودن" +@@ -489,8 +599,8 @@ msgid "" + "Use of the camera allows applications to capture photos and video. Disabling " + "the camera may cause some applications to not function properly." + msgstr "" +-"استفاده از دوربین به برنامه‌ها اجازه می‌دهد که عکس و ویدیو ضبط کنند. ممکن است از " +-"کار انداختن دوربین باعث کارکرد نادرست برخی برنامه‌ها شود." ++"استفاده از دوربین به برنامه‌ها اجازه می‌دهد که عکس و ویدیو ضبط کنند. ممکن است " ++"از کار انداختن دوربین باعث کارکرد نادرست برخی برنامه‌ها شود." + + #: panels/camera/cc-camera-panel.ui:85 + msgid "Allow the applications below to use your camera." +@@ -509,11 +619,11 @@ msgstr "محافظت از عکس‌هایتان" + #: panels/camera/gnome-camera-panel.desktop.in.in:20 + #: panels/microphone/gnome-microphone-panel.desktop.in.in:20 + msgid "" +-"screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;network;" +-"identity;" ++"screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;" ++"network;identity;" + msgstr "" +-"screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;network;" +-"identity;صفحه;قفل;کرش;خصوصی;اخیر;موقت;نمایه;نام;شبکه;هویت;" ++"screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;" ++"network;identity;صفحه;قفل;کرش;خصوصی;اخیر;موقت;نمایه;نام;شبکه;هویت;" + + #. TRANSLATORS: The user has to attach the sensor to the screen + #: panels/color/cc-color-calibrate.c:347 +@@ -532,7 +642,8 @@ msgstr "افزارهٔ واسنجیتان را به موقعیت واسنجی م + #. * dial or switch manually. We also show a picture showing them + #. * what to do... + #: panels/color/cc-color-calibrate.c:359 +-msgid "Move your calibration device to the surface position and press “Continue”" ++msgid "" ++"Move your calibration device to the surface position and press “Continue”" + msgstr "افزارهٔ واسنجیتان را به موقعیت سطح منتقل کرده و «ادامه» را بزنید" + + #. TRANSLATORS: on some hardware e.g. Lenovo W700 the sensor +@@ -776,11 +887,12 @@ msgid "" + "color profile." + msgstr "" + "واسنجی، نمایه‌ای ایجاد خواهد کرد که می‌توانید از آن برای مدیریت رنگ صفحه‌تان " +-"استفاده کنید. هر چه زمان بیش‌تری برای واسنجی بگذارید، کیفت نمایهٔ رنگیتان بیش‌تر " +-"خواهد بود." ++"استفاده کنید. هر چه زمان بیش‌تری برای واسنجی بگذارید، کیفت نمایهٔ رنگیتان " ++"بیش‌تر خواهد بود." + + #: panels/color/cc-color-panel.ui:38 +-msgid "You will not be able to use your computer while calibration takes place." ++msgid "" ++"You will not be able to use your computer while calibration takes place." + msgstr "تا پایان واسنجی نمی‌توانید از رایانه‌تان استفاده کنید." + + #. This is the approximate time it takes to calibrate the display. +@@ -830,8 +942,8 @@ msgid "" + "Please set the display to a brightness that is typical for you. Color " + "management will be most accurate at this brightness level." + msgstr "" +-"لطفا روشنایی صفحه‌نمایش به میزان که برای شما مناسب است تنظیم کنید. مدیریت رنگ در " +-"این سطح روشنایی دقیق‌تر خواهد بود." ++"لطفا روشنایی صفحه‌نمایش به میزان که برای شما مناسب است تنظیم کنید. مدیریت رنگ " ++"در این سطح روشنایی دقیق‌تر خواهد بود." + + #: panels/color/cc-color-panel.ui:307 + msgid "" +@@ -846,11 +958,11 @@ msgstr "روشنایی نمایشگر" + + #: panels/color/cc-color-panel.ui:333 + msgid "" +-"You can use a color profile on different computers, or even create profiles for " +-"different lighting conditions." ++"You can use a color profile on different computers, or even create profiles " ++"for different lighting conditions." + msgstr "" +-"می‌توانید از یک نمایهٔ رنگی روی رایانه‌های مختلف استفاده کرده یا حتا برای حالت‌های " +-"روشنایی متفاوت، نمایه بسازید." ++"می‌توانید از یک نمایهٔ رنگی روی رایانه‌های مختلف استفاده کرده یا حتا برای " ++"حالت‌های روشنایی متفاوت، نمایه بسازید." + + #: panels/color/cc-color-panel.ui:348 + msgid "Profile Name:" +@@ -886,9 +998,9 @@ msgid "" + "\">GNU/Linux, Apple OS X and Microsoft Windows systems useful." + msgstr "" +-"ممکن است این راهنماهای ساخت نمایه روی سامانه‌های گنو/لینوکس، اواس ده اپل و ویندوز مایکروسافت " +-"مفید باشند." ++"ممکن است این راهنماهای ساخت نمایه روی سامانه‌های گنو/" ++"لینوکس، اواس ده اپل و ویندوز " ++"مایکروسافت مفید باشند." + + #: panels/color/cc-color-panel.ui:607 + msgid "Summary" +@@ -914,8 +1026,8 @@ msgid "" + "Problems detected. The profile may not work correctly. Show " + "details." + msgstr "" +-"مشکلاتی شناسایی شدند. ممکن است نمایه درست کار نکند. نمایش جزییات." ++"مشکلاتی شناسایی شدند. ممکن است نمایه درست کار نکند. نمایش " ++"جزییات." + + #: panels/color/cc-color-panel.ui:788 + msgid "Each device needs an up to date color profile to be color managed." +@@ -1136,7 +1248,8 @@ msgid "Color" + msgstr "رنگ" + + #: panels/color/gnome-color-panel.desktop.in.in:4 +-msgid "Calibrate the color of your devices, such as displays, cameras or printers" ++msgid "" ++"Calibrate the color of your devices, such as displays, cameras or printers" + msgstr "رنگ افزاره‌هایتان نظیر نمایشگرها، دوربین‌ها یا چاپگرها را واسنجی کنید" + + #. Translators: Search terms to find the Color panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! +@@ -1161,7 +1274,8 @@ msgstr "_انتخاب" + msgid "No languages found" + msgstr "هیچ زبانی پیدا نشد" + +-#: panels/common/cc-language-chooser.ui:82 panels/keyboard/cc-input-chooser.c:178 ++#: panels/common/cc-language-chooser.ui:82 ++#: panels/keyboard/cc-input-chooser.c:178 + msgid "More…" + msgstr "بیش‌تر…" + +@@ -1512,8 +1626,8 @@ msgid "" + "Sending reports of technical problems helps us improve %s. Reports are sent " + "anonymously and are scrubbed of personal data. %s" + msgstr "" +-"ارسال گزارش‌های مشکلات فنی، به بهبود %s کمک می‌کند. گزارش‌ها به صورت ناشناس ارسال " +-"شده و عاری از اطلاعات شخصیند. %s" ++"ارسال گزارش‌های مشکلات فنی، به بهبود %s کمک می‌کند. گزارش‌ها به صورت ناشناس " ++"ارسال شده و عاری از اطلاعات شخصیند. %s" + + #: panels/diagnostics/cc-diagnostics-panel.ui:28 + msgid "Problem Reporting" +@@ -1538,12 +1652,12 @@ msgstr "گزارش مشکلاتتان" + #: panels/lock/gnome-lock-panel.desktop.in.in:20 + #: panels/usage/gnome-usage-panel.desktop.in.in:20 + msgid "" +-"screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;network;" +-"identity;privacy;" ++"screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;" ++"network;identity;privacy;" + msgstr "" +-"screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;network;" +-"identity;privacy;صفحه;قفل;کرش;خصوصی;اخیر;موقت;نمایه;نام;شبکه;هویت;محرمانگی" +-"\"حریم شخصی;حریم خصوصی;" ++"screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;" ++"network;identity;privacy;صفحه;قفل;کرش;خصوصی;اخیر;موقت;نمایه;نام;شبکه;هویت;" ++"محرمانگی\"حریم شخصی;حریم خصوصی;" + + #: panels/display/cc-display-panel.c:1014 + #: panels/network/connection-editor/connection-editor.ui:27 +@@ -1566,7 +1680,8 @@ msgstr "می‌تواند به دلیلی محدودیت‌های سخت‌اف + msgid "Single Display" + msgstr "نمایشگر تکی" + +-#: panels/display/cc-display-panel.ui:108 panels/display/cc-display-panel.ui:310 ++#: panels/display/cc-display-panel.ui:108 ++#: panels/display/cc-display-panel.ui:310 + msgid "Join Displays" + msgstr "پیوند نمایشگرها" + +@@ -1588,8 +1703,8 @@ msgstr "نمایشگر اصلی" + + #: panels/display/cc-display-panel.ui:243 + msgid "" +-"Drag displays to match your physical display setup. Select a display to change " +-"its settings." ++"Drag displays to match your physical display setup. Select a display to " ++"change its settings." + msgstr "" + "نمایشگرها را برای تطبیق با وضعیت واقعی بکشید. برای تغییر تنظیمات یک نمایشگر، " + "برگزینیدش." +@@ -1685,11 +1800,11 @@ msgstr "تا فردا از کار بیفتد" + + #: panels/display/cc-night-light-page.ui:88 + msgid "" +-"Night light makes the screen color warmer. This can help to prevent eye strain " +-"and sleeplessness." ++"Night light makes the screen color warmer. This can help to prevent eye " ++"strain and sleeplessness." + msgstr "" +-"نور شب رنگ صفحه را گرم‌تر می‌کند. این کار به پیش‌گیری از آسیب چشمی و بی‌خوابی کمک " +-"می کند." ++"نور شب رنگ صفحه را گرم‌تر می‌کند. این کار به پیش‌گیری از آسیب چشمی و بی‌خوابی " ++"کمک می کند." + + #: panels/display/cc-night-light-page.ui:127 + msgid "Schedule" +@@ -1703,7 +1818,8 @@ msgstr "غروب تا طلوع" + msgid "Manual Schedule" + msgstr "زمان‌بندی دستی" + +-#: panels/display/cc-night-light-page.ui:148 panels/region/cc-format-preview.ui:40 ++#: panels/display/cc-night-light-page.ui:148 ++#: panels/region/cc-format-preview.ui:40 + msgid "Times" + msgstr "زمان‌ها" + +@@ -1757,8 +1873,8 @@ msgid "" + "redshift;color;sunset;sunrise;" + msgstr "" + "Panel;Projector;xrandr;Screen;Resolution;Refresh;Monitor;Night;Light;Blue;" +-"redshift;color;sunset;sunrise;تابلو;پروژکتور;صفحه;مانیتور;نمایشگر;تفکیک;شب;نور;" +-"آبی;رنگ;غروب;طلوع;" ++"redshift;color;sunset;sunrise;تابلو;پروژکتور;صفحه;مانیتور;نمایشگر;تفکیک;شب;" ++"نور;آبی;رنگ;غروب;طلوع;" + + #: panels/info-overview/cc-info-overview-panel.c:418 + #: panels/info-overview/cc-info-overview-panel.c:433 +@@ -1864,8 +1980,8 @@ msgid "" + "The device name is used to identify this device when it is viewed over the " + "network, or when pairing Bluetooth devices." + msgstr "" +-"نام دستگاه برای تشخیص این دستگاه هنگام دیده شدن روی شبکه یا جفت شدن افزاره‌های " +-"بلوتوثی استفاده می‌شود." ++"نام دستگاه برای تشخیص این دستگاه هنگام دیده شدن روی شبکه یا جفت شدن " ++"افزاره‌های بلوتوثی استفاده می‌شود." + + #: panels/info-overview/cc-info-overview-panel.ui:233 + msgid "_Rename" +@@ -1886,13 +2002,13 @@ msgstr "دیدن اطّلاعات دربارهٔ سامانه‌تان" + #. sure that you use the same "translation" for those keywords + #: panels/info-overview/gnome-info-overview-panel.desktop.in.in:23 + msgid "" +-"device;system;information;hostname;memory;processor;version;default;application;" +-"preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;" ++"device;system;information;hostname;memory;processor;version;default;" ++"application;preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;" + msgstr "" +-"device;system;information;hostname;memory;processor;version;default;application;" +-"preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;دستگاه;سیستم;" +-"سامانه;اطلاعات;نام دامنه;حافظه;پردازشگر;نسخه;پیش‌گزیده;برنامه;یدکی;ترجیح‌شده;سی‌دی;" +-"دی‌وی‌دی;یواس‌بی;صوت;ویدیو;دیسک;قابل حذف;رسانه;اجرای خودکار;" ++"device;system;information;hostname;memory;processor;version;default;" ++"application;preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;" ++"دستگاه;سیستم;سامانه;اطلاعات;نام دامنه;حافظه;پردازشگر;نسخه;پیش‌گزیده;برنامه;" ++"یدکی;ترجیح‌شده;سی‌دی;دی‌وی‌دی;یواس‌بی;صوت;ویدیو;دیسک;قابل حذف;رسانه;اجرای خودکار;" + + #: panels/keyboard/00-multimedia.xml.in:2 + msgid "Sound and Media" +@@ -2113,63 +2229,71 @@ msgstr "برداشتن" + msgid "Custom Shortcuts" + msgstr "میان‌برهای سفارشی" + +-#: panels/keyboard/cc-keyboard-panel.c:71 panels/keyboard/cc-keyboard-panel.ui:179 ++#: panels/keyboard/cc-keyboard-panel.c:71 ++#: panels/keyboard/cc-keyboard-panel.ui:179 + msgid "Alternate Characters Key" + msgstr "کلید نویسه‌های جایگزین" + + #: panels/keyboard/cc-keyboard-panel.c:72 + msgid "" +-"The alternate characters key can be used to enter additional characters. These " +-"are sometimes printed as a third-option on your keyboard." ++"The alternate characters key can be used to enter additional characters. " ++"These are sometimes printed as a third-option on your keyboard." + msgstr "" +-"کلید نویسهٔ جایگزین می‌تواند برای ورود نویسه‌های اضافی استفاده شود. گاهی به عنوان " +-"گزینهٔ سوم روی صفحه‌کلیدتان چاپ شده‌اند." ++"کلید نویسهٔ جایگزین می‌تواند برای ورود نویسه‌های اضافی استفاده شود. گاهی به " ++"عنوان گزینهٔ سوم روی صفحه‌کلیدتان چاپ شده‌اند." + +-#: panels/keyboard/cc-keyboard-panel.c:74 panels/keyboard/cc-keyboard-panel.c:92 ++#: panels/keyboard/cc-keyboard-panel.c:74 ++#: panels/keyboard/cc-keyboard-panel.c:92 + msgctxt "keyboard key" + msgid "Left Alt" + msgstr "دگرساز چپ" + +-#: panels/keyboard/cc-keyboard-panel.c:75 panels/keyboard/cc-keyboard-panel.c:93 ++#: panels/keyboard/cc-keyboard-panel.c:75 ++#: panels/keyboard/cc-keyboard-panel.c:93 + msgctxt "keyboard key" + msgid "Right Alt" + msgstr "دگرساز راست" + +-#: panels/keyboard/cc-keyboard-panel.c:76 panels/keyboard/cc-keyboard-panel.c:94 ++#: panels/keyboard/cc-keyboard-panel.c:76 ++#: panels/keyboard/cc-keyboard-panel.c:94 + msgctxt "keyboard key" + msgid "Left Super" + msgstr "سوپر چپ" + +-#: panels/keyboard/cc-keyboard-panel.c:77 panels/keyboard/cc-keyboard-panel.c:95 ++#: panels/keyboard/cc-keyboard-panel.c:77 ++#: panels/keyboard/cc-keyboard-panel.c:95 + msgctxt "keyboard key" + msgid "Right Super" + msgstr "سوپر راست" + +-#: panels/keyboard/cc-keyboard-panel.c:78 panels/keyboard/cc-keyboard-panel.c:96 ++#: panels/keyboard/cc-keyboard-panel.c:78 ++#: panels/keyboard/cc-keyboard-panel.c:96 + msgctxt "keyboard key" + msgid "Menu key" + msgstr "کلید فهرست" + +-#: panels/keyboard/cc-keyboard-panel.c:79 panels/keyboard/cc-keyboard-panel.c:97 ++#: panels/keyboard/cc-keyboard-panel.c:79 ++#: panels/keyboard/cc-keyboard-panel.c:97 + msgctxt "keyboard key" + msgid "Right Ctrl" + msgstr "مهار راست" + +-#: panels/keyboard/cc-keyboard-panel.c:87 panels/keyboard/cc-keyboard-panel.ui:204 ++#: panels/keyboard/cc-keyboard-panel.c:87 ++#: panels/keyboard/cc-keyboard-panel.ui:204 + msgid "Compose Key" + msgstr "کلید ایجاد" + + #: panels/keyboard/cc-keyboard-panel.c:88 + msgid "" +-"The compose key allows a wide variety of characters to be entered. To use it, " +-"press compose then a sequence of characters. For example, compose key followed " +-"by C and o will enter ©, a followed by ' " +-"will enter á." ++"The compose key allows a wide variety of characters to be entered. To use " ++"it, press compose then a sequence of characters. For example, compose key " ++"followed by C and o will enter ©, a followed by " ++"' will enter á." + msgstr "" +-"دکمهٔ ایجاد، امکان ورود طیف وسیعی از نویسه‌ها را می‌دهد. برای استفاده از آن، ایجاد " +-"و به دنبالش، دنباله‌ای از نویسه‌ها را بفشارید. برای مثال، کلید ایجاد به همراه " +-"C و o، نویسهٔ © و a به همراه '، نویسهٔ á را وارد می‌کند." ++"دکمهٔ ایجاد، امکان ورود طیف وسیعی از نویسه‌ها را می‌دهد. برای استفاده از آن، " ++"ایجاد و به دنبالش، دنباله‌ای از نویسه‌ها را بفشارید. برای مثال، کلید ایجاد به " ++"همراه C و o، نویسهٔ © و a به همراه '، " ++"نویسهٔ á را وارد می‌کند." + + #: panels/keyboard/cc-keyboard-panel.c:98 + msgctxt "keyboard key" +@@ -2238,7 +2362,8 @@ msgstr "بازنشانی تمام میان‌برها؟" + + #: panels/keyboard/cc-keyboard-shortcut-dialog.c:426 + msgid "" +-"Resetting the shortcuts may affect your custom shortcuts. This cannot be undone." ++"Resetting the shortcuts may affect your custom shortcuts. This cannot be " ++"undone." + msgstr "" + "ممکن است بازنشانی میان‌برها روی میان‌برهای شخصیتان اثر بگذارد. این کار قابل " + "بازگشت نیست." +@@ -2364,10 +2489,11 @@ msgstr "نمایش و تغییر میان‌برهای صفحه‌کلید و ت + + #. 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;" ++msgid "" ++"Shortcut;Workspace;Window;Resize;Zoom;Contrast;Input;Source;Lock;Volume;" + msgstr "" +-"Shortcut;Workspace;Window;Resize;Zoom;Contrast;Input;Source;Lock;Volume;میانبر;" +-"میان‌بر;فضای کاری;پنجره;اندازه;بزرگ‌نمایی;تضاد;ورودی;منبع;قفل;صدا;" ++"Shortcut;Workspace;Window;Resize;Zoom;Contrast;Input;Source;Lock;Volume;" ++"میانبر;میان‌بر;فضای کاری;پنجره;اندازه;بزرگ‌نمایی;تضاد;ورودی;منبع;قفل;صدا;" + + #: panels/location/cc-location-panel.ui:31 + msgid "Location services turned off" +@@ -2382,16 +2508,16 @@ msgid "" + "Location services allow applications to know your location. Using Wi-Fi and " + "mobile broadband increases accuracy." + msgstr "" +-"خدمت‌های موقعیت‌یابی می‌گذارند برنامه‌ها موقعیتتان را بدانند. استفاده از Wi-Fi یا " +-"پهن‌باند همراه، دقّت را افزایش می‌دهد." ++"خدمت‌های موقعیت‌یابی می‌گذارند برنامه‌ها موقعیتتان را بدانند. استفاده از Wi-Fi " ++"یا پهن‌باند همراه، دقّت را افزایش می‌دهد." + + #: panels/location/cc-location-panel.ui:81 + msgid "" +-"Uses Mozilla Location Service: Privacy Policy" ++"Uses Mozilla Location Service: Privacy Policy" + msgstr "" +-"از خدمات مکانی موزیلا استفاده می‌کند: سیاست محرمانگی" ++"از خدمات مکانی موزیلا استفاده می‌کند: سیاست محرمانگی" + + #: panels/location/cc-location-panel.ui:93 + msgid "Allow the applications below to determine your location." +@@ -2410,7 +2536,8 @@ msgstr "محافظت از اطّلاعات موقعیتتان" + msgid "" + "Automatically locking the screen prevents others from accessing the computer " + "while you're away." +-msgstr "قفل خودکار صفحه از دسترسی دیگران به رایانه هنگام نبودنتان جلوگیری می‌کند." ++msgstr "" ++"قفل خودکار صفحه از دسترسی دیگران به رایانه هنگام نبودنتان جلوگیری می‌کند." + + #: panels/lock/cc-lock-panel.ui:44 + msgid "Blank Screen Delay" +@@ -2575,10 +2702,11 @@ msgstr "هیچ برنامه‌ای نمی‌تواند صدا ضبط کند." + #: panels/microphone/cc-microphone-panel.ui:75 + msgid "" + "Use of the microphone allows applications to record and listen to audio. " +-"Disabling the microphone may cause some applications to not function properly." ++"Disabling the microphone may cause some applications to not function " ++"properly." + msgstr "" +-"استفاده از میکروفون به برنامه‌ها اجازه می‌دهد که صدا را ضبط و به آن گوش کنند. از " +-"کار انداختن میکروفون ممکن است باعث کارکرد نادرست برخی برنامه‌ها شود." ++"استفاده از میکروفون به برنامه‌ها اجازه می‌دهد که صدا را ضبط و به آن گوش کنند. " ++"از کار انداختن میکروفون ممکن است باعث کارکرد نادرست برخی برنامه‌ها شود." + + #: panels/microphone/cc-microphone-panel.ui:85 + msgid "Allow the applications below to use your microphone." +@@ -2592,11 +2720,6 @@ msgstr "هیچ برنامه‌ای برای دسترسی به میکروفون + msgid "Protect your conversations" + msgstr "محافظت از گفت‌وگوهایتان" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "عمومی" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "دکمهٔ اصلی" +@@ -2696,15 +2819,16 @@ msgid "Mouse & Touchpad" + msgstr "موشی و صفحه‌لمسی" + + #: panels/mouse/gnome-mouse-panel.desktop.in.in:4 +-msgid "Change your mouse or touchpad sensitivity and select right or left-handed" ++msgid "" ++"Change your mouse or touchpad sensitivity and select right or left-handed" + msgstr "تغییر میزان حساسیت موشی یا صفحه‌لمسی و انتخاب راست‌دست یا چپ‌دست بودن" + + #. 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;Pointer;Click;Tap;Double;Button;Trackball;Scroll;صفحه‌جهت‌ده;نشانگر;کلیک;" +-"ضربه;دوبار;دکمه;صفحه ردیاب;لغزش;" ++"Trackpad;Pointer;Click;Tap;Double;Button;Trackball;Scroll;صفحه‌جهت‌ده;نشانگر;" ++"کلیک;ضربه;دوبار;دکمه;صفحه ردیاب;لغزش;" + + #: panels/network/cc-network-panel.c:661 panels/network/cc-wifi-panel.ui:307 + msgid "Oops, something has gone wrong. Please contact your software vendor." +@@ -2760,7 +2884,8 @@ msgid "Connected" + msgstr "متّصل" + + #: panels/network/cc-wifi-connection-row.ui:100 +-#: panels/network/net-device-ethernet.c:327 panels/network/network-bluetooth.ui:76 ++#: panels/network/net-device-ethernet.c:327 ++#: panels/network/network-bluetooth.ui:76 + #: panels/network/network-ethernet.ui:111 panels/network/network-mobile.ui:450 + #: panels/network/network-vpn.ui:77 + msgid "Options…" +@@ -2770,11 +2895,11 @@ msgstr "گزینه‌ها…" + #: panels/network/cc-wifi-hotspot-dialog.c:134 + #, c-format + msgid "" +-"Turning on the hotspot will disconnect from %s, and it will not be possible to " +-"access the internet through Wi-Fi." ++"Turning on the hotspot will disconnect from %s, and it will not be possible " ++"to access the internet through Wi-Fi." + msgstr "" +-"روشن کردن نقطهٔ داغ، موجب قطع شدن از %s شده و قادر به دسترسی به اینترنت از طریق " +-"وای‌فای نیستید." ++"روشن کردن نقطهٔ داغ، موجب قطع شدن از %s شده و قادر به دسترسی به اینترنت از " ++"طریق وای‌فای نیستید." + + #: panels/network/cc-wifi-hotspot-dialog.c:265 + msgid "Must have a minimum of 8 characters" +@@ -2786,9 +2911,9 @@ msgstr "روشن کردن نقطهٔ داغ بی‌سیم؟" + + #: panels/network/cc-wifi-hotspot-dialog.ui:19 + msgid "" +-"Wi-Fi hotspot allows others to share your internet connection, by creating a Wi-" +-"Fi network that they can connect to. To do this, you must have an internet " +-"connection through a source other than Wi-Fi." ++"Wi-Fi hotspot allows others to share your internet connection, by creating a " ++"Wi-Fi network that they can connect to. To do this, you must have an " ++"internet connection through a source other than Wi-Fi." + msgstr "" + "نقطهٔ داغ وای‌فای با ایجاد یک شبکهٔ وای‌فای، به دیگران اجازهٔ هم‌رسانی اتّصال " + "اینترنتتان را می‌دهد. برای این کار باید اتّصال اینترنتی از منبعی غیر از وای‌فای " +@@ -2801,7 +2926,8 @@ msgstr "نام شبکه" + #. Translators: This is a password needed for printing. + #: panels/network/cc-wifi-hotspot-dialog.ui:69 + #: panels/printers/authentication-dialog.ui:96 +-#: panels/printers/new-printer-dialog.ui:389 panels/printers/pp-jobs-dialog.ui:70 ++#: panels/printers/new-printer-dialog.ui:389 ++#: panels/printers/pp-jobs-dialog.ui:70 + #: panels/user-accounts/cc-add-user-dialog.ui:249 + msgid "Password" + msgstr "گذرواژه" +@@ -2904,13 +3030,13 @@ msgstr "پایدار" + + #: panels/network/connection-editor/ce-page.c:241 + msgid "" +-"The MAC address entered here will be used as hardware address for the network " +-"device this connection is activated on. This feature is known as MAC cloning or " +-"spoofing. Example: 00:11:22:33:44:55" ++"The MAC address entered here will be used as hardware address for the " ++"network device this connection is activated on. This feature is known as MAC " ++"cloning or spoofing. Example: 00:11:22:33:44:55" + msgstr "" +-"نشانی مک وارد شده در این‌جا به عنوان نشانی سخت‌افزاری برای افزارهٔ شبکه‌ای که این " +-"اتّصال رویش فعّال است استفاده خواهد شد. این ویژگی به نام MAC cloning یا spoofing " +-"شناخته می‌شود. مثال: 00:11:22:33:44:55" ++"نشانی مک وارد شده در این‌جا به عنوان نشانی سخت‌افزاری برای افزارهٔ شبکه‌ای که " ++"این اتّصال رویش فعّال است استفاده خواهد شد. این ویژگی به نام MAC cloning یا " ++"spoofing شناخته می‌شود. مثال: 00:11:22:33:44:55" + + #: panels/network/connection-editor/ce-page.c:399 + #, c-format +@@ -3019,32 +3145,36 @@ msgstr "عالی" + + #: panels/network/connection-editor/ce-page-details.c:410 + #: panels/network/connection-editor/details-page.ui:108 +-#: panels/network/net-device-ethernet.c:149 panels/network/net-device-mobile.c:447 ++#: panels/network/net-device-ethernet.c:149 ++#: panels/network/net-device-mobile.c:447 + msgid "IPv4 Address" + msgstr "نشانی IPv4" + + #: panels/network/connection-editor/ce-page-details.c:411 + #: panels/network/connection-editor/details-page.ui:126 +-#: panels/network/net-device-ethernet.c:150 panels/network/net-device-mobile.c:448 +-#: panels/network/network-mobile.ui:218 ++#: panels/network/net-device-ethernet.c:150 ++#: panels/network/net-device-mobile.c:448 panels/network/network-mobile.ui:218 + msgid "IPv6 Address" + msgstr "نشانی IPv6" + + #: panels/network/connection-editor/ce-page-details.c:414 + #: panels/network/connection-editor/ce-page-details.c:415 + #: panels/network/net-device-ethernet.c:152 +-#: panels/network/net-device-ethernet.c:154 panels/network/net-device-mobile.c:451 ++#: panels/network/net-device-ethernet.c:154 ++#: panels/network/net-device-mobile.c:451 + #: panels/network/net-device-mobile.c:452 panels/network/network-mobile.ui:201 + msgid "IP Address" + msgstr "نشانی IP" + + #: panels/network/connection-editor/ce-page-details.c:419 +-#: panels/network/net-device-ethernet.c:163 panels/network/net-device-mobile.c:456 ++#: panels/network/net-device-ethernet.c:163 ++#: panels/network/net-device-mobile.c:456 + msgid "DNS4" + msgstr "ساناد۴" + + #: panels/network/connection-editor/ce-page-details.c:420 +-#: panels/network/net-device-ethernet.c:164 panels/network/net-device-mobile.c:457 ++#: panels/network/net-device-ethernet.c:164 ++#: panels/network/net-device-mobile.c:457 + msgid "DNS6" + msgstr "ساناد۶" + +@@ -3055,7 +3185,8 @@ msgstr "ساناد۶" + #: panels/network/connection-editor/ip4-page.ui:211 + #: panels/network/connection-editor/ip6-page.ui:225 + #: panels/network/net-device-ethernet.c:166 +-#: panels/network/net-device-ethernet.c:168 panels/network/net-device-mobile.c:459 ++#: panels/network/net-device-ethernet.c:168 ++#: panels/network/net-device-mobile.c:459 + #: panels/network/net-device-mobile.c:460 panels/network/network-mobile.ui:253 + #: panels/network/network-mobile.ui:271 + msgid "DNS" +@@ -3158,7 +3289,8 @@ msgid "Supported Frequencies" + msgstr "بسامدهای پشتیبانی شده" + + #: panels/network/connection-editor/details-page.ui:180 +-#: panels/network/net-device-ethernet.c:160 panels/network/network-mobile.ui:235 ++#: panels/network/net-device-ethernet.c:160 ++#: panels/network/network-mobile.ui:235 + msgid "Default Route" + msgstr "بسامدهای پشتیبانی شده" + +@@ -3182,7 +3314,8 @@ msgstr "اتّصال _اندازه‌گیری‌شده: دارای محدویت + msgid "" + "Software updates and other large downloads will not be started automatically." + msgstr "" +-"به‌روز رسانی‌های نرم‌افزاری و دیگر بارگیری‌های بزرگ به صورت خودکار شروع نخواهند شد." ++"به‌روز رسانی‌های نرم‌افزاری و دیگر بارگیری‌های بزرگ به صورت خودکار شروع نخواهند " ++"شد." + + #: panels/network/connection-editor/ethernet-page.ui:25 + #: panels/network/connection-editor/vpn-page.ui:23 +@@ -3221,8 +3354,8 @@ msgid "Link-Local Only" + msgstr "فقط Link-Local" + + #: panels/network/connection-editor/ip4-page.ui:69 +-#: panels/network/connection-editor/ip6-page.ui:83 panels/network/net-proxy.c:71 +-#: panels/network/network-proxy.ui:118 ++#: panels/network/connection-editor/ip6-page.ui:83 ++#: panels/network/net-proxy.c:71 panels/network/network-proxy.ui:118 + msgid "Manual" + msgstr "دستی" + +@@ -3265,8 +3398,8 @@ msgstr "دروازه" + #: panels/network/connection-editor/ip4-page.ui:291 + #: panels/network/connection-editor/ip6-page.ui:42 + #: panels/network/connection-editor/ip6-page.ui:237 +-#: panels/network/connection-editor/ip6-page.ui:305 panels/network/net-proxy.c:73 +-#: panels/network/network-proxy.ui:107 ++#: panels/network/connection-editor/ip6-page.ui:305 ++#: panels/network/net-proxy.c:73 panels/network/network-proxy.ui:107 + #: panels/network/wireless-security/eap-method-peap.ui:33 + msgid "Automatic" + msgstr "خودکار" +@@ -3342,8 +3475,8 @@ msgstr "نمی‌توان اتصال وی‌پی‌ان را وارد کرد" + #: panels/network/connection-editor/vpn-helpers.c:141 + #, c-format + msgid "" +-"The file “%s” could not be read or does not contain recognized VPN connection " +-"information\n" ++"The file “%s” could not be read or does not contain recognized VPN " ++"connection information\n" + "\n" + "Error: %s." + msgstr "" +@@ -3408,8 +3541,8 @@ msgstr "واپایش شیوهٔ اتّصال به اینترنت" + #: panels/network/gnome-network-panel.desktop.in.in:19 + msgid "Network;IP;LAN;Proxy;WAN;Broadband;Modem;Bluetooth;vpn;DNS;" + msgstr "" +-"Network;IP;LAN;Proxy;WAN;Broadband;Modem;Bluetooth;vpn;DNS;شبکه;آی پی;لن;پیشکار;" +-"پروکسی;ون;پهن‌باند;مودم;بلوتوث;وی پی ان;دی ان اس;ساناد;" ++"Network;IP;LAN;Proxy;WAN;Broadband;Modem;Bluetooth;vpn;DNS;شبکه;آی پی;لن;" ++"پیشکار;پروکسی;ون;پهن‌باند;مودم;بلوتوث;وی پی ان;دی ان اس;ساناد;" + + #: panels/network/gnome-wifi-panel.desktop.in.in:4 + msgid "Control how you connect to Wi-Fi networks" +@@ -3419,8 +3552,8 @@ msgstr "واپایش شیوهٔ اتّصال به شبکه‌های وای‌ف + #: panels/network/gnome-wifi-panel.desktop.in.in:19 + msgid "Network;Wireless;Wi-Fi;Wifi;IP;LAN;Broadband;DNS;Hotspot;" + msgstr "" +-"Network;Wireless;Wi-Fi;Wifi;IP;LAN;Broadband;DNS;Hotspot;شبکه;بی سیم;وای فای;آی " +-"پی;لن;پروکسی;پهن‌باند;دی ان اس;ساناد;هات اسپات;" ++"Network;Wireless;Wi-Fi;Wifi;IP;LAN;Broadband;DNS;Hotspot;شبکه;بی سیم;وای فای;" ++"آی پی;لن;پروکسی;پهن‌باند;دی ان اس;ساناد;هات اسپات;" + + #: panels/network/net-device-ethernet.c:95 + msgid "never" +@@ -3443,8 +3576,8 @@ msgstr "آخرین استفاده" + #. * profile. It is also used to display ethernet in the + #. * device list. + #. +-#: panels/network/net-device-ethernet.c:261 panels/network/network-bluetooth.ui:38 +-#: panels/network/network-ethernet.ui:18 ++#: panels/network/net-device-ethernet.c:261 ++#: panels/network/network-bluetooth.ui:38 panels/network/network-ethernet.ui:18 + msgid "Wired" + msgstr "سیمی" + +@@ -3454,10 +3587,11 @@ msgstr "افزودن اتّصال جدید" + + #: panels/network/net-device-wifi.c:851 + msgid "" +-"Network details for the selected networks, including passwords and any custom " +-"configuration will be lost." ++"Network details for the selected networks, including passwords and any " ++"custom configuration will be lost." + msgstr "" +-"جزییات شبکه‌های گزیده، شامل گذرواژه‌ها و هر پیکربندی سفارشی‌ای از دست خواهند رفت." ++"جزییات شبکه‌های گزیده، شامل گذرواژه‌ها و هر پیکربندی سفارشی‌ای از دست خواهند " ++"رفت." + + #: panels/network/net-device-wifi.c:855 + msgid "_Forget" +@@ -3481,7 +3615,8 @@ msgstr "سیاست سامانه استفاده از نقطهٔ داغ را من + msgid "Wireless device does not support Hotspot mode" + msgstr "افزارهٔ بی‌سیم از حالت نقطهٔ داغ پشتیبانی نمی‌کند" + +-#: panels/network/net-proxy.c:69 panels/notifications/cc-notifications-panel.c:266 ++#: panels/network/net-proxy.c:69 ++#: panels/notifications/cc-notifications-panel.c:266 + #: panels/power/cc-power-panel.c:1133 panels/power/cc-power-panel.c:1144 + #: panels/universal-access/cc-ua-panel.c:328 + #: panels/universal-access/cc-ua-panel.c:603 +@@ -3501,7 +3636,8 @@ msgstr "خاموش" + + #. TRANSLATORS: this is when the use leaves the PAC textbox blank + #: panels/network/net-proxy.c:112 +-msgid "Web Proxy Autodiscovery is used when a Configuration URL is not provided." ++msgid "" ++"Web Proxy Autodiscovery is used when a Configuration URL is not provided." + msgstr "کشف خودکار پیشکار وب زمانی که URL فراهم نشده باشد استفاده می‌شود." + + #. TRANSLATORS: WPAD is bad: if you enable it on an untrusted +@@ -4070,9 +4206,9 @@ msgid "" + "\n" + "(You can password-protect your private key with openssl)" + msgstr "" +-"به‌نظر نمی‌رسد کلید خصوصی انتخاب شده با گذرواژه محافظت شده باشد. این امر ممکن است " +-"موجب به خطر افتادن اطلاعات حساس شما شود. لطفا یک کلید خصوصی محافظت شده با " +-"گذرواژه انتخاب کنید.\n" ++"به‌نظر نمی‌رسد کلید خصوصی انتخاب شده با گذرواژه محافظت شده باشد. این امر ممکن " ++"است موجب به خطر افتادن اطلاعات حساس شما شود. لطفا یک کلید خصوصی محافظت شده " ++"با گذرواژه انتخاب کنید.\n" + "\n" + "(می‌توانید با openssl روی کلیدتان گذرواژه بگذارید)" + +@@ -4190,7 +4326,8 @@ msgstr "گزینه wep-key فراهم نشده است" + #: panels/network/wireless-security/ws-wep-key.c:123 + #, c-format + msgid "invalid wep-key: key with a length of %zu must contain only hex-digits" +-msgstr "گزینه wep-key نامعتبر است: کلیدی با طول %zu تنها باید شامل hex-digit باشد" ++msgstr "" ++"گزینه wep-key نامعتبر است: کلیدی با طول %zu تنها باید شامل hex-digit باشد" + + #: panels/network/wireless-security/ws-wep-key.c:131 + #, c-format +@@ -4205,8 +4342,8 @@ msgid "" + "invalid wep-key: wrong key length %zu. A key must be either of length 5/13 " + "(ascii) or 10/26 (hex)" + msgstr "" +-"گزینه wep-key نامعتبر: طول کلید نامعتبر %zu. یک کلید یا باید طول 5/13 (ascii) " +-"یا 10/26 (hex) داشته باشد." ++"گزینه wep-key نامعتبر: طول کلید نامعتبر %zu. یک کلید یا باید طول 5/13 " ++"(ascii) یا 10/26 (hex) داشته باشد." + + #: panels/network/wireless-security/ws-wep-key.c:144 + msgid "invalid wep-key: passphrase must be non-empty" +@@ -4243,10 +4380,11 @@ msgstr "_فهرست WEP" + #: panels/network/wireless-security/ws-wpa-psk.c:77 + #, c-format + msgid "" +-"invalid wpa-psk: invalid key-length %zu. Must be [8,63] bytes or 64 hex digits" ++"invalid wpa-psk: invalid key-length %zu. Must be [8,63] bytes or 64 hex " ++"digits" + msgstr "" +-"گزینه wpa-psk نامعتبر: طول کلید نامعتبر %zu.باید یا [8,63] باید یا ۶۴ رقم hex " +-"باشد" ++"گزینه wpa-psk نامعتبر: طول کلید نامعتبر %zu.باید یا [8,63] باید یا ۶۴ رقم " ++"hex باشد" + + #: panels/network/wireless-security/ws-wpa-psk.c:86 + msgid "invalid wpa-psk: cannot interpret key with 64 bytes as hex" +@@ -4272,10 +4410,11 @@ msgstr "واشوهای ا_علان" + + #: panels/notifications/cc-app-notifications-dialog.ui:184 + msgid "" +-"Notifications will continue to appear in the notification list when popups are " +-"disabled." ++"Notifications will continue to appear in the notification list when popups " ++"are disabled." + msgstr "" +-"هنگام از کار افتادن واشوها، آگاهی‌ها به ظاهر شدن در فهرست آگاهی‌ها ادامه می‌دهند." ++"هنگام از کار افتادن واشوها، آگاهی‌ها به ظاهر شدن در فهرست آگاهی‌ها ادامه " ++"می‌دهند." + + #. Popups here refers to message tray notifications in the middle of the screen. + #: panels/notifications/cc-app-notifications-dialog.ui:249 +@@ -4361,8 +4500,8 @@ msgid "" + "Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;" + "Kerberos;IMAP;SMTP;Pocket;ReadItLater;" + msgstr "" +-"گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;Kerberos;" +-"IMAP;SMTP;Pocket;ReadItLater;" ++"گوگل;فیس بوک;تویتر;یاهو;وب;برخط;گپ;تقویم;پست‌الکترونیکی;آشنا;ownCloud;" ++"Kerberos;IMAP;SMTP;Pocket;ReadItLater;" + + #. Translators: This is the button which allows undoing the removal of the printer. + #: panels/online-accounts/online-accounts.ui:38 panels/printers/printers.ui:61 +@@ -4723,7 +4862,8 @@ msgstr "دمای سخت‌افزار بالا: حالت کارایی موجود + msgid "Performance mode unavailable" + msgstr "حالت کارایی موجود نیست" + +-#: panels/power/cc-power-profile-row.c:87 panels/power/cc-power-profile-row.c:187 ++#: panels/power/cc-power-profile-row.c:87 ++#: panels/power/cc-power-profile-row.c:187 + msgid "High performance and power usage." + msgstr "استفاده از انرژی و کارایی بالا." + +@@ -4762,7 +4902,8 @@ msgid "" + "Energy;" + msgstr "" + "Power;Sleep;Suspend;Hibernate;Battery;Brightness;Dim;Blank;Monitor;DPMS;Idle;" +-"Energy;نیرو;انرژی;خواب;تعلیق;باتری;روشنایی;تاریکی;نمایشگر;مانیتور;مونیتور;صفحه;" ++"Energy;نیرو;انرژی;خواب;تعلیق;باتری;روشنایی;تاریکی;نمایشگر;مانیتور;مونیتور;" ++"صفحه;" + + #: panels/printers/authentication-dialog.ui:11 + msgid " " +@@ -4774,7 +4915,8 @@ msgstr "تصدیق هویت" + + #. Translators: This is a username on a print server. + #: panels/printers/authentication-dialog.ui:80 +-#: panels/printers/new-printer-dialog.ui:366 panels/printers/pp-jobs-dialog.ui:57 ++#: panels/printers/new-printer-dialog.ui:366 ++#: panels/printers/pp-jobs-dialog.ui:57 + msgid "Username" + msgstr "نام کاربری" + +@@ -4842,7 +4984,8 @@ msgid "Enter username and password to view printers on Print Server." + msgstr "برای دیدن چاپگرهای روی کارساز چاپ، نام‌کاربری و گذرواژه را وارد کنید." + + #. Translators: This is the title of the dialog. %s is the printer name. +-#: panels/printers/pp-details-dialog.c:74 panels/printers/pp-details-dialog.c:351 ++#: panels/printers/pp-details-dialog.c:74 ++#: panels/printers/pp-details-dialog.c:351 + #, c-format + msgid "%s Details" + msgstr "جزییات %s" +@@ -4857,9 +5000,10 @@ msgstr "انتخاب پروندهٔ PPD" + + #: panels/printers/pp-details-dialog.c:241 + msgid "" +-"PostScript Printer Description files (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *.PPD." +-"GZ)" +-msgstr "پرونده‌های تفسیری پست‌اسکریپت (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *.PPD.GZ)" ++"PostScript Printer Description files (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *." ++"PPD.GZ)" ++msgstr "" ++"پرونده‌های تفسیری پست‌اسکریپت (*.ppd, *.PPD, *.ppd.gz, *.PPD.gz, *.PPD.GZ)" + + #: panels/printers/pp-details-dialog.ui:68 panels/printers/printer-entry.ui:223 + msgid "Location" +@@ -5184,7 +5328,8 @@ msgstr "پیشرفته" + + #. Translators: Name of job which makes printer to print test page + #. Translators: This button triggers the printing of a test page. +-#: panels/printers/pp-options-dialog.c:857 panels/printers/pp-options-dialog.ui:18 ++#: panels/printers/pp-options-dialog.c:857 ++#: panels/printers/pp-options-dialog.ui:18 + msgid "Test Page" + msgstr "صفحهٔ آزمایشی" + +@@ -5312,7 +5457,8 @@ msgstr "برون‌خط" + + #. Translators: Someone has stopped the Printer + #. Translators: Printer's state (no jobs can be processed) +-#: panels/printers/pp-printer-entry.c:737 panels/printers/pp-printer-entry.c:880 ++#: panels/printers/pp-printer-entry.c:737 ++#: panels/printers/pp-printer-entry.c:880 + msgctxt "printer state" + msgid "Stopped" + msgstr "متوقف شده" +@@ -5496,7 +5642,8 @@ msgstr "زبان" + msgid "The language used for text in windows and web pages." + msgstr "زبان استفاده‌شده برای متن در پنجره‌ها و صفحه‌های وب." + +-#: panels/region/cc-region-panel.ui:85 panels/user-accounts/cc-user-panel.ui:406 ++#: panels/region/cc-region-panel.ui:85 ++#: panels/user-accounts/cc-user-panel.ui:406 + msgid "_Language" + msgstr "_زبان" + +@@ -5525,7 +5672,8 @@ msgid "Region & Language" + msgstr "ناحیه و زبان" + + #: panels/region/gnome-region-panel.desktop.in.in:4 +-msgid "Select your display language, formats, keyboard layouts and input sources" ++msgid "" ++"Select your display language, formats, keyboard layouts and input sources" + msgstr "زبان نمایش، قالب‌ها، چیدمان صفحه‌کلید و منابع ورودی خود را انتخاب کنید" + + #. 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! +@@ -5679,8 +5827,8 @@ msgid "" + msgstr "" + "device;system;default;application;preferred;cd;dvd;usb;audio;video;disc;" + "removable;media;autorun;دستگاه;سامانه;سیستم;اطلاعات;حافظه;پردازشگر;نسخه;" +-"پیش‌گزیده;برنامه;یدکی;ترجیح‌شده;سی‌دی;دی‌وی‌دی;یواس‌بی;صوت;ویدئو;دیسک;قابل حذف;رسانه;" +-"اجرا خودکار;" ++"پیش‌گزیده;برنامه;یدکی;ترجیح‌شده;سی‌دی;دی‌وی‌دی;یواس‌بی;صوت;ویدئو;دیسک;قابل حذف;" ++"رسانه;اجرا خودکار;" + + #: panels/search/cc-search-locations-dialog.c:636 + msgid "Select Location" +@@ -5731,14 +5879,15 @@ msgstr "جابه‌جایی به پایین" + + #: panels/search/cc-search-panel.ui:31 + msgid "" +-"Control which search results are shown in the Activities Overview. The order of " +-"search results can also be changed by moving rows in the list." ++"Control which search results are shown in the Activities Overview. The order " ++"of search results can also be changed by moving rows in the list." + msgstr "" + "واپایش نتایج جست‌وجویی که در نمای کلی فعّالیت‌ها، نتیجه نشان داده می‌شوند. ترتیب " + "نتایج جست‌وجو نیز می‌تواند با جابه‌جایی ردیف‌ها در فهرست تغییر کند." + + #: panels/search/gnome-search-panel.desktop.in.in:4 +-msgid "Control which applications show search results in the Activities Overview" ++msgid "" ++"Control which applications show search results in the Activities Overview" + msgstr "واپایش برنامه‌های کاربردی‌ای که در نمای کلی فعّالیت‌ها، نتیجه نشان می‌دهند" + + #. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! +@@ -5785,8 +5934,8 @@ msgstr "گزینش یک شاخه" + #: panels/sharing/cc-sharing-panel.c:696 + #, c-format + msgid "" +-"File Sharing allows you to share your Public folder with others on your current " +-"network using: %s" ++"File Sharing allows you to share your Public folder with others on your " ++"current network using: %s" + msgstr "" + "هم‌رسانی پرونده، می‌گذارد شاخهٔ عمومیتان را با استفاده از این پیوند روی شبکهٔ " + "جاریتان با دیگران هم‌رسانی کنید: %s" +@@ -5795,8 +5944,8 @@ msgstr "" + #: panels/sharing/cc-sharing-panel.c:702 + #, c-format + msgid "" +-"When remote login is enabled, remote users can connect using the Secure Shell " +-"command:\n" ++"When remote login is enabled, remote users can connect using the Secure " ++"Shell command:\n" + "%s" + msgstr "" + "هنگام به کار افتادن ورود دوردست، کاربران دوردست می‌توانند با استفاده از این " +@@ -5807,11 +5956,11 @@ msgstr "" + #: panels/sharing/cc-sharing-panel.c:708 + #, c-format + msgid "" +-"Screen sharing allows remote users to view or control your screen by connecting " +-"to %s" ++"Screen sharing allows remote users to view or control your screen by " ++"connecting to %s" + msgstr "" +-"هم‌رسانی صفحه به کاربران دوردست اجازه می‌دهد تا صفحه‌نمایشتان را با وصل شدن به این " +-"پیوند واپایش کنند: %s" ++"هم‌رسانی صفحه به کاربران دوردست اجازه می‌دهد تا صفحه‌نمایشتان را با وصل شدن به " ++"این پیوند واپایش کنند: %s" + + #: panels/sharing/cc-sharing-panel.c:813 + msgid "Copy" +@@ -5846,7 +5995,8 @@ msgstr "ورود _دوردست" + msgid "Some services are disabled because of no network access." + msgstr "تعدادی از خدمت‌ها به‌دلیل در دسترس نبودن شبکه، از کار افتاده‌اند." + +-#: panels/sharing/cc-sharing-panel.ui:137 panels/sharing/cc-sharing-panel.ui:264 ++#: panels/sharing/cc-sharing-panel.ui:137 ++#: panels/sharing/cc-sharing-panel.ui:264 + msgid "File Sharing" + msgstr "هم‌رسانی پرونده" + +@@ -5854,11 +6004,13 @@ msgstr "هم‌رسانی پرونده" + msgid "_Require Password" + msgstr "گذرواژه _لازم است" + +-#: panels/sharing/cc-sharing-panel.ui:275 panels/sharing/cc-sharing-panel.ui:345 ++#: panels/sharing/cc-sharing-panel.ui:275 ++#: panels/sharing/cc-sharing-panel.ui:345 + msgid "Remote Login" + msgstr "ورود دوردست" + +-#: panels/sharing/cc-sharing-panel.ui:368 panels/sharing/cc-sharing-panel.ui:590 ++#: panels/sharing/cc-sharing-panel.ui:368 ++#: panels/sharing/cc-sharing-panel.ui:590 + msgid "Screen Sharing" + msgstr "هم‌رسانی صفحه‌نمایش" + +@@ -5886,7 +6038,8 @@ msgstr "اتصال‌های _جدید باید برای دسترسی اجازه + msgid "_Require a password" + msgstr "گذرواژه _لازم است" + +-#: panels/sharing/cc-sharing-panel.ui:601 panels/sharing/cc-sharing-panel.ui:695 ++#: panels/sharing/cc-sharing-panel.ui:601 ++#: panels/sharing/cc-sharing-panel.ui:695 + msgid "Media Sharing" + msgstr "هم‌رسانی رسانه" + +@@ -6024,10 +6177,11 @@ msgstr "تغییر بلندی صدا، ورودی‌ها، خروجی‌ها و + + #. 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/gnome-sound-panel.desktop.in.in:20 +-msgid "Card;Microphone;Volume;Fade;Balance;Bluetooth;Headset;Audio;Output;Input;" ++msgid "" ++"Card;Microphone;Volume;Fade;Balance;Bluetooth;Headset;Audio;Output;Input;" + msgstr "" +-"Card;Microphone;Volume;Fade;Balance;Bluetooth;Headset;Audio;Output;Input;کارت;" +-"میکروفون;بلندی صدا;محو شدن;بالانس;بلوتوث;گوشی;صوت;صدا;ورودی;خروجی;" ++"Card;Microphone;Volume;Fade;Balance;Bluetooth;Headset;Audio;Output;Input;" ++"کارت;میکروفون;بلندی صدا;محو شدن;بالانس;بلوتوث;گوشی;صوت;صدا;ورودی;خروجی;" + + #: panels/thunderbolt/cc-bolt-device-dialog.c:94 + #: panels/thunderbolt/cc-bolt-device-entry.c:125 +@@ -6137,14 +6291,15 @@ msgid "Authorized" + msgstr "تصدیق هویت شده" + + #: panels/thunderbolt/cc-bolt-panel.c:175 +-msgid "The Thunderbolt subsystem (boltd) is not installed or not set up properly." ++msgid "" ++"The Thunderbolt subsystem (boltd) is not installed or not set up properly." + msgstr "زیرسامانهٔ تاندربولت (boltd) نصب یا به درستی پیکربندی نشده است." + + #: panels/thunderbolt/cc-bolt-panel.c:468 + msgid "" + "Thunderbolt could not be detected.\n" +-"Either the system lacks Thunderbolt support, it has been disabled in the BIOS " +-"or is set to an unsupported security level in the BIOS." ++"Either the system lacks Thunderbolt support, it has been disabled in the " ++"BIOS or is set to an unsupported security level in the BIOS." + msgstr "" + "تاندربولت تشخیص داده نشد.\n" + "یا سامانه فاقد پشتیبانی تاندربولت است، یا در بایوس از کار افتاده یا روی سطح " +@@ -6224,7 +6379,8 @@ msgid "Cursor Size" + msgstr "اندازهٔ نشانگر" + + #: panels/universal-access/cc-cursor-size-dialog.ui:29 +-msgid "Cursor size can be combined with zoom to make it easier to see the cursor." ++msgid "" ++"Cursor size can be combined with zoom to make it easier to see the cursor." + msgstr "" + "اندازهٔ نشانگر می‌تواند با بزرگنمایی ترکیب شده تا دیدن نشانگر را راحت‌تر کند." + +@@ -6737,16 +6893,17 @@ msgstr "ساده‌تر کردن دیدن، شنیدن، نوشتن، نشانه + #. Translators: Search terms to find the Accessibility 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;Universal Access;Contrast;Cursor;Sound;Zoom;" +-"Screen;Reader;big;high;large;text;font;size;AccessX;Sticky;Keys;Slow;Bounce;" +-"Mouse;Double;click;Delay;Speed;Assist;Repeat;Blink;visual;hearing;audio;typing;" ++"Keyboard;Mouse;a11y;Accessibility;Universal Access;Contrast;Cursor;Sound;" ++"Zoom;Screen;Reader;big;high;large;text;font;size;AccessX;Sticky;Keys;Slow;" ++"Bounce;Mouse;Double;click;Delay;Speed;Assist;Repeat;Blink;visual;hearing;" ++"audio;typing;" + msgstr "" +-"Keyboard;Mouse;a11y;Accessibility;Universal Access;Contrast;Cursor;Sound;Zoom;" +-"Screen;Reader;big;high;large;text;font;size;AccessX;Sticky;Keys;Slow;Bounce;" +-"Mouse;Double;click;Delay;Speed;Assist;Repeat;Blink;visual;hearing;audio;typing;" +-"صفحه‌کلید;موشی;دسترسی‌پذیری;سایه روشن;نشانگر;صدا;بزرگ‌نمایی;صفحه‌نمایش خوان;متن;قلم;" +-"اندازه;کلیدهای چسبان;کلیدهای آرام;کلیدهای پرشی;کلیدهای موشی;چشمک;سرعت;بینایی;" +-"شنوایی;صدا;تایپ;نوشتن;" ++"Keyboard;Mouse;a11y;Accessibility;Universal Access;Contrast;Cursor;Sound;" ++"Zoom;Screen;Reader;big;high;large;text;font;size;AccessX;Sticky;Keys;Slow;" ++"Bounce;Mouse;Double;click;Delay;Speed;Assist;Repeat;Blink;visual;hearing;" ++"audio;typing;صفحه‌کلید;موشی;دسترسی‌پذیری;سایه روشن;نشانگر;صدا;بزرگ‌نمایی;" ++"صفحه‌نمایش خوان;متن;قلم;اندازه;کلیدهای چسبان;کلیدهای آرام;کلیدهای پرشی;" ++"کلیدهای موشی;چشمک;سرعت;بینایی;شنوایی;صدا;تایپ;نوشتن;" + + #: panels/usage/cc-usage-panel.c:154 + msgid "Empty all items from Trash?" +@@ -6779,12 +6936,12 @@ msgstr "تاریخچهٔ پرونده" + #: panels/usage/cc-usage-panel.ui:41 + msgid "" + "File history keeps a record of files that you have used. This information is " +-"shared between applications, and makes it easier to find files that you might " +-"want to use." ++"shared between applications, and makes it easier to find files that you " ++"might want to use." + msgstr "" +-"تاریخچهٔ پرونده، گزارشی از پرونده‌هایی که استفاده کرده‌اید نگه می‌دارد. این اطّلاعات " +-"بین برنامه‌ها هم‌رسانی شده و یافتن پرونده‌هایی که ممکن است بخواهید استفاده کنید را " +-"آسان‌تر می‌کند." ++"تاریخچهٔ پرونده، گزارشی از پرونده‌هایی که استفاده کرده‌اید نگه می‌دارد. این " ++"اطّلاعات بین برنامه‌ها هم‌رسانی شده و یافتن پرونده‌هایی که ممکن است بخواهید " ++"استفاده کنید را آسان‌تر می‌کند." + + #: panels/usage/cc-usage-panel.ui:56 + msgid "File H_istory" +@@ -7010,9 +7167,9 @@ msgstr "_تأیید" + #: panels/user-accounts/cc-add-user-dialog.ui:485 + #: panels/user-accounts/cc-add-user-dialog.ui:692 + msgid "" +-"Enterprise login allows an existing centrally managed user account to be used " +-"on this device. You can also use this account to access company resources on " +-"the internet." ++"Enterprise login allows an existing centrally managed user account to be " ++"used on this device. You can also use this account to access company " ++"resources on the internet." + msgstr "" + "ورود تجاری می‌گذارد حساب کاربری مدیریت شدهٔ متمرکزی در این دستگاه استفاده شود. " + "همچنین از این حساب می‌توان برای دسترسی به منابع شرکت در اینترنت استفاده کرد." +@@ -7090,8 +7247,8 @@ msgid "" + "Fingerprint login allows you to unlock and log into your computer with your " + "finger" + msgstr "" +-"ورود با اثر انگشت می‌گذارد با اثر انگشتتان، رایانه را قفل‌گشایی کرده و به آن وارد " +-"شوید" ++"ورود با اثر انگشت می‌گذارد با اثر انگشتتان، رایانه را قفل‌گشایی کرده و به آن " ++"وارد شوید" + + #: panels/user-accounts/cc-fingerprint-dialog.ui:352 + msgid "_Delete Fingerprints" +@@ -7225,7 +7382,8 @@ msgstr "شکست در توقّف ثبت: %s" + + #: panels/user-accounts/cc-fingerprint-dialog.c:974 + msgid "" +-"Repeatedly lift and place your finger on the reader to enroll your fingerprint" ++"Repeatedly lift and place your finger on the reader to enroll your " ++"fingerprint" + msgstr "برایثبت انگشتتان، چند بار بلندش کرده و روی حسگر بگذارید" + + #. TRANSLATORS: This is the label for the button to enroll a new finger +@@ -7409,7 +7567,8 @@ msgid "" + "Deleting a user while they are logged in can leave the system in an " + "inconsistent state." + msgstr "" +-"حذف یک کاربر در حالی که وارد بودن ممکن است سامانه را در حالتی متناقض قرار دهد." ++"حذف یک کاربر در حالی که وارد بودن ممکن است سامانه را در حالتی متناقض قرار " ++"دهد." + + #: panels/user-accounts/cc-user-panel.c:624 + #, c-format +@@ -7534,11 +7693,11 @@ msgstr "_مدیر" + + #: panels/user-accounts/cc-user-panel.ui:301 + msgid "" +-"Administrators can add and remove other users, and can change settings for all " +-"users." ++"Administrators can add and remove other users, and can change settings for " ++"all users." + msgstr "" +-"مدیران می‌توانند دیگر کاربران را افزوده، برداشته و تنظیمات همهٔ کاربران را تغییر " +-"دهند." ++"مدیران می‌توانند دیگر کاربران را افزوده، برداشته و تنظیمات همهٔ کاربران را " ++"تغییر دهند." + + #: panels/user-accounts/cc-user-panel.ui:333 + msgid "_Parental Controls" +@@ -7589,8 +7748,8 @@ msgstr "افزودن یا برداشتنن کاربرها و تعویض گذرو + #: panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in:20 + msgid "Login;Name;Fingerprint;Avatar;Logo;Face;Password;" + msgstr "" +-"Login;Name;Fingerprint;Avatar;Logo;Face;Password;نام ورود;نام;اثرانگشت;آواتار;" +-"نشان;تصویرصورت;گذرواژه;" ++"Login;Name;Fingerprint;Avatar;Logo;Face;Password;نام ورود;نام;اثرانگشت;" ++"آواتار;نشان;تصویرصورت;گذرواژه;" + + #. Translators: This button enrolls the computer in the domain in order to use enterprise logins. + #: panels/user-accounts/data/join-dialog.ui:39 +@@ -7700,11 +7859,11 @@ msgstr "سعی کنید از تکرار یک نویسه خودداری کنید. + #: panels/user-accounts/pw-utils.c:124 + msgctxt "Password hint" + msgid "" +-"Try to avoid repeating the same type of character: you need to mix up letters, " +-"numbers and punctuation." ++"Try to avoid repeating the same type of character: you need to mix up " ++"letters, numbers and punctuation." + msgstr "" +-"سعی کنید از تکرار یک نوع نویسه خودداری کنید: شما باید تلفیقی از حروف، اعداد و " +-"نقطه‌گذاری‌ها را بکار ببرید." ++"سعی کنید از تکرار یک نوع نویسه خودداری کنید: شما باید تلفیقی از حروف، اعداد " ++"و نقطه‌گذاری‌ها را بکار ببرید." + + #: panels/user-accounts/pw-utils.c:126 + msgctxt "Password hint" +@@ -7714,7 +7873,8 @@ msgstr "سعی کنید از رشته‌های متوالی مثل ۱۲۳۴ یا + #: panels/user-accounts/pw-utils.c:128 + msgctxt "Password hint" + msgid "" +-"Password needs to be longer. Try to add more letters, numbers and punctuation." ++"Password needs to be longer. Try to add more letters, numbers and " ++"punctuation." + msgstr "" + "گذرواژه‌ها باید بلندتر باشند. تلاش کنید حروف، اعداد و علائم بیش‌تری بیفزایید." + +@@ -7780,11 +7940,11 @@ msgstr "خطای ناشناخته" + + #: panels/user-accounts/user-utils.c:432 + msgid "" +-"The username should usually only consist of lower case letters from a-z, digits " +-"and the following characters: - _" ++"The username should usually only consist of lower case letters from a-z, " ++"digits and the following characters: - _" + msgstr "" +-"نام کاربری تنها باید شامل حرف کوچک در بازهٔ a-z، رقم‌ها و نویسه‌های مقابل باشد: . " +-"- _" ++"نام کاربری تنها باید شامل حرف کوچک در بازهٔ a-z، رقم‌ها و نویسه‌های مقابل " ++"باشد: . - _" + + #: panels/user-accounts/user-utils.c:436 + msgid "Sorry, that user name isn’t available. Please try another." +@@ -7817,13 +7977,14 @@ msgid "" + "To edit a shortcut, choose the “Send Keystroke” action, press the keyboard " + "shortcut button and hold down the new keys or press Backspace to clear." + msgstr "" +-"برای ویرایش یک میان‌بر، کنش «ارسال ضربهٔ کلید» را انتخاب کنید، دکمهٔ کلید میان‌بر " +-"را فشار دهید و کلیدهای جدید را بگیرید یا اینکه کلید پس‌بر را برای پاک‌سازی فشار " +-"دهید." ++"برای ویرایش یک میان‌بر، کنش «ارسال ضربهٔ کلید» را انتخاب کنید، دکمهٔ کلید " ++"میان‌بر را فشار دهید و کلیدهای جدید را بگیرید یا اینکه کلید پس‌بر را برای " ++"پاک‌سازی فشار دهید." + + #: panels/wacom/calibrator/calibrator.ui:61 + msgid "" +-"Please tap the target markers as they appear on screen to calibrate the tablet." ++"Please tap the target markers as they appear on screen to calibrate the " ++"tablet." + msgstr "به محض ظاهر شدن نشانه‌ها روی نمایشگر، رویشان زده تا رایانک واسنجی شود." + + #: panels/wacom/calibrator/calibrator.ui:78 +@@ -8079,11 +8240,12 @@ msgstr "هشدار: نگارش در حال توسعه" + + #: shell/cc-window.ui:319 + msgid "" +-"This version of Settings should only be used for development purposes. You may " +-"experience incorrect system behavior, data loss, and other unexpected issues. " ++"This version of Settings should only be used for development purposes. You " ++"may experience incorrect system behavior, data loss, and other unexpected " ++"issues. " + msgstr "" +-"این نگارش از تنظیمات باید فقط برای مقاصد توسعه استفاده شود. ممکن است با رفتار " +-"نادرست سامانه، از دست رفتن داده یا دیگر مشکلات غیرمنتظره برخورد کنید. " ++"این نگارش از تنظیمات باید فقط برای مقاصد توسعه استفاده شود. ممکن است با " ++"رفتار نادرست سامانه، از دست رفتن داده یا دیگر مشکلات غیرمنتظره برخورد کنید. " + + #: shell/cc-window.ui:330 + msgid "Help" +@@ -8141,7 +8303,8 @@ msgid "Show warning when running a development build of Settings" + msgstr "نمایش هشدار هنگام اجرای یک ساخت در حال توسعه از تنظیمات" + + #: shell/org.gnome.ControlCenter.gschema.xml:14 +-msgid "Whether Settings should show a warning when running a development build." ++msgid "" ++"Whether Settings should show a warning when running a development build." + msgstr "تنظیمات آب‌وهوا باید هنگام اجرای یک ساخت در حال توسعه، هشداری نشان دهد." + + #. translators: +@@ -8198,17 +8361,18 @@ msgstr "صداهای سامانه" + #~ msgid "" + #~ "System Monitor can help you find out what applications are using the " + #~ "processor or the memory of your computer, can manage the running " +-#~ "applications, force stop processes not responding, and change the state or " +-#~ "priority of existing processes." ++#~ "applications, force stop processes not responding, and change the state " ++#~ "or priority of existing processes." + #~ msgstr "" +-#~ "پایشگر سامانه این امکان را می‌دهد که بفهمید چه برنامه‌هایی در حال استفاده از " +-#~ "پردازشگر یا حافظهٔ رایانه‌تانند، بتوانید برنامه‌های درحال اجرا را مدیریت کرده، " +-#~ "فرایندهای ناپاسخگو را مجبور به توقف کنید و الویت یا وضعیت فرایندهای موجود را " +-#~ "تغییر دهید." ++#~ "پایشگر سامانه این امکان را می‌دهد که بفهمید چه برنامه‌هایی در حال استفاده " ++#~ "از پردازشگر یا حافظهٔ رایانه‌تانند، بتوانید برنامه‌های درحال اجرا را مدیریت " ++#~ "کرده، فرایندهای ناپاسخگو را مجبور به توقف کنید و الویت یا وضعیت فرایندهای " ++#~ "موجود را تغییر دهید." + + #~ msgid "" +-#~ "The resource graphs feature shows you a quick overview of what is going on " +-#~ "with your computer displaying recent network, memory and processor usage." ++#~ "The resource graphs feature shows you a quick overview of what is going " ++#~ "on with your computer displaying recent network, memory and processor " ++#~ "usage." + #~ msgstr "" + #~ "امکان نمایش نمودار منابع‌، نمایی کلی از آن‌چه روی رایانه‌تان رخ می‌دهد را با " + #~ "نمایش میزان استفاده از شبکه، حافظه و پردازشگر، به شما می‌دهد." +@@ -8427,11 +8591,11 @@ msgstr "صداهای سامانه" + #~ msgstr "مقدار _نایس:" + + #~ msgid "" +-#~ "Note: The priority of a process is given by its nice value. " +-#~ "A lower nice value corresponds to a higher priority." ++#~ "Note: The priority of a process is given by its nice " ++#~ "value. A lower nice value corresponds to a higher priority." + #~ msgstr "" +-#~ "نکته: اولویت یک فرایند با مقدار نایس آن تعیین می‌شود. هرچه " +-#~ "میزان نایس پایین‌تر باشد، الویت بیشتری دارد." ++#~ "نکته: اولویت یک فرایند با مقدار نایس آن تعیین می‌شود. " ++#~ "هرچه میزان نایس پایین‌تر باشد، الویت بیشتری دارد." + + #~ msgid "A simple process and system monitor." + #~ msgstr "یک پایشگر‌ سادهٔ فرایند و شبکه." +@@ -8563,7 +8727,8 @@ msgstr "صداهای سامانه" + #~ msgid "_Files opened by process “%s” (PID %u):" + #~ msgstr "_پرونده‌های گشوده با فرایند «%s» (شناسه %Iu):" + +-#~ msgid "Main window size and position in the form (width, height, xpos, ypos)" ++#~ msgid "" ++#~ "Main window size and position in the form (width, height, xpos, ypos)" + #~ msgstr "اندازه و مکان پنجرهٔ اصلی در شکل (width, height, xpos, ypos)" + + #~ msgid "Main Window should open maximized" +@@ -8576,9 +8741,9 @@ msgstr "صداهای سامانه" + #~ msgstr "حالت سولاریس برای درصد پردازنده" + + #~ msgid "" +-#~ "If TRUE, system-monitor operates in “Solaris mode” where a task’s CPU usage " +-#~ "is divided by the total number of CPUs. Otherwise, it operates in “Irix " +-#~ "mode”." ++#~ "If TRUE, system-monitor operates in “Solaris mode” where a task’s CPU " ++#~ "usage is divided by the total number of CPUs. Otherwise, it operates in " ++#~ "“Irix mode”." + #~ msgstr "" + #~ "اگر درست باشد، پایشگر سامانه در «حالت سولاریس» اجرا می‌شود که در آن مصرف " + #~ "پردازندهٔ یک تکلیف، بر تعداد کل پردازنده‌ها تقسیم می‌شود. در غیر این‌صورت در " +@@ -8600,13 +8765,13 @@ msgstr "صداهای سامانه" + #~ msgstr "این که باید اطّلاعات تمام سامانه پرونده‌ها نشان داده شود یا نه" + + #~ msgid "" +-#~ "Whether to display information about all file systems (including types like " +-#~ "“autofs” and “procfs”). Useful for getting a list of all currently mounted " +-#~ "file systems." ++#~ "Whether to display information about all file systems (including types " ++#~ "like “autofs” and “procfs”). Useful for getting a list of all currently " ++#~ "mounted file systems." + #~ msgstr "" +-#~ "این که اطّلاعات تمام سامانه پرونده‌ها (از جمله گونه‌هایی چون autofs و procfs) " +-#~ "نشان داده شود یا نه . مفید برای گرفتن فهرستی از تمام سامانه پرونده‌های " +-#~ "سوار‌شدهٔ جاری." ++#~ "این که اطّلاعات تمام سامانه پرونده‌ها (از جمله گونه‌هایی چون autofs و " ++#~ "procfs) نشان داده شود یا نه . مفید برای گرفتن فهرستی از تمام سامانه " ++#~ "پرونده‌های سوار‌شدهٔ جاری." + + #~ msgid "Time in milliseconds between updates of the devices list" + #~ msgstr "زمان بین به‌روزرسانی‌های فهرست افزاره‌ها بر حسب میلی‌ثانیه" +@@ -8639,8 +8804,8 @@ msgstr "صداهای سامانه" + #~ msgstr "نمایش مجموع شبکه بر حسب بیت" + + #~ msgid "" +-#~ "If TRUE, system-monitor shows the CPU chart as a stacked area chart instead " +-#~ "of a line chart." ++#~ "If TRUE, system-monitor shows the CPU chart as a stacked area chart " ++#~ "instead of a line chart." + #~ msgstr "" + #~ "اگر درست باشد، پایشگر سامانه نمودار پردازنده را به‌جای نمودار خطی، به شکل " + #~ "نمودار پشته‌ای نمایش می‌دهد." +@@ -8944,8 +9109,8 @@ msgstr "صداهای سامانه" + #~ msgstr[1] "_کشتن فرایندها" + + #~ msgid "" +-#~ "Ending a process may destroy data, break the session or introduce a security " +-#~ "risk. Only unresponsive processes should be ended." ++#~ "Ending a process may destroy data, break the session or introduce a " ++#~ "security risk. Only unresponsive processes should be ended." + #~ msgstr "" + #~ "پایام یک فرایند می‌تواند باعث از بین رفتن داده، خرابی نشست، یا ایجاد خطری " + #~ "امنیتی شود. تنها فرایند‌های ناپاسخگو باید پایان یابند." +@@ -8972,8 +9137,8 @@ msgstr "صداهای سامانه" + #~ "The priority of a process is given by its nice value. A lower nice value " + #~ "corresponds to a higher priority." + #~ msgstr "" +-#~ "اولویت یک فرایند با مقدار نایس آن تعیین می‌شود. هرچه میزان نایس پایین‌تر باشد، " +-#~ "الویت بیشتری دارد." ++#~ "اولویت یک فرایند با مقدار نایس آن تعیین می‌شود. هرچه میزان نایس پایین‌تر " ++#~ "باشد، الویت بیشتری دارد." + + #~ msgid "N/A" + #~ msgstr "نامعلوم" +@@ -9187,15 +9352,15 @@ msgstr "صداهای سامانه" + #~ msgstr "مکان Y پنجره اصلی" + + #~ msgid "" +-#~ "Determines which processes to show by default. 0 is All, 1 is user, and 2 is " +-#~ "active" ++#~ "Determines which processes to show by default. 0 is All, 1 is user, and 2 " ++#~ "is active" + #~ msgstr "" + #~ "مشخص می‌کند که چه فراروند‌هایی به طور پیش‌فرض نشان داده شوند. ۰ برای همه، ۱ " + #~ "برای کاربر، و ۲ برای فعال" + + #~ msgid "" +-#~ "0 for the System Info, 1 for the processes list, 2 for the resources and 3 " +-#~ "for the disks list" ++#~ "0 for the System Info, 1 for the processes list, 2 for the resources and " ++#~ "3 for the disks list" + #~ msgstr "" + #~ "۰ برای اطلاعات سیستم، ۱ برای فهرست فراروند‌ها، ۲ برای منابع و ۳ برای فهرست " + #~ "دیسک‌ها" +diff --git a/po/fi.po b/po/fi.po +index a53423121..a21bc42c9 100644 +--- a/po/fi.po ++++ b/po/fi.po +@@ -21,8 +21,26 @@ + # Lasse Liehu , 2013, 2014. + # Jiri Grönroos , 2012, 2013, 2014, 2015, 2016, 2017. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# fi.po.multitasking (gnome-control-center) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-08 16:18+0000\n" ++"PO-Revision-Date: 2021-09-14 13:17+0300\n" ++"Last-Translator: Jiri Grönroos \n" ++"Language-Team: suomi \n" ++"Language: fi\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 3.0\n" ++"X-POT-Import-Date: 2012-03-07 10:37:43+0000\n" ++"X-Project-Style: gnome\n" ++"#-#-#-#-# fi.po (gnome-control-center) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -39,6 +57,94 @@ msgstr "" + "X-POT-Import-Date: 2012-03-07 10:37:43+0000\n" + "X-Project-Style: gnome\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Yleiset" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Aktivointikulma" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Kosketa vasenta yläkulmaa avataksesi Toiminnot-yleisnäkymän." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "Aktiiviset _näytön reunat" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Vedä ikkunat näytön yläreunaa, vasenta reunaa ja oikeaa reunaa vasten " ++"muuttaaksesi ikkunoiden kokoa." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Työtilat" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Dynaamiset työtilat" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Poista automaattisesti tyhjät työtilat." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Muuttumaton määrä työtiloja" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Määritä muuttumattomien työtilojen määrä." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Työtilojen määrä" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Useampi näyttö" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Työtilat vain _ensisijaisella näytöllä" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Työtilat _kaikilla näytöillä" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Sovellusten välillä vaihtaminen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Sisällytä sovellukset k_aikista työtiloista" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Sisällytä sovellukset _vain nykyisestä työtilasta" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Moniajo" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Hallinnoi tuottavuuden ja moniajon asetuksia" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"Multitasking;Multitask;Productivity;Customize;Desktop;moniajo;tuottavuus;" ++"mukautus;samanaikainen;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Järjestelmäväylä" +@@ -2645,11 +2751,6 @@ msgstr "Mikään sovellus ei ole pyytänyt mikrofonin käyttöoikeutta" + msgid "Protect your conversations" + msgstr "Suojaa keskustelusi" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Yleiset" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Ensisijainen painike" +diff --git a/po/fr.po b/po/fr.po +index 0a30ea1be..8bf6e9a63 100644 +--- a/po/fr.po ++++ b/po/fr.po +@@ -1,3 +1,40 @@ ++# #-#-#-#-# fr.po.multitasking (gnome-control-center HEAD) #-#-#-#-# ++# French translation of gnome-control-center. ++# Copyright (C) 1998-2020 Free Software Foundation, Inc. ++# This file is under the same license as the gnome-control-center package. ++# ++# Vincent Renardias , 1998-1999. ++# Fabrice Bellet , 1999. ++# Thibaut Cousin , 1999. ++# Joaquim Fellmann , 2000. ++# Christophe Merlet , 2000-2006. ++# Christophe Fergeau , 2002. ++# Mathieu Gauthier-Pilote , 2002. ++# Sebastien Oustric , 2002. ++# Simon Manlay , 2005. ++# Vincent Untz , 2005. ++# Robert-André Mauchin , 2006-2008. ++# Jonathan Ernst , 2006-2007. ++# Benoît Dejean , 2006. ++# Samuel Mutel , 2006. ++# Damien Durand , 2006. ++# Marc Lorber , 2006. ++# Stéphane Raimbault , 2007-2008. ++# Christophe Benz , 2007. ++# Bruno Brouard , 2008-2012. ++# Laurent Coudeur , 2009, 2010. ++# Gérard Baylard , 2011. ++# Grawok , 2012. ++# Alain Lojewski , 2011-2018. ++# Julien Hardelin , 2013. ++# Guillaume Bernard , 2015-2021. ++# Erwan Georget , 2015. ++# Claude Paroz , 2007-2020. ++# Thibault Martin , 2020-2021. ++# Charles Monzat , 2016-2021. ++# Alexandre Franke , 2013-2021. ++# ++# #-#-#-#-# fr.po (gnome-control-center HEAD) #-#-#-#-# + # French translation of gnome-control-center. + # Copyright (C) 1998-2020 Free Software Foundation, Inc. + # This file is under the same license as the gnome-control-center package. +@@ -33,8 +70,24 @@ + # Thibault Martin , 2020-2021. + # Charles Monzat , 2016-2021. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# fr.po.multitasking (gnome-control-center HEAD) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center HEAD\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-13 00:22+0000\n" ++"PO-Revision-Date: 2021-09-13 17:51+0200\n" ++"Last-Translator: Alexandre Franke \n" ++"Language-Team: GNOME French Team \n" ++"Language: fr\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: Gtranslator 40.0\n" ++"#-#-#-#-# fr.po (gnome-control-center HEAD) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center HEAD\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -49,6 +102,93 @@ msgstr "" + "Plural-Forms: nplurals=2; plural=(n > 1);\n" + "X-Generator: Gtranslator 3.38.0\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Général" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Coin actif" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "" ++"Toucher le coin supérieur gauche pour ouvrir la vue d’ensemble des activités" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "Bords de l’écran _actifs" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Pousser les fenêtres contre les bords haut, gauche et droite pour les " ++"redimensionner." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Espace de travail" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "Espaces de travail _dynamiques" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Supprimer automatiquement les espaces de travail vides" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "Nombre d’espaces de travail _fixe" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Indiquez un nombre d’espaces de travail permanents" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Nombre d’espaces de travail" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Multi-écran" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Espaces de travail sur l’écran _principal uniquement" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Espaces de travail sur _tous les écrans" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Bascule entre les applications" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Inclure les applications de tous les _espaces de travail" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Inclure les applications de l’espace de travail a_ctuel uniquement" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Multi-tâches" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Gérer les préférences de productivité et du multi-tâches" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Multi-tâches;productivité;personnalisation;bureau;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Bus système" +@@ -2233,8 +2373,8 @@ msgid "" + "' will enter á." + msgstr "" + "La touche de composition permet de saisir une grande variété de caractères. " +-"Pour l’utiliser, maintenez-la enfoncée et appuyez sur C et o pour " +-"saisir ©, ou a et pour saisir á." ++"Pour l’utiliser, maintenez-la enfoncée et appuyez sur C et o " ++"pour saisir ©, ou a et pour saisir á." + + #: panels/keyboard/cc-keyboard-panel.c:98 + msgctxt "keyboard key" +@@ -2682,11 +2822,6 @@ msgstr "Aucune application n’a demandé l’accès au micro" + msgid "Protect your conversations" + msgstr "Protégez vos conversations" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Général" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Bouton principal" +@@ -5629,8 +5764,7 @@ msgstr "Langue" + + #: panels/region/cc-region-panel.ui:45 + msgid "The language used for text in windows and web pages." +-msgstr "" +-"La langue utilisée pour le texte des fenêtres et des pages Web." ++msgstr "La langue utilisée pour le texte des fenêtres et des pages Web." + + #: panels/region/cc-region-panel.ui:85 + #: panels/user-accounts/cc-user-panel.ui:406 +diff --git a/po/gl.po b/po/gl.po +index 82e71b775..cafecd49d 100644 +--- a/po/gl.po ++++ b/po/gl.po +@@ -1,3 +1,4 @@ ++# #-#-#-#-# gl.po.multitasking (gnome-control-center-master-po-gl-72290.merged) #-#-#-#-# + # Galician translation of GNOME Control Center + # (C) 2002 Free Software Foundation, Inc. + # Proxecto Trasno - Adaptación do software libre á lingua galega: Se desexas +@@ -14,11 +15,54 @@ + # Fran Diéguez , 2009, 2010, 2011, 2012. + # Leandro Regueiro , 2011, 2012. + # Fran Dieguez , 2012-2021. ++# ++# #-#-#-#-# gl.po (gnome-control-center-master-po-gl-72290.merged) #-#-#-#-# ++# Galician translation of GNOME Control Center ++# (C) 2002 Free Software Foundation, Inc. ++# Proxecto Trasno - Adaptación do software libre á lingua galega: Se desexas ++# colaborar connosco, podes atopar máis información en http://www.trasno.net ++# ++# Rubén López Gómez , 1999, 2000. ++# Manuel A. Fernández Montecelo , 2002. ++# Xabi García , 2002. ++# Ignacio Casal Quinteiro , 2005, 2006. ++# Ignacio Casal Quinteiro , 2007, 2008. ++# Mancomún - Centro de Referencia e Servizos de Software Libre , 2009. ++# Antón Méixome , 2009. ++# Antón Méixome , 2010. ++# Fran Diéguez , 2009, 2010, 2011, 2012. ++# Leandro Regueiro , 2011, 2012. ++# Fran Dieguez , 2012-2021. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# gl.po.multitasking (gnome-control-center-master-po-gl-72290." ++"merged) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center-master-po-gl-72290.merged\n" +-"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/issu" +-"es\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-08 08:29+0000\n" ++"PO-Revision-Date: 2021-09-08 11:40+0200\n" ++"Last-Translator: Fran Dieguez \n" ++"Language-Team: Galician \n" ++"Language: gl\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: Gtranslator 40.0\n" ++"X-Launchpad-Export-Date: 2014-05-09 14:44+0000\n" ++"X-Project-Style: gnome\n" ++"X-DL-Team: gl\n" ++"X-DL-Module: gnome-control-center\n" ++"X-DL-Branch: master\n" ++"X-DL-Domain: po\n" ++"X-DL-State: Translating\n" ++"#-#-#-#-# gl.po (gnome-control-center-master-po-gl-72290.merged) #-#-#-#-" ++"#\n" ++"Project-Id-Version: gnome-control-center-master-po-gl-72290.merged\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" + "POT-Creation-Date: 2021-02-21 19:17+0000\n" + "PO-Revision-Date: 2021-02-24 15:32+0100\n" + "Last-Translator: Fran Diéguez \n" +@@ -32,6 +76,93 @@ msgstr "" + "X-Launchpad-Export-Date: 2014-05-09 14:44+0000\n" + "X-Project-Style: gnome\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Xeral" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "Esquina _activa" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "" ++"Toque a esquina superior esquerda para abrir a Vista xeral de actividades." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "Bordos da pantalla _activos" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Arrastre xanelas aos bordos superior, esquerdo e dereito da pantalla para " ++"redimensionalas." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Espazos de traballo" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "Espazos de traballo _dinámicos" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Os espazos de traballo baleiros elimínanse automaticamente." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "Número de espazos de traballo _fixos" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Especifique un número de espazos de traballo permanentes." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Número de espazos de traballo" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Multimonitor" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Espazos de traballo só na pantalla _principal" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Espazos de traballo en _todas as pantallas" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Trocar entre aplicacións" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Incluír aplicacións de todos os _espazos de traballo" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Incluír aplicacións só do espazos de traballo _actual" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Multitarefa" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Xestionar as preferencias para a productividade e multitarefa" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Multitarefa;Productividade;Personalizar;Escritorio;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Bus do sistema" +@@ -452,8 +583,7 @@ msgstr "Bluetooth apagado" + #: panels/bluetooth/cc-bluetooth-panel.ui:80 + msgid "Turn on to connect devices and receive file transfers." + msgstr "" +-"Acender para conectarse a dispositivos e recibir transferencias de " +-"ficheiros." ++"Acender para conectarse a dispositivos e recibir transferencias de ficheiros." + + #: panels/bluetooth/cc-bluetooth-panel.ui:107 + msgid "Airplane Mode is on" +@@ -2638,11 +2768,6 @@ msgstr "Ningunha aplicación solicitou acceso ao micrófono" + msgid "Protect your conversations" + msgstr "Protexer as túas conversas" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Xeral" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "_Botón primario" +diff --git a/po/he.po b/po/he.po +index 7e20f06ac..2fa0e5213 100644 +--- a/po/he.po ++++ b/po/he.po +@@ -1,3 +1,14 @@ ++# #-#-#-#-# he.po.multitasking (gnome-control-center.HEAD.he) #-#-#-#-# ++# translation of gnome-control-center.HEAD.he.po to Hebrew ++# translation of gnome-control-center.gnome-2-0.he.po to Hebrew ++# This file is distributed under the same license as the PACKAGE package. ++# Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER. ++# Gil 'Dolfin' Osher , 2002,2003. ++# Yuval Tanny, 2005. ++# Yaron Shahrabani , 2010, 2011. ++# Yosef Or Boczko , 2013-2021. ++# ++# #-#-#-#-# he.po (gnome-control-center.HEAD.he) #-#-#-#-# + # translation of gnome-control-center.HEAD.he.po to Hebrew + # translation of gnome-control-center.gnome-2-0.he.po to Hebrew + # This file is distributed under the same license as the PACKAGE package. +@@ -7,8 +18,25 @@ + # Yaron Shahrabani , 2010, 2011. + # Yosef Or Boczko , 2013-2020. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# he.po.multitasking (gnome-control-center.HEAD.he) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center.HEAD.he\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-24 15:42+0000\n" ++"PO-Revision-Date: 2021-09-23 10:57+0300\n" ++"Last-Translator: Yaron Shahrabani \n" ++"Language-Team: Hebrew \n" ++"Language: he\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n==2 ? 1 : n>10 && n%10==0 ? " ++"2 : 3);\n" ++"X-Generator: Poedit 3.0\n" ++"#-#-#-#-# he.po (gnome-control-center.HEAD.he) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center.HEAD.he\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -23,6 +51,93 @@ msgstr "" + "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n>2||n==0) ? 1 : 2\n" + "X-Generator: Gtranslator 3.36.0\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "כללי" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_פינה חמה" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "נגיעה בפינה הימנית העליונה תפתח את סקירת הפעילויות." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_קצוות מסך פעילים" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"גרירה של החלונות כלפי השוליים העליונים, שמאליים וימנים של המסך תשנה את גודלם." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "מרחבי עבודה" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "מרחבי עבודה _גמישים" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "מסיר מרחבי עבודה ריקים אוטומטית." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "מספר _קבוע של מרחבי עבודה" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "נא לציין מספר של מרחבי עבודה קבועים." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "מ_ספר מרחבי עבודה" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "ריבוי צגים" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "מרחבי עבודה בצג ה_ראשי בלבד" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "מרחבי עבודה ב_כל הצגים" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "החלפת יישומים" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "לכלול יישומים מ_כל מרחבי העבודה" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "לכלול יישומים ממרחב העבודה ה_נוכחי בלבד" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "ריבוי משימות" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "ניהול העדפות ליעילות וריבוי משימות" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"ריבוי משימות;ביצוע מפוצל;יעילות;פרודוקטיביות;מולטיטאסקינג;מולטיטסקינג;התאמה;" ++"שינוי;עריכה;שולחן עבודה;התאמה אישית;" ++ + #: panels/applications/cc-applications-panel.c:815 + #| msgid "System Sounds" + msgid "System Bus" +@@ -2526,11 +2641,6 @@ msgstr "אף יישום לא דרש גישה למיקרופון." + msgid "Protect your conversations" + msgstr "הגנה על השיחות שלך" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "כללי" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "לחצן ראשי" +diff --git a/po/hr.po b/po/hr.po +index e006274a9..1254f2b8e 100644 +--- a/po/hr.po ++++ b/po/hr.po +@@ -2,8 +2,26 @@ + # Copyright (C) Croatiann team + # Translators: Automatski Prijevod <>,Danijel Studen ,Denis Lackovic ,Robert Sedak ,Vedran Vyroubal ,Miroslav Sabljić + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# hr.po.multitasking (gnome-control-center 2.0) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center 2.0\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-24 15:42+0000\n" ++"PO-Revision-Date: 2021-10-06 19:03+0200\n" ++"Last-Translator: gogo \n" ++"Language-Team: Croatian \n" ++"Language: hr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" ++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" ++"X-Launchpad-Export-Date: 2016-10-09 11:56+0000\n" ++"X-Generator: Poedit 3.0\n" ++"#-#-#-#-# hr.po (gnome-control-center 2.0) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center 2.0\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -20,6 +38,92 @@ msgstr "" + "X-Launchpad-Export-Date: 2016-10-09 11:56+0000\n" + "X-Generator: Poedit 2.3\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Općenito" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Kut zaslona" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Dodirni gornji lijevi kut za otvaranje pregleda aktivnosti." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Aktivni rubovi zaslona" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Povlači prozore po gornjem, lijevom i desnom rubu zaslona kako bi im " ++"promijenili veličinu." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Radni prostori" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Promjenjivi radni prostori" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Automatski uklanja prazne radne prostore." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Nepromjenjiv broj radnih prostora" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Odredite broj stalnih radnih prostora." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Broj radnih prostora" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Više zaslona" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Radni prostori na _glavnom zaslonu" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Radni prostori na svima z_aslonima" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Prebacivanje aplikacija" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Obuhvati aplikacije sa svih _radnih prostora" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Obuhvati aplikacije samo s _trenutnog radnog prostora" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Višezadaćnost" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Upravljajte osobitostima za produktivnost i višezadaćnost" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Višezadaćnost;Višezadaća;Produktivnost;Prilagodi;Radna površina;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Sabirnica sustava" +@@ -2629,11 +2733,6 @@ msgstr "Nema aplikacija koje su zatražile pristup vašem mikrofonu" + msgid "Protect your conversations" + msgstr "Zaštitite svoje razgovore" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Općenito" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Glavna tipka" +diff --git a/po/hu.po b/po/hu.po +index 0b635a0b3..2ece4a4b2 100644 +--- a/po/hu.po ++++ b/po/hu.po +@@ -1,3 +1,21 @@ ++# #-#-#-#-# hu.po.multitasking (gnome-control-center master) #-#-#-#-# ++# Hungarian translation for gnome-control-center. ++# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Free Software Foundation, Inc. ++# This file is distributed under the same license as the gnome-control-center package. ++# ++# Szabolcs Ban , 1998, 1999, 2000. ++# Emese Kovacs , 2001. ++# Peter Doma , 2002. ++# Andras Timar , 2001, 2002, 2003. ++# Gabor Sari , 2003. ++# Laszlo Dvornik , 2004. ++# Gabor Kelemen , 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016, 2017, 2018. ++# Mate ORY , 2006. ++# Richard Somloi , 2011, 2012. ++# Peter Trombitas , 2012. ++# Balázs Úr , 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021. ++# Balázs Meskó , 2019, 2020, 2021. ++# #-#-#-#-# hu.po (gnome-control-center master) #-#-#-#-# + # Hungarian translation for gnome-control-center. + # Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Free Software Foundation, Inc. + # This file is distributed under the same license as the gnome-control-center package. +@@ -14,8 +32,24 @@ + # Peter Trombitas , 2012. + # Balázs Úr , 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021. + # Balázs Meskó , 2019, 2020. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# hu.po.multitasking (gnome-control-center master) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-08 08:29+0000\n" ++"PO-Revision-Date: 2021-09-12 08:24+0200\n" ++"Last-Translator: Balázs Úr \n" ++"Language-Team: Hungarian \n" ++"Language: hu\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: Lokalize 19.12.3\n" ++"#-#-#-#-# hu.po (gnome-control-center master) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -30,6 +64,98 @@ msgstr "" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Poedit 2.4.2\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Általános" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Forró sarok" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "" ++"Érintse meg a bal felső sarkot, hogy megnyissa a Tevékenységek áttekintést." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Aktív képernyőszegélyek" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Húzza az ablakokat a képernyő felső, bal és jobb szegélyéhez, hogy " ++"átméretezze őket." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++#| msgid "Colorspace: " ++msgid "Workspaces" ++msgstr "Munkaterületek" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Dinamikus munkaterületek" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++#| msgid "Automatically Delete Temporary _Files" ++msgid "Automatically removes empty workspaces." ++msgstr "Automatikusan eltávolítja az üres munkaterületeket." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Kötött számú munkaterület" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Adja meg az állandó munkaterületek számát." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "Munkaterületek _száma" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++#| msgid "%s Monitor" ++msgid "Multi-Monitor" ++msgstr "Több kijelző" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Munkaterületek csak az _elsődleges kijelzőn" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Munkaterületek az összes _kijelzőn" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++#| msgctxt "Wacom action-type" ++#| msgid "Application defined" ++msgid "Application Switching" ++msgstr "Alkalmazásváltás" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Az összes munkaterületen szereplő alkalmazás belevétele" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Csak a _jelenlegi munkaterületen szereplő alkalmazások belevétele" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Többfeladatos munkavégzés" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "A hatékony többfeladatos munkavégzés beállításainak kezelése" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Többfeladatos;Hatékony;Testreszabás;Asztal;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Rendszerbusz" +@@ -2645,11 +2771,6 @@ msgstr "Egyetlen alkalmazás sem kérte a mikrofon elérését" + msgid "Protect your conversations" + msgstr "A beszélgetései védelme" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Általános" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Elsődleges gomb" +diff --git a/po/id.po b/po/id.po +index 34c34fb2b..af581389e 100644 +--- a/po/id.po ++++ b/po/id.po +@@ -1,3 +1,15 @@ ++# #-#-#-#-# id.po.multitasking (gnome-control-center master) #-#-#-#-# ++# Terjemahan Bahasa Indonesia dari gnome-control-center ++# Copyright (C) 2003 gnome-control-center's copyright holder ++# This file is distributed under the same license as the gnome-control-center package. ++# ++# Mohammad DAMT , 2003. ++# Ahmad Riza H Nst , 2006. ++# Dirgita , 2010, 2012, 2014. ++# Andika Triwidada , 2009, 2011-2015, 2017, 2021. ++# Kukuh Syafaat , 2017-2021. ++# Sofyan Sugianto , 2020 ++# #-#-#-#-# id.po (gnome-control-center master) #-#-#-#-# + # Terjemahan Bahasa Indonesia dari gnome-control-center + # Copyright (C) 2003 gnome-control-center's copyright holder + # This file is distributed under the same license as the gnome-control-center package. +@@ -8,8 +20,24 @@ + # Andika Triwidada , 2009, 2011-2015, 2017. + # Kukuh Syafaat , 2017-2021. + # Sofyan Sugianto , 2020 ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# id.po.multitasking (gnome-control-center master) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-08 08:29+0000\n" ++"PO-Revision-Date: 2021-09-09 08:09+0700\n" ++"Last-Translator: Kukuh Syafaat \n" ++"Language-Team: Indonesian \n" ++"Language: id\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 3.0\n" ++"#-#-#-#-# id.po (gnome-control-center master) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -24,6 +52,92 @@ msgstr "" + "Plural-Forms: nplurals=2; plural= n!=1;\n" + "X-Generator: Poedit 2.4.2\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Umum" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Pojok Panas" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Sentuh pojok kiri atas untuk membuka Ringkasan Aktivitas." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "Tepi Layar _Aktif" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Seret jendela ke tepi layar puncak, kiri, dan kanan untuk mengubah ukuran " ++"mereka." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Ruang kerja" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "Ruang kerja _dinamis" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Secara otomatis menghapus ruang kerja yang kosong." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Cacah tetap ruang kerja" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Nyatakan banyaknya ruang kerja permanen." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "Cacah rua_ng kerja" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Multi-Monitor" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Ruang kerja hanya pada tampilan _primer" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Ruang kerja pada semua tampilan" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Pengalihan Aplikasi" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Sertakan aplikasi dari semua ruang _kerja" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Sertakan aplikasi dari ruang kerja saat _ini saja" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Multitasking" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Mengelola preferensi untuk produktivitas dan multitasking" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Multitasking;Multitask;Produktivitas;Menyesuaikan;Desktop;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Bus Sistem" +@@ -2625,11 +2739,6 @@ msgstr "Tak Ada Aplikasi yang Meminta Akses Mikrofon" + msgid "Protect your conversations" + msgstr "Lindungi percakapan Anda" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Umum" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Tombol primer" +diff --git a/po/is.po b/po/is.po +index 37f94c06f..0c8b637a4 100644 +--- a/po/is.po ++++ b/po/is.po +@@ -1,14 +1,39 @@ ++# #-#-#-#-# is.po.multitasking (gnome-control-center.master.is) #-#-#-#-# ++# translation of gnome-control-center.master.is.po to Íslenska ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# ++# Áki G. Karlsson , 2003. ++# Sveinn í Felli , 2015, 2016, 2017, 2019, 2021, 2022. ++# #-#-#-#-# is.po (gnome-control-center.master.is) #-#-#-#-# + # translation of gnome-control-center.master.is.po to Íslenska + # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER + # This file is distributed under the same license as the PACKAGE package. + # + # Áki G. Karlsson , 2003. + # Sveinn í Felli , 2015, 2016, 2017, 2019. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# is.po.multitasking (gnome-control-center.master.is) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center.master.is\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2022-01-24 13:03+0000\n" ++"PO-Revision-Date: 2022-01-30 20:59+0000\n" ++"Last-Translator: Sveinn í Felli \n" ++"Language-Team: Icelandic \n" ++"Language: is\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"PPlural-Forms: nplurals=2; plural=n != 1;\n" ++"X-Generator: Lokalize 19.12.3\n" ++"Plural-Forms: nplurals=2; plural=n != 1;\n" ++"#-#-#-#-# is.po (gnome-control-center.master.is) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center.master.is\n" +-"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/issu" +-"es\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" + "POT-Creation-Date: 2019-07-25 08:20+0000\n" + "PO-Revision-Date: 2019-08-16 05:59+0000\n" + "Last-Translator: Sveinn í Felli \n" +@@ -20,6 +45,99 @@ msgstr "" + "Plural-Forms: nplurals=2; plural=1;\n" + "X-Generator: Lokalize 2.0\n" + ++#. #-#-#-#-# is.po.multitasking (gnome-control-center.master.is) #-#-#-#-# ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++#: panels/mouse/gnome-mouse-properties.ui:50 ++msgid "General" ++msgstr "Almennt" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "Virkni_horn" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Snertu hornið efst til vinstri til að opna virkniyfirlitið." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "Virkir skjáj_aðrar" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Dragðu glugga að efri, vinstri og hægri skjájöðrum til að breyta stærð " ++"þeirra." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++#| msgid "Colorspace: " ++msgid "Workspaces" ++msgstr "Vinnusvæði" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Breytilegur földi vinnusvæða" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++#| msgid "Automatically empty _Trash" ++msgid "Automatically removes empty workspaces." ++msgstr "Fjarlægir tóm vinnusvæði sjálfkrafa." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Fastur fjöldi vinnusvæða" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Tilgreindu fjölda varanlegra vinnusvæða." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Fjöldi vinnusvæða" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++#| msgid "%s Monitor" ++msgid "Multi-Monitor" ++msgstr "Margir skjáir" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Vinnusvæði eingöngu á _aðalskjá" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "V_innusvæði á öllum skjám" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++#| msgctxt "Wacom action-type" ++#| msgid "Application defined" ++msgid "Application Switching" ++msgstr "Skipting milli forrita" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Hafa með forrit frá öllum _vinnusvæðum" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "_Hafa einungis með forrit frá virku vinnusvæði" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Fjölverkavinnsla" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Sýsla með kjörstillingar varðandi afköst og fjölverkavinnslu" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Fjölverkavinnsla;Verkefni;Afköst;Vinna;Sérsníða;Skjáborð;" ++ + #: panels/applications/cc-applications-panel.c:558 + #| msgid "System Sounds" + msgid "System Bus" +@@ -314,8 +432,8 @@ msgstr "Opna í hugbúnaðarstýringu" + msgid "" + "How much disk space this application is occupying with app data and caches." + msgstr "" +-"Hversu mikið diskpláss þetta forrit er að notað til að geyma forritsgögn og" +-" hrunupplýsingar." ++"Hversu mikið diskpláss þetta forrit er að notað til að geyma forritsgögn og " ++"hrunupplýsingar." + + #: panels/applications/cc-applications-panel.ui:484 + #| msgid "Applications" +@@ -1492,8 +1610,8 @@ msgid "" + "Drag displays to match your physical display setup. Select a display to " + "change its settings." + msgstr "" +-"Dragðu skjái til svo þeir samsvari uppsetningunni hjá þér. Veldu svo skjá til" +-" að breyta stillingum hans." ++"Dragðu skjái til svo þeir samsvari uppsetningunni hjá þér. Veldu svo skjá " ++"til að breyta stillingum hans." + + #: panels/display/cc-display-panel.ui:242 + msgid "Display Arrangement" +@@ -2283,10 +2401,6 @@ msgstr "Breyttu næmni músar eða snertiplatta og veldu rétt- eða örvhent" + msgid "Trackpad;Pointer;Click;Tap;Double;Button;Trackball;Scroll;" + msgstr "Snertiplatti;Bendill;Smella;Slá;Tvísmella;Hnappur;Bendilkúla;Skrun;" + +-#: panels/mouse/gnome-mouse-properties.ui:50 +-msgid "General" +-msgstr "Almennt" +- + #: panels/mouse/gnome-mouse-properties.ui:88 + msgid "Primary Button" + msgstr "Aðalhnappur" +@@ -6708,11 +6822,9 @@ msgid "" + "big;high;large;text;font;size;AccessX;Sticky;Keys;Slow;Bounce;Mouse;Double;" + "click;Delay;Speed;Assist;Repeat;Blink;visual;hearing;audio;typing;" + msgstr "" +-"Lyklaborð;Mús;a11y;Aðgengi;Birtuskil;Hljóð;Bendill;Aðdráttur;Skjár;Lesari;text" +-"i;letur;" +-"stærð;AccessX;Klístrað;Lyklar;Hægt;Endurtaka;Endurvarp;Tvísmella;smella;töf;hr" +-"aði;" +-"Aðstoð" ++"Lyklaborð;Mús;a11y;Aðgengi;Birtuskil;Hljóð;Bendill;Aðdráttur;Skjár;Lesari;" ++"texti;letur;stærð;AccessX;Klístrað;Lyklar;Hægt;Endurtaka;Endurvarp;Tvísmella;" ++"smella;töf;hraði;Aðstoð" + + #: panels/universal-access/zoom-options.c:305 + msgctxt "Distance" +diff --git a/po/ja.po b/po/ja.po +index a2955d815..13cca75a7 100644 +--- a/po/ja.po ++++ b/po/ja.po +@@ -1,3 +1,34 @@ ++# #-#-#-#-# ja.po.multitasking (gnome-control-center master) #-#-#-#-# ++# gnome-control-center ja.po. ++# Copyright (C) 1998-2001, 2003-2022 Free Software Foundation, Inc. ++# Yukihiro Nakai , 1998. ++# Eiichiro ITANI , 1999. ++# Takayuki KUSANO , 2000, 2009, 2010-2013. ++# Akira TAGOH , 2001. ++# KAMAGASAKO Masatoshi , 2003. ++# Takeshi AIHANA , 2003-2008. ++# Satoru SATOH , 2006. ++# Hiyoko Torisaki , 2009. ++# Hideki Yamane (Debian-JP) , 2009. ++# Shushi Kurose , 2009-2012, 2014, 2016. ++# Yasumichi Akahoshi , 2010. ++# Jiro Matsuzawa , 2010-2017. ++# GEN SAKASHITA , 2011. ++# Takashi Sakamoto , 2011. ++# Kiyotaka NISHIBORI , 2011. ++# Hideki Yamnane , 2011. ++# Noriko Mizumoto , 2012. ++# Koichi Akabe , 2012. ++# Kentaro KAZUHAMA , 2012, 2018, 2020. ++# Ikuya Awashiro , 2014, 2017. ++# Hajime Taira , 2015-2018. ++# TakashiUshikoshi , 2016. ++# Shinichirou Yamada , 2017-2018. ++# Kenichi Ito , 2018. ++# sicklylife , 2019-2020, 2022. ++# sujiniku , 2021. ++# ++# #-#-#-#-# ja.po (gnome-control-center master) #-#-#-#-# + # gnome-control-center ja.po. + # Copyright (C) 1998-2001, 2003-2020 Free Software Foundation, Inc. + # Yukihiro Nakai , 1998. +@@ -26,8 +57,23 @@ + # Kenichi Ito , 2018. + # sicklylife , 2019-2020. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# ja.po.multitasking (gnome-control-center master) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2022-01-24 13:03+0000\n" ++"PO-Revision-Date: 2022-02-05 22:00+0900\n" ++"Last-Translator: sicklylife \n" ++"Language-Team: Japanese \n" ++"Language: ja\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++"#-#-#-#-# ja.po (gnome-control-center master) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -41,6 +87,95 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "全般" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "ホットコーナー(_H)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "画面左上隅にタッチするとアクティビティ画面を開きます。" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "スクリーンエッジを有効にする(_A)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"ウィンドウを画面上部、画面左端、画面右端にドラッグすることでウィンドウサイズ" ++"を変更できるようにします。" ++ ++# ref. gnome-color-manager ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "ワークスペース" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "動的ワークスペース(_D)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "空のワークスペースを自動的に削除します。" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "ワークスペースの数を指定する(_F)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "常に指定した数のワークスペースが用意されます。" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "ワークスペースの数(_N)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "マルチモニター" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "プライマリーディスプレイにのみワークスペースを表示する(_P)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "すべてのディスプレイにワークスペースを表示する(_I)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "アプリケーションの切り替え" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "すべてのワークスペースのアプリケーションを含める(_W)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "現在のワークスペースのアプリケーションのみを含める(_C)" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "マルチタスク" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "プロダクティビティとマルチタスクに関する設定を管理します" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"Multitasking;Multitask;Productivity;Customize;Desktop;マルチタスク;プロダク" ++"ティビティ;カスタマイズ;デスクトップ;" ++ + #: panels/applications/cc-applications-panel.c:815 + msgid "System Bus" + msgstr "システムバス" +@@ -2553,11 +2688,6 @@ msgstr "マイクへのアクセスを要求しているアプリケーション + msgid "Protect your conversations" + msgstr "会話を保護します" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "全般" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "主ボタン" +diff --git a/po/kk.po b/po/kk.po +index f72686dea..9d2ac5f7d 100644 +--- a/po/kk.po ++++ b/po/kk.po +@@ -3,8 +3,24 @@ + # This file is distributed under the same license as the gnome-control-center package. + # Baurzhan Muftakhidinov , 2010-2021. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# kk.po.multitasking (gnome-control-center master) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-08 08:29+0000\n" ++"PO-Revision-Date: 2021-09-08 15:35+0500\n" ++"Last-Translator: Baurzhan Muftakhidinov \n" ++"Language-Team: Kazakh \n" ++"Language: kk\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++"X-Generator: Poedit 3.0\n" ++"#-#-#-#-# kk.po (gnome-control-center master) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -19,6 +35,94 @@ msgstr "" + "Plural-Forms: nplurals=1; plural=0;\n" + "X-Generator: Poedit 2.4.2\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Жалпы" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Ыстық бұрыш" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Белсенділіктер көрінісін ашу үшін, жоғарғы сол жақ бұрышына тиіңіз." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Белсенді экран шеттері" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Терезелер өлшемін өзгерту үшін оларды жоғарғы, сол және оң жақ экран " ++"шеттеріне тартып апарыңыз." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Жұмыс орындары" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Динамикалық жұмыс орындары" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Бос жұмыс орындарын автоматты түрде өшіреді." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "Жұмыс орындарының _бекітілген саны" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Тұрақты жұмыс орындар санын көрсетіңіз." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "Жұмыс орындар са_ны" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Көпмониторлы" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Жұмыс орындары тек _біріншілік экранда" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Жұмыс орындары барлық э_крандарда" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Қолданбалар арасында ауысу" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Барлық _жұмыс орындарынан қолданбаларды есепке алу" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Тек ағымдағы _жұмыс орнынан қолданбаларды есепке алу" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Көптапсырмалылық" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Өнімділік және көптапсырмалылық баптауларын басқару" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"Multitasking;Multitask;Productivity;Customize;Desktop;көптапсырмалылық;" ++"өнімділік;баптау;жұмыс үстелі;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Жүйелік шина" +@@ -2635,11 +2739,6 @@ msgstr "Ешбір қолданба Микрофонға қатынау рұқс + msgid "Protect your conversations" + msgstr "Сөйлесулерді қорғау" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Жалпы" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Біріншілік батырма" +diff --git a/po/ko.po b/po/ko.po +index 941b5d9b3..3edc53de3 100644 +--- a/po/ko.po ++++ b/po/ko.po +@@ -26,8 +26,24 @@ + # msgid "Wallpaper;Screen;Desktop;" + # msgstr "Wallpaper;배경 이미지;Screen;화면;Desktop;바탕 화면;" + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# ko.po.multitasking (gnome-control-center) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-11-03 15:34+0000\n" ++"PO-Revision-Date: 2021-11-14 03:01+0900\n" ++"Last-Translator: Changwoo Ryu \n" ++"Language-Team: GNOME Korea \n" ++"Language: ko\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++"X-Generator: Poedit 1.5.3\n" ++"#-#-#-#-# ko.po (gnome-control-center) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -42,6 +58,92 @@ msgstr "" + "Plural-Forms: nplurals=1; plural=0;\n" + "X-Generator: Poedit 1.5.3\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "일반" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "구석 누르기(_H)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "위 왼쪽 구석을 터치해 현재 활동 요약 화면을 엽니다." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "화면 가장자리로 끌기(_A)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "창을 위, 왼쪽, 오른쪽 화면 가장자리로 끌어서 창 크기를 조절합니다." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "작업 공간" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "동적 작업 공간(_D)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "자동으로 빈 작업 공간을 제거합니다." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "고정된 작업 공간 개수(_F)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "영구적인 작업 공간의 개수를 지정합니다." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "작업 공간 개수(_N)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "다중 모니터" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "주 디스플레이만 작업 공간 사용(_P)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "모든 디스플레이에 작업 공간 사용(_I)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "프로그램 전환" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "모든 작업 공간의 프로그램을 포함(_W)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "현재 작업 공간의 프로그램만 포함(_C)" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "다중 작업" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "생산성 및 다중 작업에 대한 설정을 관리합니다" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"Multitasking;다중작업;다중 작업;멀티태스킹;Multitask;멀티태스크;Productivity;" ++"생산성;Customize;사용자설정;사용자 설정;Desktop;데스크톱;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "시스템 버스" +@@ -2206,7 +2308,11 @@ msgid "" + "it, press compose then a sequence of characters. For example, compose key " + "followed by C and o will enter ©, a followed by " + "' will enter á." +-msgstr "조합 키를 사용하면 여러가지 종류의 문자를 입력할수 있습니다. 조합 키를 사용하려면, 조합 키와 문자의 연속을 누릅니다. 예를 들어, 조합 키 다음에 Co를 누르면 © 문자를 입력하고, a'를 누르면 á 문자를 입력합니다." ++msgstr "" ++"조합 키를 사용하면 여러가지 종류의 문자를 입력할수 있습니다. 조합 키를 사용하" ++"려면, 조합 키와 문자의 연속을 누릅니다. 예를 들어, 조합 키 다음에 C " ++"및 o를 누르면 © 문자를 입력하고, a'를 누르면 " ++"á 문자를 입력합니다." + + #: panels/keyboard/cc-keyboard-panel.c:98 + msgctxt "keyboard key" +@@ -2636,11 +2742,6 @@ msgstr "마이크 접근을 요청한 프로그램이 없습니다" + msgid "Protect your conversations" + msgstr "대화를 보호합니다" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "일반" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "기본 단추" +diff --git a/po/lt.po b/po/lt.po +index 1547011a1..36d005535 100644 +--- a/po/lt.po ++++ b/po/lt.po +@@ -11,8 +11,27 @@ + # Algimantas Margevičius , 2011. + # Aurimas Černius , 2010-2021. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# lt.po.multitasking (gnome-control-center master) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-08 08:29+0000\n" ++"PO-Revision-Date: 2021-09-12 20:54+0300\n" ++"Last-Translator: Aurimas Černius \n" ++"Language-Team: Lietuvių \n" ++"Language: lt\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" ++"%100<10 || n%100>=20) ? 1 : 2)\n" ++"X-Generator: Gtranslator 40.0\n" ++"X-Poedit-SourceCharset: utf-8\n" ++"X-Project-Style: gnome\n" ++"#-#-#-#-# lt.po (gnome-control-center master) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -30,6 +49,92 @@ msgstr "" + "X-Poedit-SourceCharset: utf-8\n" + "X-Project-Style: gnome\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Bendri" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Karštas kampas" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Paspauskite viršutinį kairįjį kampą veiklų apžvalgai atverti." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Aktyvūs ekrano kraštai" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Tempkite langus į viršutinį, kairį bei dešinį ekrano kraštus jų dydžiui " ++"pakeisti." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Darbo sritys" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Dinaminės darbo sritys" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Automatiškai pašalina tuščias darbo sritis." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Fiksuotas darbo sričių skaičius" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Nurodykite nuolatinių darbo sričių skaičių." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Darbo sričių skaičius" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Keli monitoriai" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Darbo sritys tik _pirminiame vaizduoklyje" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Darbo sritys v_isuose vaizduokliuose" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Automatinis perjungimas" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Įtraukti programas iš visų darbo _sričių" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Įtraukti programas tik iš _dabartinės darbo srities" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Daug užduočių" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Tvarkykite nuostatas produktyvumui ir daugeliui užduočių" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Daugelis užduočių;Produktyvumas;Tinkinti;Darbastalis;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Sisteminė magistralė" +@@ -2630,11 +2735,6 @@ msgstr "Jokia programa neprašė prieigos prie mikrofono" + msgid "Protect your conversations" + msgstr "Apsaugokite savo pokalbius" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Bendri" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Pagrindinis mygtukas" +diff --git a/po/lv.po b/po/lv.po +index 6822bea6a..e879ec630 100644 +--- a/po/lv.po ++++ b/po/lv.po +@@ -1,3 +1,15 @@ ++# #-#-#-#-# lv.po.multitasking (gnome-control-center.HEAD.lv) #-#-#-#-# ++# translation of gnome-control-center.HEAD.lv.po to Latvian ++# gnome-control-center for Latvian. ++# Copyright (C) 2001, 2006, 2007, 2009 Free Software Foundation, Inc. ++# ++# Artis Trops , 2001. ++# Raivis Dejus , 2006, 2007, 2009. ++# Anita Reitere , 2010, 2012. ++# Rudolfs , 2011. ++# Rūdofls Mazurs , 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021. ++# Vika Leimane , 2020. ++# #-#-#-#-# lv.po (gnome-control-center.HEAD.lv) #-#-#-#-# + # translation of gnome-control-center.HEAD.lv.po to Latvian + # gnome-control-center for Latvian. + # Copyright (C) 2001, 2006, 2007, 2009 Free Software Foundation, Inc. +@@ -8,11 +20,28 @@ + # Rudolfs , 2011. + # Rūdofls Mazurs , 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020. + # Vika Leimane , 2020. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# lv.po.multitasking (gnome-control-center.HEAD.lv) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center.HEAD.lv\n" +-"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/issu" +-"es\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-24 15:42+0000\n" ++"PO-Revision-Date: 2021-10-27 21:03+0300\n" ++"Last-Translator: Rūdolfs Mazurs \n" ++"Language-Team: Latvian \n" ++"Language: lv\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " ++"2);\n" ++"X-Generator: Lokalize 21.08.1\n" ++"#-#-#-#-# lv.po (gnome-control-center.HEAD.lv) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center.HEAD.lv\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" + "POT-Creation-Date: 2020-09-05 08:20+0000\n" + "PO-Revision-Date: 2020-09-06 22:19+0300\n" + "Last-Translator: Rūdolfs Mazurs \n" +@@ -21,10 +50,102 @@ msgstr "" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 :" +-" 2);\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " ++"2);\n" + "X-Generator: Lokalize 19.12.3\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Vispārēji" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Karstais stūris" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "" ++"Pieskarieties augšējam kreisajam stūrim, lai atvērtu aktivitāšu pārskatu." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Aktivēt ekrāna malas" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Velciet logus pie loga augšpuses vai kreisā/labā loga sāna, lai mainītu to " ++"izmērus." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++#| msgid "Colorspace: " ++msgid "Workspaces" ++msgstr "Darbvietas" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Dinamiskās darbvietas" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++#| msgid "Automatically Delete Temporary _Files" ++msgid "Automatically removes empty workspaces." ++msgstr "Automātiski izņemt tukšās darbvietas." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Fiksēts darbvietu skaits" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Norādiet pastāvīgo darbvietu skaitu." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Darbvietu skaits" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++#| msgid "%s Monitor" ++msgid "Multi-Monitor" ++msgstr "Daudzmonitoru" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Darbvietas tikai uz _galvenā displeja" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Darbvietas uz v_isiem displejiem" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++#| msgctxt "Wacom action-type" ++#| msgid "Application defined" ++msgid "Application Switching" ++msgstr "Pārslēgšanās starp lietotnēm" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Iekļaut lietotnes no visām _darbvietām" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Iekļaut lietotnes tikai no _pašreizējās darbvietas" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Vairākuzdevumi" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Pārvaldiet iestatījumus produktivitātei un vairākuzdevumu darbam" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Vairākuzdevumi;Produktivitāte;Pielāgot;Darbvirsma;" ++ + #: panels/applications/cc-applications-panel.c:815 + msgid "System Bus" + msgstr "Sistēmas kopne" +@@ -1951,11 +2072,10 @@ msgid "" + "device;system;information;hostname;memory;processor;version;default;" + "application;preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;" + msgstr "" +-"ierīce;sistēma;informācija;resursdatora nosaukums;atmiņa;procesors;versija;nok" +-"lusējums;lietotne;cd;" +-"dvd;usb;audio;video;disks;izņemams;noņemamas;vide;nesējs;datu nesējs;" +-"automātiski palaist;device;system;information;memory;processor;version;" +-"default;application;preferred;disc;removable;media;autorun;" ++"ierīce;sistēma;informācija;resursdatora nosaukums;atmiņa;procesors;versija;" ++"noklusējums;lietotne;cd;dvd;usb;audio;video;disks;izņemams;noņemamas;vide;" ++"nesējs;datu nesējs;automātiski palaist;device;system;information;memory;" ++"processor;version;default;application;preferred;disc;removable;media;autorun;" + + #: panels/keyboard/00-multimedia.xml.in:2 + msgid "Sound and Media" +@@ -2595,8 +2715,8 @@ msgid "" + "Disabling the microphone may cause some applications to not function " + "properly." + msgstr "" +-"Mikrofonu lietošana ļauj lietotnēm ierakstīt un klausīties skaņu. Mikrofona" +-" izslēgšana var traucēt dažām lietotnēm pilnvērtīgi strādāt." ++"Mikrofonu lietošana ļauj lietotnēm ierakstīt un klausīties skaņu. Mikrofona " ++"izslēgšana var traucēt dažām lietotnēm pilnvērtīgi strādāt." + + #: panels/microphone/cc-microphone-panel.ui:85 + msgid "Allow the applications below to use your microphone." +@@ -2610,11 +2730,6 @@ msgstr "Neviena lietotne nav pieprasījusi piekļuvi mikrofonam" + msgid "Protect your conversations" + msgstr "Aizsargāt savas sarunas" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Vispārēji" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Primārā poga" +@@ -2793,8 +2908,8 @@ msgid "" + "Turning on the hotspot will disconnect from %s, and it will not be possible " + "to access the internet through Wi-Fi." + msgstr "" +-"Ieslēdzot tīklāju, tiks pārtraukts savienojums ar %s, un nevarēs piekļūt" +-" internetam caur Wi-Fi." ++"Ieslēdzot tīklāju, tiks pārtraukts savienojums ar %s, un nevarēs piekļūt " ++"internetam caur Wi-Fi." + + #: panels/network/cc-wifi-hotspot-dialog.c:248 + msgid "Must have a minimum of 8 characters" +@@ -3431,9 +3546,7 @@ msgstr "Noteikt, kā savienoties ar internetu" + #| "Network;Wireless;Wi-Fi;Wifi;IP;LAN;Proxy;WAN;Broadband;Modem;Bluetooth;" + #| "vpn;DNS;" + msgid "Network;IP;LAN;Proxy;WAN;Broadband;Modem;Bluetooth;vpn;DNS;" +-msgstr "" +-"Tīkls;IP;LAN;Starpnieks;WAN;Platjosla;Modems;Bluetooth;" +-"vpn;DNS;" ++msgstr "Tīkls;IP;LAN;Starpnieks;WAN;Platjosla;Modems;Bluetooth;vpn;DNS;" + + #: panels/network/gnome-wifi-panel.desktop.in.in:4 + msgid "Control how you connect to Wi-Fi networks" +@@ -6166,8 +6279,8 @@ msgstr "Mainīt skaļumu, ievades, izvades un paziņojumu skaņas" + msgid "" + "Card;Microphone;Volume;Fade;Balance;Bluetooth;Headset;Audio;Output;Input;" + msgstr "" +-"Karte;Mikrofons;Skaļums;Klusināt;Balanss;Bluetooth;Austiņas;Audio;Izvade;Ievad" +-"e;" ++"Karte;Mikrofons;Skaļums;Klusināt;Balanss;Bluetooth;Austiņas;Audio;Izvade;" ++"Ievade;" + + #: panels/thunderbolt/cc-bolt-device-dialog.c:94 + #: panels/thunderbolt/cc-bolt-device-entry.c:125 +@@ -6717,11 +6830,10 @@ msgid "" + "Bounce;Mouse;Double;click;Delay;Speed;Assist;Repeat;Blink;visual;hearing;" + "audio;typing;" + msgstr "" +-"Tastatūra;Pele;a11y;Pieejamība;Universālā" +-" piekļuve;Kontrasts;Kursors;Skaņa;Mērogs;Ekrāna " +-"lasītājs;liels;augsts;teksts;fonts;izmērs;AccessX;Lipīgie;Taustiņi;Lēnie;" +-"Atlecošie;Pele;Dubults;klikšķis;Aizture;Ātrums;Atkārtot;Mirkšķināt;vizuāls;" +-"dzirdes;audio;raksta;" ++"Tastatūra;Pele;a11y;Pieejamība;Universālā piekļuve;Kontrasts;Kursors;Skaņa;" ++"Mērogs;Ekrāna lasītājs;liels;augsts;teksts;fonts;izmērs;AccessX;Lipīgie;" ++"Taustiņi;Lēnie;Atlecošie;Pele;Dubults;klikšķis;Aizture;Ātrums;Atkārtot;" ++"Mirkšķināt;vizuāls;dzirdes;audio;raksta;" + + #: panels/universal-access/zoom-options.c:303 + msgctxt "Distance" +@@ -7256,8 +7368,8 @@ msgid "" + "Fingerprint login allows you to unlock and log into your computer with your " + "finger" + msgstr "" +-"Pirkstu nospiedumu ierakstīšanās jums ļauj atslēgt un ierakstīties datorā," +-" izmantojot savu pirkstu" ++"Pirkstu nospiedumu ierakstīšanās jums ļauj atslēgt un ierakstīties datorā, " ++"izmantojot savu pirkstu" + + #: panels/user-accounts/cc-fingerprint-dialog.ui:352 + msgid "_Delete Fingerprints" +@@ -7377,8 +7489,8 @@ msgid "" + "Repeatedly lift and place your finger on the reader to enroll your " + "fingerprint" + msgstr "" +-"Atkārtoti paceliet un novietojiet pirkstu uz lasītāja, lai reģistrētu savu" +-" pirkstu nospiedumu" ++"Atkārtoti paceliet un novietojiet pirkstu uz lasītāja, lai reģistrētu savu " ++"pirkstu nospiedumu" + + #. TRANSLATORS: This is the label for the button to enroll a new finger + #: panels/user-accounts/cc-fingerprint-dialog.c:989 +@@ -7941,8 +8053,8 @@ msgid "" + "The username should usually only consist of lower case letters from a-z, " + "digits and the following characters: - _" + msgstr "" +-"Lietotājvārds parasti drīkst saturēt tikai mazos burtus no a–z, ciparus un" +-" šīs rakstzīmes: . - _" ++"Lietotājvārds parasti drīkst saturēt tikai mazos burtus no a–z, ciparus un " ++"šīs rakstzīmes: . - _" + + #: panels/user-accounts/user-utils.c:439 + msgid "Sorry, that user name isn’t available. Please try another." +diff --git a/po/nl.po b/po/nl.po +index c849efa57..d79977ff0 100644 +--- a/po/nl.po ++++ b/po/nl.po +@@ -1,3 +1,27 @@ ++# #-#-#-#-# nl.po.multitasking (gnome-control-center) #-#-#-#-# ++# Dutch translation for gnome-control-center ++# This file is distributed under the same license as the gnome-control-center package. ++# Bas Wagter ++# Hein-Jan Leliveld ++# desktop - werkblad ++# enroll (fingerprint) - (vingerafruk) nemen ++# modifier keys - optietoetsen ++# wallpaper - achtergrond ++# calibrate - kalibreren ++# keywords - Engelse keywords laten staan + enkele Nederlandse woorden die Rachid had toegevoegd. ++# Dennis Smit , 2000. ++# Almer S. Tigelaar , 2001. ++# Jan-Willem Harmanny , 2002. ++# Huib Kleinhout , 2002. ++# Ronald Hummelink , 2002. ++# Tino Meinen , 2004, 2006, 2007, 2009. ++# Wouter Bolsterlee , 2006, 2008, 2011–2012. ++# Rachid BM , 2011. ++# Reinout van Schouwen , 2002–2008, 2011, 2012, 2014, 2016. ++# Nathan Follens , 2015-2021. ++# Hannie Dumoleyn , 2011, 2012, 2013, 2014, 2015, 2017, 2018, 2020, 2021. ++# Justin van Steijn , 2016, 2018. ++# #-#-#-#-# nl.po (gnome-control-center) #-#-#-#-# + # Dutch translation for gnome-control-center + # This file is distributed under the same license as the gnome-control-center package. + # Bas Wagter +@@ -20,11 +44,28 @@ + # Nathan Follens , 2015-2020. + # Hannie Dumoleyn , 2011, 2012, 2013, 2014, 2015, 2017, 2018, 2020, 2021. + # Justin van Steijn , 2016, 2018. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# nl.po.multitasking (gnome-control-center) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center\n" +-"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/issu" +-"es\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-13 15:00+0000\n" ++"PO-Revision-Date: 2021-09-13 17:08+0200\n" ++"Last-Translator: Nathan Follens \n" ++"Language-Team: Dutch \n" ++"Language: nl\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 3.0\n" ++"X-Project-Style: gnome\n" ++"#-#-#-#-# nl.po (gnome-control-center) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" + "POT-Creation-Date: 2021-02-21 15:21+0000\n" + "PO-Revision-Date: 2021-03-18 18:20+0100\n" + "Last-Translator: Hannie Dumoleyn \n" +@@ -37,6 +78,94 @@ msgstr "" + "X-Generator: Lokalize 19.12.3\n" + "X-Project-Style: gnome\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Algemeen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "Snel_hoek" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Tik op de linkerbovenhoek om het activiteitenoverzicht te openen." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "Schermranden _activeren" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Versleep vensters tegen boven-, linker en rechterrand van het scherm om hun " ++"grootte aan te passen." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Werkbladen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Dynamische werkbladen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Verwijdert automatisch lege werkbladen." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Vast aantal werkbladen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Geef een vast aantal werkbladen op." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "Aa_ntal werkbladen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Meerdere schermen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Werkbladen alleen op _hoofdscherm" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Werkbladen op alle _schermen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Wisselen tussen toepassingen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Toepassingen van alle _werkbladen tonen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Alleen toepassingen van het _huidige werkblad tonen" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Multitasken" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Beheer voorkeuren voor productiviteit en multitasken" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"Multitasking;Multitask;Productivity;Customize;Desktop;Multitasken;" ++"Productiviteit;Aanpassen;Bureaublad;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Systeembus" +@@ -2236,10 +2365,10 @@ msgid "" + "followed by C and o will enter ©, a followed by " + "' will enter á." + msgstr "" +-"Met de samensteltoets kan een grote verscheidenheid aan tekens worden" +-" ingevoerd. Om deze te gebruiken, drukt u op samenstellen en vervolgens op" +-" een reeks tekens. Bijvoorbeeld, samensteltoets gevolgd door C en o geeft ©, a gevolgd door ' geeft á." ++"Met de samensteltoets kan een grote verscheidenheid aan tekens worden " ++"ingevoerd. Om deze te gebruiken, drukt u op samenstellen en vervolgens op " ++"een reeks tekens. Bijvoorbeeld, samensteltoets gevolgd door C en " ++"o geeft ©, a gevolgd door ' geeft á." + + #: panels/keyboard/cc-keyboard-panel.c:98 + msgctxt "keyboard key" +@@ -2341,8 +2470,8 @@ msgstr "Aangepaste sneltoetsen toevoegen" + #: panels/keyboard/cc-keyboard-shortcut-dialog.ui:124 + msgid "Set up custom shortcuts for launching apps, running scripts, and more." + msgstr "" +-"Aangepaste sneltoetsen instellen voor het starten van toepassingen, het" +-" uitvoeren van scripts en meer." ++"Aangepaste sneltoetsen instellen voor het starten van toepassingen, het " ++"uitvoeren van scripts en meer." + + #: panels/keyboard/cc-keyboard-shortcut-dialog.ui:131 + #| msgid "Shortcut" +@@ -2685,11 +2814,6 @@ msgstr "Er hebben nog geen toepassingen toegang tot uw microfoon gevraagd" + msgid "Protect your conversations" + msgstr "Bescherm uw gesprekken" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Algemeen" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Primaire knop" +diff --git a/po/oc.po b/po/oc.po +index 0db3562d7..f4c8b67f8 100644 +--- a/po/oc.po ++++ b/po/oc.po +@@ -4,8 +4,26 @@ + # Cédric Valmary (Tot en òc) , 2015. + # Cédric Valmary (totenoc.eu) , 2016, 2018. + # Cedric , 2019. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# oc.po.multitasking (gnome-control-center HEAD) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center HEAD\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2022-02-15 22:16+0000\n" ++"PO-Revision-Date: 2022-02-20 19:35+0100\n" ++"Last-Translator: Quentin PAGÈS\n" ++"Language-Team: Tot en òc\n" ++"Language: oc\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 3.0\n" ++"X-DamnedLies-Scope: partial\n" ++"X-Project-Style: gnome\n" ++"#-#-#-#-# oc.po (gnome-control-center HEAD) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center HEAD\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -22,6 +40,94 @@ msgstr "" + "X-DamnedLies-Scope: partial\n" + "X-Project-Style: gnome\n" + ++#. #-#-#-#-# oc.po.multitasking (gnome-control-center HEAD) #-#-#-#-# ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++#: panels/mouse/gnome-mouse-properties.ui:50 ++msgid "General" ++msgstr "General" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Bòrd reactiu" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Tocar lo caire naut esquèr per dobrir l’apercebut de las activitats." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Bordaduras d’ecran actiu" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Lisatz las fenèstras contra los bòrds superiors a man esquèrra e drecha per " ++"los redimencionar." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Espacis de trabalh" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Espacis de trabalh dinamics" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Suprimir automaticament los espacis de trabalhs voids." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Nombre d’espacis de trabalh fixe" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Especificatz un nombre d’espacis de trabalh permanents." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Nombre d’espacis de trabalh" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Multi monitor" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Espacis de trabalh solament sus l’ecran _principal" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Espacis de trabalh per tote_s los ecrans" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Alternància entre aplicacions" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Inclure totas las aplicacions dels _espacis de trabalhs estant" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Inclure totas las aplicacions de l’espaci de trabalhs actual sonque" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Multiprètzfach" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Gerir las preferéncias per la productivitat e multi prètzfach" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "multi prètzfach;multitasca;productivitat;personalizar;burèu;" ++ + #: panels/applications/cc-applications-panel.c:561 + #| msgid "System Sounds" + msgid "System Bus" +@@ -1611,9 +1717,9 @@ msgid "" + "Panel;Projector;xrandr;Screen;Resolution;Refresh;Monitor;Night;Light;Blue;" + "redshift;color;sunset;sunrise;" + msgstr "" +-"Panèl;Projector;xrandr;Ecran;Definicion;Resolucion;Refrescament;Moniteur;Nuèi" +-"t;Nuèch,Esclairatge;Lum;Lutz;Blava;redshift;descalatge;espectral;color;levar;" +-"colcar;" ++"Panèl;Projector;xrandr;Ecran;Definicion;Resolucion;Refrescament;Moniteur;" ++"Nuèit;Nuèch,Esclairatge;Lum;Lutz;Blava;redshift;descalatge;espectral;color;" ++"levar;colcar;" + + #: panels/info/cc-info-default-apps-panel.ui:31 + msgid "_Web" +@@ -1879,8 +1985,8 @@ msgid "" + "device;system;information;memory;processor;version;default;application;" + "preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;" + msgstr "" +-"periferic;sistèma;informacion;memòria;processor;version;defaut;aplicacion;pre" +-"ferit;cd;dvd;usb;àudio;vidèo;disc;amovible;mèdia;execucion automatica;" ++"periferic;sistèma;informacion;memòria;processor;version;defaut;aplicacion;" ++"preferit;cd;dvd;usb;àudio;vidèo;disc;amovible;mèdia;execucion automatica;" + + #: panels/info/gnome-removable-media-panel.desktop.in.in:3 + msgid "Removable Media" +@@ -1896,9 +2002,8 @@ msgid "" + "device;system;default;application;preferred;cd;dvd;usb;audio;video;disc;" + "removable;media;autorun;" + msgstr "" +-"periferic;sistèma;per " +-"defaut;aplicacion;preferida;cd;dvd;usb;àudio;vidèo;disc;amovible;mèdia;" +-"execucion automatica;" ++"periferic;sistèma;per defaut;aplicacion;preferida;cd;dvd;usb;àudio;vidèo;" ++"disc;amovible;mèdia;execucion automatica;" + + #: panels/keyboard/00-multimedia.xml.in:2 + msgid "Sound and Media" +@@ -2179,8 +2284,8 @@ msgstr "" + msgid "" + "Shortcut;Workspace;Window;Resize;Zoom;Contrast;Input;Source;Lock;Volume;" + msgstr "" +-"Acorchi;Espaci de " +-"trabalh;Fenèstra;Redimensionar;Zoom;Contraste;Picada;Font;Verrolhar;Volum;" ++"Acorchi;Espaci de trabalh;Fenèstra;Redimensionar;Zoom;Contraste;Picada;Font;" ++"Verrolhar;Volum;" + + #: panels/keyboard/shortcut-editor.ui:68 panels/keyboard/shortcut-editor.ui:318 + #| msgid "Press Esc to cancel or Backspace to reset the keyboard shortcut." +@@ -2249,17 +2354,14 @@ msgstr "" + msgid "Trackpad;Pointer;Click;Tap;Double;Button;Trackball;Scroll;" + msgstr "Pavat;Tactil;Puntador;Clic;Quichada;Doble;Boton;Bola;Desfilament;" + +-#: panels/mouse/gnome-mouse-properties.ui:50 +-msgid "General" +-msgstr "General" +- + #: panels/mouse/gnome-mouse-properties.ui:88 + msgid "Primary Button" + msgstr "Boton principal" + + #: panels/mouse/gnome-mouse-properties.ui:107 + msgid "Sets the order of physical buttons on mice and touchpads." +-msgstr "Definís l’òrdre dels botons fisics sus las mirgas e los pavats tactils." ++msgstr "" ++"Definís l’òrdre dels botons fisics sus las mirgas e los pavats tactils." + + #: panels/mouse/gnome-mouse-properties.ui:136 + #: panels/sound/cc-balance-slider.ui:13 +@@ -2388,7 +2490,7 @@ msgstr "Pas configurat" + + #. TRANSLATORS: This happens when the connection name does not contain the SSID. + #: panels/network/cc-wifi-connection-row.c:189 +-#, c-format, c-format ++#, c-format + #| msgctxt "timezone desc" + #| msgid "%s (%s)" + msgctxt "Wi-Fi Connection" +@@ -4020,14 +4122,15 @@ msgid "" + "Notifications will continue to appear in the notification list when popups " + "are disabled." + msgstr "" +-"Las notificacions contunhan de s’afichar dins la lista del tirador quand l’" +-"afichatge de las bandièras es desactivat." ++"Las notificacions contunhan de s’afichar dins la lista del tirador quand " ++"l’afichatge de las bandièras es desactivat." + + #. Popups here refers to message tray notifications in the middle of the screen. + #: panels/notifications/cc-app-notifications-dialog.ui:249 + msgctxt "notifications" + msgid "Show Message _Content in Popups" +-msgstr "Afichar lo _contengut del messatge dins lo tirador de las notificacions" ++msgstr "" ++"Afichar lo _contengut del messatge dins lo tirador de las notificacions" + + #: panels/notifications/cc-app-notifications-dialog.ui:300 + msgctxt "notifications" +@@ -4108,8 +4211,8 @@ msgid "" + "Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;" + "Kerberos;IMAP;SMTP;Pocket;ReadItLater;" + msgstr "" +-"Google;Facebook;Twitter;Yahoo;Web;En linha;Discussion;Agenda;Corrièr;Email;Co" +-"ntacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;" ++"Google;Facebook;Twitter;Yahoo;Web;En linha;Discussion;Agenda;Corrièr;Email;" ++"Contacte;ownCloud;Kerberos;IMAP;SMTP;Pocket;ReadItLater;" + + #. Translators: This is the button which allows undoing the removal of the printer. + #: panels/online-accounts/online-accounts.ui:38 panels/printers/printers.ui:71 +@@ -4634,8 +4737,8 @@ msgstr "" + msgid "" + "Power;Sleep;Suspend;Hibernate;Battery;Brightness;Dim;Blank;Monitor;DPMS;Idle;" + msgstr "" +-"Energia;Alimentacion;Velha;Suspension;Ivernacion;Batariá;Luminositat;Escurezi" +-"r;Negre;Ecran;DPMS;Inactiu;" ++"Energia;Alimentacion;Velha;Suspension;Ivernacion;Batariá;Luminositat;" ++"Escurezir;Negre;Ecran;DPMS;Inactiu;" + + #: panels/printers/authentication-dialog.ui:11 + msgid " " +@@ -5690,9 +5793,8 @@ msgid "" + "Uses Mozilla Location Service: Privacy Policy" + msgstr "" +-"Utiliza lo service de localizacion de Mozilla : Politica de " +-"Confidencialitat" ++"Utiliza lo service de localizacion de Mozilla : Politica de Confidencialitat" + + #: panels/privacy/cc-privacy-panel.ui:1038 + msgid "_Location Services" +@@ -5719,8 +5821,8 @@ msgid "" + "screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;" + "network;identity;" + msgstr "" +-"ecran;verrolhar;verrolhatge;diagnostic;plantatge;privat;confidencial;recent;t" +-"emporari;tmp;indèx;nom;rets;identitat;" ++"ecran;verrolhar;verrolhatge;diagnostic;plantatge;privat;confidencial;recent;" ++"temporari;tmp;indèx;nom;rets;identitat;" + + #: panels/region/cc-format-chooser.c:133 + msgctxt "measurement format" +@@ -5983,8 +6085,8 @@ msgid "" + "current network using: dav://%s" + msgstr "" + "Lo partiment de fichièrs vos permet de partejar vòstre dorsièr Public amb " +-"los autres sus la ret actuala en utilizant : dav://%s" ++"los autres sus la ret actuala en utilizant : dav://%s" + + #: panels/sharing/cc-sharing-panel.c:728 + #, c-format +@@ -6105,8 +6207,8 @@ msgid "" + "share;sharing;ssh;host;name;remote;desktop;media;audio;video;pictures;photos;" + "movies;server;renderer;" + msgstr "" +-"partiment;partejar;ssh;òste;nom;distant;burèu;bluetooth;obex;mèdia;àudio;vidè" +-"o;imatges;fòtos;filmes;servidor;renderer;motor de rendut;" ++"partiment;partejar;ssh;òste;nom;distant;burèu;bluetooth;obex;mèdia;àudio;" ++"vidèo;imatges;fòtos;filmes;servidor;renderer;motor de rendut;" + + #: panels/sharing/networks.ui:19 + msgid "Networks" +@@ -6154,7 +6256,7 @@ msgid "Front" + msgstr "Avant" + + #: panels/sound/cc-output-test-dialog.c:134 +-#, c-format, c-format ++#, c-format + #| msgid "Settings" + msgid "Testing %s" + msgstr "Tèst de %s" +@@ -6356,7 +6458,8 @@ msgstr "Autorizat" + #: panels/thunderbolt/cc-bolt-panel.c:176 + msgid "" + "The Thunderbolt subsystem (boltd) is not installed or not set up properly." +-msgstr "Lo sossistèma Thunderbolt (boltd) es pas installat o es mal configurat." ++msgstr "" ++"Lo sossistèma Thunderbolt (boltd) es pas installat o es mal configurat." + + #: panels/thunderbolt/cc-bolt-panel.c:469 + msgid "" +@@ -6791,10 +6894,10 @@ msgid "" + "big;high;large;text;font;size;AccessX;Sticky;Keys;Slow;Bounce;Mouse;Double;" + "click;Delay;Speed;Assist;Repeat;Blink;visual;hearing;audio;typing;" + msgstr "" +-"Clavièr;Mirga;ligam;Accessibilitat;Contraste;Cursor;Son;Zoom;Lector d’ecran;g" +-"rand;naut;elevat;tèxte;poliça;talha;AccessX;Remanentas;Tòcas;Lentas;Rebombs;M" +-"irgas;Doble;clic;Relambi;Velocitat;Assisténcia;Repeticion;Cluquejament;visual" +-";escota;àudio;picada;" ++"Clavièr;Mirga;ligam;Accessibilitat;Contraste;Cursor;Son;Zoom;Lector d’ecran;" ++"grand;naut;elevat;tèxte;poliça;talha;AccessX;Remanentas;Tòcas;Lentas;Rebombs;" ++"Mirgas;Doble;clic;Relambi;Velocitat;Assisténcia;Repeticion;Cluquejament;" ++"visual;escota;àudio;picada;" + + #: panels/universal-access/zoom-options.c:305 + msgctxt "Distance" +@@ -8114,8 +8217,8 @@ msgstr "" + msgid "" + "Whether Settings should show a warning when running a development build." + msgstr "" +-"Indica se Paramètres deu afichar un avertiment al moment de l’utilizacion d’" +-"una version de desvolopament." ++"Indica se Paramètres deu afichar un avertiment al moment de l’utilizacion " ++"d’una version de desvolopament." + + #. translators: + #. * The number of sound outputs on a particular device +diff --git a/po/pa.po b/po/pa.po +index 1ccd482a6..31932387c 100644 +--- a/po/pa.po ++++ b/po/pa.po +@@ -7,11 +7,27 @@ + # Amanpreet Singh Alam , 2004. + # Amanpreet Singh Alam , 2005,2006,2007,2008,2009. + # A S Alam , 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# pa.po.multitasking (gnome-control-center.HEAD) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center.HEAD\n" +-"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/issu" +-"es\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-18 09:55+0000\n" ++"PO-Revision-Date: 2021-09-18 16:30-0700\n" ++"Last-Translator: A S Alam \n" ++"Language-Team: Punjabi \n" ++"Language: pa\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: Lokalize 20.12.2\n" ++"#-#-#-#-# pa.po (gnome-control-center.HEAD) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center.HEAD\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" + "POT-Creation-Date: 2021-02-01 20:21+0000\n" + "PO-Revision-Date: 2021-02-05 22:40-0800\n" + "Last-Translator: A S Alam \n" +@@ -23,6 +39,90 @@ msgstr "" + "Plural-Forms: nplurals=2; plural=n != 1;\n" + "X-Generator: Lokalize 20.08.1\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "ਆਮ" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "ਸਰਗਰਮ ਕੋਨਾ(_H)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "ਸਕਰੀਨ ਦੇ ਕੋਨੇ ਸਰਗਰਮ ਕਰੋ(_A)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "ਵਰਕਸਪੇਸ" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "ਸਫ਼ਰੀ ਵਰਕਸਪੇਸ(_D)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "ਖਾਲੀ ਵਰਕਸਪੇਸਾਂ ਨੂੰ ਆਪਣੇ-ਆਪ ਹਟਾਓ।" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "ਵਰਕਸਪੇਸਾਂ ਦੀ ਪੱਕੀ ਗਿਣਤੀ(_F)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "ਪੱਕੇ ਵਰਕਸਪੇਸਾਂ ਦੀ ਗਿਣਤੀ ਦਿਓ।" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "ਵਰਕਸਪੇਸਾਂ ਦੀ ਗਿਣਤੀ(_N)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "ਬਹੁ-ਮਾਨੀਟਰ" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "ਵਰਕਸੇਪਸ ਸਿਰਫ਼ ਪ੍ਰਾਇਮਰੀ ਡਿਸਪਲੇਅ ਉੱਤੇ(_p)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "ਸਾਰੇ ਡਿਸਪਲੇਅ ਉੱਤੇ ਵਰਕਸਪੇਸ(_i)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "ਐਪਲੀਕੇਸ਼ਨ ਬਦਲਣੀਆਂ" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "ਸਾਰੀਆਂ ਵਰਕਸਪੇਸਾਂ ਤੋਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਸਮੇਤ(_w)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "ਸਿਰਫ਼ ਮੌਜੂਦਾ ਵਰਕਸਪੇਸ ਤੋਂ ਹੀ ਐਪਲੀਕੇਸ਼ਨਾਂ ਸਮੇਤ(_c)" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "ਬਹੁ-ਕੰਮਕਾਜ" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "ਉਤਪਾਦਨ ਤੇ ਬਹੁ-ਕੰਮਕਾਜ ਲਈ ਤਜਰੀਹਾਂ ਦਾ ਇੰਤਜ਼ਾਮ ਕਰੋ" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "ਬਹੁ-ਕੰਮ;ਮਲਟੀ-ਟਾਸਕ;ਉਤਪਾਦਨ,ਕਸਟਮਾਈਜ਼ ਡੈਸਕਟਾਪ;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "ਸਿਸਟਮ ਬੱਸ" +@@ -91,8 +191,7 @@ msgid "" + "%s has the following permissions built-in. These cannot be altered. If you " + "are concerned about these permissions, consider removing this application." + msgstr "" +-"%s ਵਿੱਚ ਅੱਗੇ ਦਿੱਤੀਆਂ ਇਜਾਜ਼ਤਾਂ ਪਹਿਲਾਂ ਹੀ ਹਨ। ਇਹਨਾਂ ਨੂੰ ਬਦਲਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ ਹੈ।" +-" ਜੇ ਤੁਸੀਂ ਇਹ " ++"%s ਵਿੱਚ ਅੱਗੇ ਦਿੱਤੀਆਂ ਇਜਾਜ਼ਤਾਂ ਪਹਿਲਾਂ ਹੀ ਹਨ। ਇਹਨਾਂ ਨੂੰ ਬਦਲਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ ਹੈ। ਜੇ ਤੁਸੀਂ ਇਹ " + "ਇਜਾਜ਼ਤਾਂ ਬਾਰੇ ਫ਼ਿਕਰ ਕਰਦੇ ਹੋ ਤਾਂ ਇਸ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਹਟਾਉਣ ਬਾਰੇ ਵਿਚਾਰ ਕਰੋ।" + + #: panels/applications/cc-applications-panel.c:1024 +@@ -178,8 +277,7 @@ msgid "" + "Data and services that this app has asked for access to and permissions that " + "it requires." + msgstr "" +-"ਡਾਟਾ ਅਤੇ ਸੇਵਾਵਾਂ, ਜੋ ਇਸ ਐਪ ਨੇ ਪਹੁੰਚ ਲਈ ਅਤੇ ਇਜ਼ਾਜਤਾਂ ਦੀ ਮੰਗ ਕੀਤੀ ਹੈ, ਜੋ ਇਸ ਨੂੰ" +-" ਚਾਹੀਦੀਆਂ ਹਨ।" ++"ਡਾਟਾ ਅਤੇ ਸੇਵਾਵਾਂ, ਜੋ ਇਸ ਐਪ ਨੇ ਪਹੁੰਚ ਲਈ ਅਤੇ ਇਜ਼ਾਜਤਾਂ ਦੀ ਮੰਗ ਕੀਤੀ ਹੈ, ਜੋ ਇਸ ਨੂੰ ਚਾਹੀਦੀਆਂ ਹਨ।" + + #: panels/applications/cc-applications-panel.ui:121 + #: panels/applications/cc-applications-panel.ui:127 +@@ -233,8 +331,7 @@ msgid "" + "Individual permissions for applications can be reviewed in the Privacy Settings." + msgstr "" +-"ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਈ ਵੱਖੋ-ਵੱਖ ਇਜਾਜ਼ਤਾਂ ਦੀ ਪੜਤਾਲ ਪਰਦੇਦਾਰੀ" +-" ਸੈਟਿੰਗਾਂ ਵਿੱਚ " ++"ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਈ ਵੱਖੋ-ਵੱਖ ਇਜਾਜ਼ਤਾਂ ਦੀ ਪੜਤਾਲ ਪਰਦੇਦਾਰੀ ਸੈਟਿੰਗਾਂ ਵਿੱਚ " + "ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ।" + + #: panels/applications/cc-applications-panel.ui:199 +@@ -494,8 +591,7 @@ msgid "" + "Use of the camera allows applications to capture photos and video. Disabling " + "the camera may cause some applications to not function properly." + msgstr "" +-"ਕੈਮਰੇ ਦੀ ਵਰਤੋਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਫੋਟੋ ਖਿੱਚਣ ਅਤੇ ਵਿਡੀਓ ਬਣਾਉਣ ਦਿੰਦੀ ਹੈ। ਕੈਮਰੇ ਨੂੰ" +-" ਅਸਮਰੱਥ ਕਰਨ ਨਾਲ ਕੁਝ " ++"ਕੈਮਰੇ ਦੀ ਵਰਤੋਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਫੋਟੋ ਖਿੱਚਣ ਅਤੇ ਵਿਡੀਓ ਬਣਾਉਣ ਦਿੰਦੀ ਹੈ। ਕੈਮਰੇ ਨੂੰ ਅਸਮਰੱਥ ਕਰਨ ਨਾਲ ਕੁਝ " + "ਐਪਲੀਕੇਸ਼ਨਾਂ ਠੀਕ ਤਰ੍ਹਾਂ ਕੰਮ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ।" + + #: panels/camera/cc-camera-panel.ui:85 +@@ -517,8 +613,7 @@ msgstr "ਆਪਣੀਆਂ ਤਸਵੀਰਾਂ ਨੂੰ ਸੁਰੱਖਿਅ + msgid "" + "screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;" + "network;identity;" +-msgstr "" +-"ਸਕਰੀਨ;ਲਾਕ;ਜਾਂਚ;ਪੜਤਾਲ;ਪ੍ਰਾਈਵੇਟ;ਨਿੱਜੀ;ਆਰਜ਼ੀ;ਇੰਡੈਕਸ;ਨਾਂ;ਨੈੱਟਵਰਕ;ਪਛਾਣ;ਕਰੈਸ਼;ਤਾਜ਼ਾ;" ++msgstr "ਸਕਰੀਨ;ਲਾਕ;ਜਾਂਚ;ਪੜਤਾਲ;ਪ੍ਰਾਈਵੇਟ;ਨਿੱਜੀ;ਆਰਜ਼ੀ;ਇੰਡੈਕਸ;ਨਾਂ;ਨੈੱਟਵਰਕ;ਪਛਾਣ;ਕਰੈਸ਼;ਤਾਜ਼ਾ;" + + #. TRANSLATORS: The user has to attach the sensor to the screen + #: panels/color/cc-color-calibrate.c:347 +@@ -531,8 +626,7 @@ msgstr "ਆਪਣੇ ਕੈਲੀਬਰੇਸ਼ਨ ਜੰਤਰ ਨੂੰ ਵਰ + #: panels/color/cc-color-calibrate.c:353 + msgid "" + "Move your calibration device to the calibrate position and press “Continue”" +-msgstr "" +-"ਆਪਣੇ ਕੈਲੀਬਰੇਸ਼ਨ ਜੰਤਰ ਨੂੰ ਕੈਲੀਬਰੇਸ਼ਨ ਸਥਿਤੀ ਉਤੇ ਲੈ ਜਾਉ ਅਤੇ ”ਜਾਰੀ ਰੱਖੋ” ਦੱਬੋ" ++msgstr "ਆਪਣੇ ਕੈਲੀਬਰੇਸ਼ਨ ਜੰਤਰ ਨੂੰ ਕੈਲੀਬਰੇਸ਼ਨ ਸਥਿਤੀ ਉਤੇ ਲੈ ਜਾਉ ਅਤੇ ”ਜਾਰੀ ਰੱਖੋ” ਦੱਬੋ" + + #. TRANSLATORS: Some calibration devices need the user to move a + #. * dial or switch manually. We also show a picture showing them +@@ -733,8 +827,7 @@ msgstr "ਇਹ URL ਲਿਖ ਲਵੋ।" + + #: panels/color/cc-color-panel.c:854 + msgid "Restart this computer and boot your normal operating system." +-msgstr "" +-"ਆਪਣੇ ਕੰਪਿਊਟਰ ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰੋ ਅਟੇ ਆਪਣੇ ਸਧਾਰਨ ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਨੂੰ ਬੂਟ ਕਰੋ।" ++msgstr "ਆਪਣੇ ਕੰਪਿਊਟਰ ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰੋ ਅਟੇ ਆਪਣੇ ਸਧਾਰਨ ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਨੂੰ ਬੂਟ ਕਰੋ।" + + #: panels/color/cc-color-panel.c:855 + msgid "Type the URL into your browser to download and install the profile." +@@ -760,9 +853,7 @@ msgstr "ਚੁਣੇ ਜੰਤਰ ਲਈ ਇੱਕ ਰੰਗ ਪਰੋਫਾਇ + msgid "" + "The measuring instrument is not detected. Please check it is turned on and " + "correctly connected." +-msgstr "" +-"ਮਾਪ ਜੰਤਰ ਖੋਜਿਆ ਨਹੀਂ ਗਿਆ ਹੈ। ਚੈੱਕ ਕਰੋ ਕਿ ਇਹ ਚਾਲੂ ਹੈ ਅਤੇ ਠੀਕ ਤਰ੍ਹਾਂ ਕੂਨੈਕਟ ਕੀਤਾ" +-" ਹੋਇਆ ਹੈ।" ++msgstr "ਮਾਪ ਜੰਤਰ ਖੋਜਿਆ ਨਹੀਂ ਗਿਆ ਹੈ। ਚੈੱਕ ਕਰੋ ਕਿ ਇਹ ਚਾਲੂ ਹੈ ਅਤੇ ਠੀਕ ਤਰ੍ਹਾਂ ਕੂਨੈਕਟ ਕੀਤਾ ਹੋਇਆ ਹੈ।" + + #. TRANSLATORS: this is when the button is insensitive + #: panels/color/cc-color-panel.c:1245 +@@ -784,10 +875,8 @@ msgid "" + "screen. The longer you spend on calibration, the better the quality of the " + "color profile." + msgstr "" +-"ਕੈਲੀਬਰੇਸ਼ਨ ਇੱਕ ਪਰੋਫਾਇਲ ਦੇਵੇਗੀ, ਜਿਸ ਨੂੰ ਤੁਸੀਂ ਆਪਣੀ ਸਕਰੀਨ ਦੇ ਰੰਗ ਦੇ ਪਰਬੰਧ ਲਈ ਵਰਤ" +-" ਸਕਦੇ ਹੋ। " +-"ਕੈਲੀਬਰੇਸ਼ਨ ਉੱਤੇ ਜਿੰਨਾ ਵੱਧ ਸਮਾਂ ਤੁਸੀਂ ਲਗਾਉਗੇ, ਰੰਗ ਪਰੋਫਾਇਲ ਉਹਨਾਂ ਹੀ ਵੱਧ ਚੰਗਾ" +-" ਹੋਵੇਗਾ।" ++"ਕੈਲੀਬਰੇਸ਼ਨ ਇੱਕ ਪਰੋਫਾਇਲ ਦੇਵੇਗੀ, ਜਿਸ ਨੂੰ ਤੁਸੀਂ ਆਪਣੀ ਸਕਰੀਨ ਦੇ ਰੰਗ ਦੇ ਪਰਬੰਧ ਲਈ ਵਰਤ ਸਕਦੇ ਹੋ। " ++"ਕੈਲੀਬਰੇਸ਼ਨ ਉੱਤੇ ਜਿੰਨਾ ਵੱਧ ਸਮਾਂ ਤੁਸੀਂ ਲਗਾਉਗੇ, ਰੰਗ ਪਰੋਫਾਇਲ ਉਹਨਾਂ ਹੀ ਵੱਧ ਚੰਗਾ ਹੋਵੇਗਾ।" + + #: panels/color/cc-color-panel.ui:38 + msgid "" +@@ -829,8 +918,7 @@ msgid "" + "Select a display target white point. Most displays should be calibrated to a " + "D65 illuminant." + msgstr "" +-"ਡਿਸਪਲੇਅ ਟਾਰਗੇਟ ਚਿੱਟਾ ਬਿੰਦੂ ਚੁਣੋ। ਬਹੁਤੇ ਡਿਸਪਲੇਅ ਨੂੰ D65 illuminant ਤੱਕ" +-" ਕੈਲੀਬਰੇਟ ਕੀਤਾ ਜਾਣਾ " ++"ਡਿਸਪਲੇਅ ਟਾਰਗੇਟ ਚਿੱਟਾ ਬਿੰਦੂ ਚੁਣੋ। ਬਹੁਤੇ ਡਿਸਪਲੇਅ ਨੂੰ D65 illuminant ਤੱਕ ਕੈਲੀਬਰੇਟ ਕੀਤਾ ਜਾਣਾ " + "ਚਾਹੀਦਾ ਹੈ।" + + #: panels/color/cc-color-panel.ui:278 +@@ -842,17 +930,14 @@ msgid "" + "Please set the display to a brightness that is typical for you. Color " + "management will be most accurate at this brightness level." + msgstr "" +-"ਡਿਸਪਲੇਅ ਲਈ ਚਮਕ ਪੱਧਰ ਸੈੱਟ ਕਰੋ, ਜੋ ਤੁਸੀਂ ਆਮ ਤੌਰ ਉੱਤੇ ਵਰਤਦੇ ਹੋ। ਰੰਗ ਪਰਬੰਧ ਉਸ ਚਮਕ" +-" ਪੱਧਰ ਉੱਤੇ ਸਭ ਤੋਂ " ++"ਡਿਸਪਲੇਅ ਲਈ ਚਮਕ ਪੱਧਰ ਸੈੱਟ ਕਰੋ, ਜੋ ਤੁਸੀਂ ਆਮ ਤੌਰ ਉੱਤੇ ਵਰਤਦੇ ਹੋ। ਰੰਗ ਪਰਬੰਧ ਉਸ ਚਮਕ ਪੱਧਰ ਉੱਤੇ ਸਭ ਤੋਂ " + "ਵੱਧ ਸ਼ੁੱਧ ਹੋਵੇਗਾ।" + + #: panels/color/cc-color-panel.ui:307 + msgid "" + "Alternatively, you can use the brightness level used with one of the other " + "profiles for this device." +-msgstr "" +-"ਬਦਲਵੇਂ ਰੂਪ ਵਿੱਚ, ਤੁਸੀਂ ਇਹ ਜੰਤਰ ਲਈ ਹੋਰ ਪਰੋਫਾਇਲਾਂ ਵਿੱਚੋਂ ਇੱਕ ਨੂੰ ਚਮਕ ਪੱਧਰ ਲਈ" +-" ਵਰਤ ਸਕਦੇ ਹੋ।" ++msgstr "ਬਦਲਵੇਂ ਰੂਪ ਵਿੱਚ, ਤੁਸੀਂ ਇਹ ਜੰਤਰ ਲਈ ਹੋਰ ਪਰੋਫਾਇਲਾਂ ਵਿੱਚੋਂ ਇੱਕ ਨੂੰ ਚਮਕ ਪੱਧਰ ਲਈ ਵਰਤ ਸਕਦੇ ਹੋ।" + + #: panels/color/cc-color-panel.ui:318 + msgid "Display Brightness" +@@ -863,8 +948,7 @@ msgid "" + "You can use a color profile on different computers, or even create profiles " + "for different lighting conditions." + msgstr "" +-"ਤੁਸੀਂ ਵੱਖਰੇ ਕੰਪਿਊਟਰ ਉੱਤੇ ਰੰਗ ਪਰੋਫਾਇਲ ਵਰਤ ਸਕਦੇ ਹੋ ਜਾਂ ਵੱਖਰੀਆਂ ਚਾਨਣ ਸ਼ਰਤਾਂ" +-" ਮੁਤਾਬਕ ਰੰਗ ਪਰੋਫਾਇਲ ਬਣਾ " ++"ਤੁਸੀਂ ਵੱਖਰੇ ਕੰਪਿਊਟਰ ਉੱਤੇ ਰੰਗ ਪਰੋਫਾਇਲ ਵਰਤ ਸਕਦੇ ਹੋ ਜਾਂ ਵੱਖਰੀਆਂ ਚਾਨਣ ਸ਼ਰਤਾਂ ਮੁਤਾਬਕ ਰੰਗ ਪਰੋਫਾਇਲ ਬਣਾ " + "ਸਕਦੇ ਹੋ।" + + #: panels/color/cc-color-panel.ui:348 +@@ -901,10 +985,8 @@ msgid "" + "\">GNU/Linux, Apple OS X and Microsoft Windows systems useful." + msgstr "" +-"ਤੁਸੀਂ ਪਰੋਫਾਇਲ ਨੂੰ GNU/ਲੀਨਕਸ, ਐਪਲ OS X<" +-"/a> " +-"ਅਤੇ Microsoft Windows ਸਿਸਟਮ ਉੱਤੇ ਕਿਵੇਂ ਵਰਤੀਏ ਬਾਰੇ" +-" ਹਦਾਇਤਾਂ " ++"ਤੁਸੀਂ ਪਰੋਫਾਇਲ ਨੂੰ GNU/ਲੀਨਕਸ, ਐਪਲ OS X " ++"ਅਤੇ Microsoft Windows ਸਿਸਟਮ ਉੱਤੇ ਕਿਵੇਂ ਵਰਤੀਏ ਬਾਰੇ ਹਦਾਇਤਾਂ " + "ਵੇਖ ਸਕਦੇ ਹੋ।" + + #: panels/color/cc-color-panel.ui:607 +@@ -930,8 +1012,7 @@ msgstr "ਸ਼ਾਮਲ(_A)" + msgid "" + "Problems detected. The profile may not work correctly. Show " + "details." +-msgstr "" +-"ਸਮੱਸਿਆ ਆਈ ਹੈ। ਪਰੋਫਾਇਲ ਠੀਕ ਤਰ੍ਹਾਂ ਸ਼ਾਇਦ ਕੰਮ ਨਾ ਕਰੇ। ਵੇਰਵਾ ਵੇਖੋ" ++msgstr "ਸਮੱਸਿਆ ਆਈ ਹੈ। ਪਰੋਫਾਇਲ ਠੀਕ ਤਰ੍ਹਾਂ ਸ਼ਾਇਦ ਕੰਮ ਨਾ ਕਰੇ। ਵੇਰਵਾ ਵੇਖੋ" + + #: panels/color/cc-color-panel.ui:788 + msgid "Each device needs an up to date color profile to be color managed." +@@ -1154,14 +1235,12 @@ msgstr "ਰੰਗ" + #: panels/color/gnome-color-panel.desktop.in.in:4 + msgid "" + "Calibrate the color of your devices, such as displays, cameras or printers" +-msgstr "" +-"ਆਪਣੇ ਜੰਤਰਾਂ, ਜਿਵੇਂ ਕਿ ਡਿਸਪਲੇਅ, ਕੈਮਰੇ ਜਾਂ ਪਰਿੰਟਰਾਂ ਦੇ ਰੰਗ ਨੂੰ ਕੈਲੀਬਰੇਟ ਕਰੋ" ++msgstr "ਆਪਣੇ ਜੰਤਰਾਂ, ਜਿਵੇਂ ਕਿ ਡਿਸਪਲੇਅ, ਕੈਮਰੇ ਜਾਂ ਪਰਿੰਟਰਾਂ ਦੇ ਰੰਗ ਨੂੰ ਕੈਲੀਬਰੇਟ ਕਰੋ" + + #. 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 "" +-"ਰੰਗ;Color;ICC;Profile;Calibrate;ਪ੍ਰਿੰਟਰ;ਪਰਿੰਟਰ;Printer;Display;ਡਿਸਪਲੇਅ;" ++msgstr "ਰੰਗ;Color;ICC;Profile;Calibrate;ਪ੍ਰਿੰਟਰ;ਪਰਿੰਟਰ;Printer;Display;ਡਿਸਪਲੇਅ;" + + #: panels/common/cc-common-language.c:300 + msgid "Other…" +@@ -1541,8 +1620,7 @@ msgid "" + "Sending reports of technical problems helps us improve %s. Reports are sent " + "anonymously and are scrubbed of personal data. %s" + msgstr "" +-"ਤਕਨੀਕੀ ਸਮੱਸਿਆਵਾਂ ਬਾਰੇ ਰਿਪੋਰਟਾਂ ਭੇਜਣ ਨਾਲ ਸਾਨੂੰ %s ਸੁਧਾਰਨ ਲਈ ਮਦਦ ਮਿਲਦੀ ਹੈ।" +-" ਰਿਪੋਰਟ ਅਣਪਛਾਤੇ " ++"ਤਕਨੀਕੀ ਸਮੱਸਿਆਵਾਂ ਬਾਰੇ ਰਿਪੋਰਟਾਂ ਭੇਜਣ ਨਾਲ ਸਾਨੂੰ %s ਸੁਧਾਰਨ ਲਈ ਮਦਦ ਮਿਲਦੀ ਹੈ। ਰਿਪੋਰਟ ਅਣਪਛਾਤੇ " + "ਰੂਪ ਵਿੱਚ ਭੇਜੀਆਂ ਜਾਂਦੀਆਂ ਹਨ ਅਤੇ ਨਿੱਜੀ ਡਾਟੇ ਨੂੰ ਹਟਾਇਆ ਜਾਂਦਾ ਹੈ। %s" + + #: panels/diagnostics/cc-diagnostics-panel.ui:28 +@@ -1574,8 +1652,7 @@ msgid "" + "screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;" + "network;identity;privacy;" + msgstr "" +-"ਸਕਰੀਨ;ਲਾਕ;ਜਾਂਚ;ਪੜਤਾਲ;ਪ੍ਰਾਈਵੇਟ;ਨਿੱਜੀ;ਆਰਜ਼ੀ;ਇੰਡੈਕਸ;ਨਾਂ;ਨੈੱਟਵਰਕ;ਪਛਾਣ;ਕਰੈਸ਼;ਤਾਜ਼ਾ;ਪਰਦ" +-"ੇਦਾਰੀ;" ++"ਸਕਰੀਨ;ਲਾਕ;ਜਾਂਚ;ਪੜਤਾਲ;ਪ੍ਰਾਈਵੇਟ;ਨਿੱਜੀ;ਆਰਜ਼ੀ;ਇੰਡੈਕਸ;ਨਾਂ;ਨੈੱਟਵਰਕ;ਪਛਾਣ;ਕਰੈਸ਼;ਤਾਜ਼ਾ;ਪਰਦੇਦਾਰੀ;" + + #: panels/display/cc-display-panel.c:1014 + #: panels/network/connection-editor/connection-editor.ui:27 +@@ -1624,8 +1701,7 @@ msgid "" + "Drag displays to match your physical display setup. Select a display to " + "change its settings." + msgstr "" +-"ਡਿਸਪਲੇਆਂ ਨੂੰ ਆਪਣੇ ਅਸਲ ਡਿਸਪਲੇਅ ਬਨਾਵਟ ਨਾਲ ਮਿਲਾਉਣ ਲਈ ਉਹਨਾਂ ਨੂੰ ਖਿਸਕਾਓ। ਡਿਸਪਲੇਅ" +-" ਦੀਆਂ ਸੈਟਿੰਗਾਂ " ++"ਡਿਸਪਲੇਆਂ ਨੂੰ ਆਪਣੇ ਅਸਲ ਡਿਸਪਲੇਅ ਬਨਾਵਟ ਨਾਲ ਮਿਲਾਉਣ ਲਈ ਉਹਨਾਂ ਨੂੰ ਖਿਸਕਾਓ। ਡਿਸਪਲੇਅ ਦੀਆਂ ਸੈਟਿੰਗਾਂ " + "ਨੂੰ ਬਦਲਣ ਲਈ ਉਸ ਨੂੰ ਚੁਣੋ।" + + #: panels/display/cc-display-panel.ui:250 +@@ -1722,8 +1798,7 @@ msgid "" + "Night light makes the screen color warmer. This can help to prevent eye " + "strain and sleeplessness." + msgstr "" +-"ਰਾਤ ਦੀ ਰੋਸ਼ਨੀ ਸਕਰੀਨ ਰੰਗਾਂ ਨੂੰ ਨਿੱਘਾ ਬਣਾਉਂਦੀ ਹੈ। ਇਸ ਅੱਖਾਂ ਉੱਤੇ ਜ਼ੋਰ ਪੈਣ ਅਤੇ ਨੀਂਦ" +-" ਟਲਣ ਤੋਂ ਰੋਕਣ ਲਈ " ++"ਰਾਤ ਦੀ ਰੋਸ਼ਨੀ ਸਕਰੀਨ ਰੰਗਾਂ ਨੂੰ ਨਿੱਘਾ ਬਣਾਉਂਦੀ ਹੈ। ਇਸ ਅੱਖਾਂ ਉੱਤੇ ਜ਼ੋਰ ਪੈਣ ਅਤੇ ਨੀਂਦ ਟਲਣ ਤੋਂ ਰੋਕਣ ਲਈ " + "ਮਦਦ ਕਰਦੀ ਹੈ।" + + #: panels/display/cc-night-light-page.ui:127 +@@ -1792,10 +1867,8 @@ msgid "" + "Panel;Projector;xrandr;Screen;Resolution;Refresh;Monitor;Night;Light;Blue;" + "redshift;color;sunset;sunrise;" + msgstr "" +-"ਪੈਨਲ;ਪਰੋਜੈਕਟਰ;xrandr;ਸਕਰੀਨ;ਰੈਜ਼ੋਲੂਸ਼ਨ;ਤਾਜ਼ਾ;ਮਾਨੀਟਰ;ਰਾਤ;ਰਾਤਰੀ;ਰੌਸ਼ਨੀ;ਪ੍ਰਕਾਸ਼;ਨੀਲਾ" +-";ਲਾਲ-" +-"ਪਰਿਵਰਤਨ;ਸੂਰਜ-ਚੜ੍ਹਨਾ;ਸੂਰਜ-ਲਹਿਣਾ;ਸੂਰਜ-ਡੁੱਬਣਾ;ਹਨੇਰਾ;ਰਾਤ-ਵੇਲਾ;ਚਾਨਣ;ਸਰਘੀ;ਤਰਕਾਲਾਂ;ਆਥ" +-"ਣ;" ++"ਪੈਨਲ;ਪਰੋਜੈਕਟਰ;xrandr;ਸਕਰੀਨ;ਰੈਜ਼ੋਲੂਸ਼ਨ;ਤਾਜ਼ਾ;ਮਾਨੀਟਰ;ਰਾਤ;ਰਾਤਰੀ;ਰੌਸ਼ਨੀ;ਪ੍ਰਕਾਸ਼;ਨੀਲਾ;ਲਾਲ-" ++"ਪਰਿਵਰਤਨ;ਸੂਰਜ-ਚੜ੍ਹਨਾ;ਸੂਰਜ-ਲਹਿਣਾ;ਸੂਰਜ-ਡੁੱਬਣਾ;ਹਨੇਰਾ;ਰਾਤ-ਵੇਲਾ;ਚਾਨਣ;ਸਰਘੀ;ਤਰਕਾਲਾਂ;ਆਥਣ;" + + #: panels/info-overview/cc-info-overview-panel.c:417 + #: panels/info-overview/cc-info-overview-panel.c:432 +@@ -1902,8 +1975,7 @@ msgid "" + "The device name is used to identify this device when it is viewed over the " + "network, or when pairing Bluetooth devices." + msgstr "" +-"ਡਿਵਾਈਸ ਨਾਂ ਨੂੰ ਇਸ ਡਿਵਾਈਸ ਦੀ ਪਛਾਣ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ, ਜਦੋਂ ਇਸ ਨੂੰ ਨੈੱਟਵਰਕ" +-" ਉੱਤੇ ਵੇਖਦੇ ਹੋ ਜਾਂ " ++"ਡਿਵਾਈਸ ਨਾਂ ਨੂੰ ਇਸ ਡਿਵਾਈਸ ਦੀ ਪਛਾਣ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ, ਜਦੋਂ ਇਸ ਨੂੰ ਨੈੱਟਵਰਕ ਉੱਤੇ ਵੇਖਦੇ ਹੋ ਜਾਂ " + "ਜਦੋਂ ਬਲੂਟੁੱਥ ਡਿਵਾਈਸਾਂ ਨਾਲ ਪੇਅਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।" + + #: panels/info-overview/cc-info-overview-panel.ui:234 +@@ -1928,8 +2000,7 @@ msgid "" + "device;system;information;hostname;memory;processor;version;default;" + "application;preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;" + msgstr "" +-"ਡਿਵਾਈਸ;ਡੀਵਾਈਸ;;ਜੰਤਰ;ਸਿਸਟਮ;ਜਾਣਕਾਰੀ;ਮੈਮੋਰੀ;ਪਰੋਸੈਸਰ;ਵਰਜ਼ਨ;ਪ੍ਰੋਸੈਸਰ;ਡਿਫਾਲਟ;ਐਪਲੀਕੇਸ" +-"਼ਨ;ਯੂਐਸਬੀ;" ++"ਡਿਵਾਈਸ;ਡੀਵਾਈਸ;;ਜੰਤਰ;ਸਿਸਟਮ;ਜਾਣਕਾਰੀ;ਮੈਮੋਰੀ;ਪਰੋਸੈਸਰ;ਵਰਜ਼ਨ;ਪ੍ਰੋਸੈਸਰ;ਡਿਫਾਲਟ;ਐਪਲੀਕੇਸ਼ਨ;ਯੂਐਸਬੀ;" + "ਡੀਵੀਡੀ;ਸੀਡੀ;ਆਡੀਓ;ਔਡੀਓ;ਵੀਡੀਓ;ਵਿਡੀਓ;ਡਿਸਕ;ਆਟੋਰਨ;ਮੀਡੀਆ;ਹਟਾਉਣਯੋਗ;ਯੰਤਰ;ਹੋਸਟਨੇਮ;" + + #: panels/keyboard/00-multimedia.xml.in:2 +@@ -2165,8 +2236,7 @@ msgid "" + "The alternate characters key can be used to enter additional characters. " + "These are sometimes printed as a third-option on your keyboard." + msgstr "" +-"ਬਦਲਵੀਂ ਅੱਖਰ ਸਵਿੱਚ ਨੂੰ ਹੋਰ ਅੱਖਰ ਦੇਣ ਲਈ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ। ਇਹਨਾਂ ਨੂੰ ਕਈ ਵਾਰ" +-" ਤੁਹਾਡੇ ਕੀਬੋਰਡ ਉੱਤੇ " ++"ਬਦਲਵੀਂ ਅੱਖਰ ਸਵਿੱਚ ਨੂੰ ਹੋਰ ਅੱਖਰ ਦੇਣ ਲਈ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ। ਇਹਨਾਂ ਨੂੰ ਕਈ ਵਾਰ ਤੁਹਾਡੇ ਕੀਬੋਰਡ ਉੱਤੇ " + "ਤੀਜੀ-ਚੋਣ ਵਜੋਂ ਛਾਪਿਆ ਗਿਆ ਹੁੰਦਾ ਹੈ।" + + #: panels/keyboard/cc-keyboard-panel.c:74 +@@ -2218,10 +2288,9 @@ msgid "" + "followed by C and o will enter ©, a followed by " + "' will enter á." + msgstr "" +-"ਮਿਸ਼ਰਿਤ ਸਵਿੱਚ ਕਈ ਕਿਸਮ ਦੇ ਵੱਖ-ਵੱਖ ਅੱਖਰ ਦੇਣ ਲਈ ਕੰਮ ਆਉਂਦੀ ਹੈ। ਇਹ ਵਰਤਣ ਲਈ" +-"ਤਦ ਲੜੀਵਾਰ ਅੱਖਰ ਦੇਣ ਲਈ ਬਣਾਓ ਨੂੰ ਦਬਾਓ। ਮਿਸਾਲ ਲਈ C ਅਤੇ o " +-"ਦੇ ਬਾਅਦ ਬਣਾਓ ਨਾਲ © ਪਵੇਗਾ, a ਤੇ ' ਦੇ ਬਾਅਦ ਬਣਾਓ " +-"ਦਬਾਉਣ ਨਾਲ á ਪਵੇਗਾ।" ++"ਮਿਸ਼ਰਿਤ ਸਵਿੱਚ ਕਈ ਕਿਸਮ ਦੇ ਵੱਖ-ਵੱਖ ਅੱਖਰ ਦੇਣ ਲਈ ਕੰਮ ਆਉਂਦੀ ਹੈ। ਇਹ ਵਰਤਣ ਲਈਤਦ ਲੜੀਵਾਰ ਅੱਖਰ ਦੇਣ " ++"ਲਈ ਬਣਾਓ ਨੂੰ ਦਬਾਓ। ਮਿਸਾਲ ਲਈ C ਅਤੇ o ਦੇ ਬਾਅਦ ਬਣਾਓ ਨਾਲ © ਪਵੇਗਾ, " ++"a ਤੇ ' ਦੇ ਬਾਅਦ ਬਣਾਓ ਦਬਾਉਣ ਨਾਲ á ਪਵੇਗਾ।" + + #: panels/keyboard/cc-keyboard-panel.c:98 + #| msgid "Caps" +@@ -2302,8 +2371,7 @@ msgid "" + "Resetting the shortcuts may affect your custom shortcuts. This cannot be " + "undone." + msgstr "" +-"ਸ਼ਾਰਟਕੱਟਾਂ ਨੂੰ ਮੁੜ-ਸੈੱਟ ਕਰਨ ਨਾਲ ਤੁਹਾਡੇ ਕਸਟਮ ਸ਼ਾਰਟਕੱਟਾਂ ਉੱਤੇ ਅਸਰ ਪੈ ਸਕਦਾ ਹੈ। ਇਸ" +-" ਨੂੰ ਵਾਪਸ ਨਹੀਂ " ++"ਸ਼ਾਰਟਕੱਟਾਂ ਨੂੰ ਮੁੜ-ਸੈੱਟ ਕਰਨ ਨਾਲ ਤੁਹਾਡੇ ਕਸਟਮ ਸ਼ਾਰਟਕੱਟਾਂ ਉੱਤੇ ਅਸਰ ਪੈ ਸਕਦਾ ਹੈ। ਇਸ ਨੂੰ ਵਾਪਸ ਨਹੀਂ " + "ਪਰਤਾਇਆ ਜਾ ਸਕਦਾ ਹੈ।" + + #: panels/keyboard/cc-keyboard-shortcut-dialog.c:433 +@@ -2352,9 +2420,7 @@ msgstr "ਕੋਈ ਕੀ-ਬੋਰਡ ਸ਼ਾਰਟਕੱਟ ਨਹੀਂ ਲੱ + #: panels/keyboard/cc-keyboard-shortcut-editor.c:391 + #, c-format + msgid "%s is already being used for %s. If you replace it, %s will be disabled" +-msgstr "" +-"%s ਨੂੰ ਪਹਿਲਾਂ ਹੀ %s ਨੂੰ ਵਰਤ ਰਿਹਾ ਹੈ। ਜੇ ਤੁਸੀਂ ਇਸ ਨੂੰ ਬਦਲਿਆ ਤਾਂ %s ਅਸਮਰੱਥ ਹੋ" +-" ਜਾਵੇਗਾ।" ++msgstr "%s ਨੂੰ ਪਹਿਲਾਂ ਹੀ %s ਨੂੰ ਵਰਤ ਰਿਹਾ ਹੈ। ਜੇ ਤੁਸੀਂ ਇਸ ਨੂੰ ਬਦਲਿਆ ਤਾਂ %s ਅਸਮਰੱਥ ਹੋ ਜਾਵੇਗਾ।" + + #: panels/keyboard/cc-keyboard-shortcut-editor.c:535 + msgid "Enter the new shortcut" +@@ -2431,8 +2497,7 @@ msgstr "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ ਵੇਖੋ ਤੇ ਬਦਲ + #: panels/keyboard/gnome-keyboard-panel.desktop.in.in:19 + msgid "" + "Shortcut;Workspace;Window;Resize;Zoom;Contrast;Input;Source;Lock;Volume;" +-msgstr "" +-"ਸ਼ਾਰਟਕੱਟ;ਵਰਕਸਪੇਸ;ਵਿੰਡੋ;ਮੁੜ-ਆਕਾਰ;ਰੀਸਾਈਜ਼;ਜ਼ੂਮ;ਕਨਟਰਾਸਟ;ਇਨਪੁਟ;ਸਰੋਤ;ਲਾਕ;ਵਾਲੀਅਮ;" ++msgstr "ਸ਼ਾਰਟਕੱਟ;ਵਰਕਸਪੇਸ;ਵਿੰਡੋ;ਮੁੜ-ਆਕਾਰ;ਰੀਸਾਈਜ਼;ਜ਼ੂਮ;ਕਨਟਰਾਸਟ;ਇਨਪੁਟ;ਸਰੋਤ;ਲਾਕ;ਵਾਲੀਅਮ;" + + #: panels/location/cc-location-panel.ui:31 + msgid "Location services turned off" +@@ -2447,8 +2512,7 @@ msgid "" + "Location services allow applications to know your location. Using Wi-Fi and " + "mobile broadband increases accuracy." + msgstr "" +-"ਟਿਕਾਣਾ ਸੇਵਾਵਾਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਦਾ ਪਤਾ ਲਗਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦੀਆਂ ਹਨ।" +-" ਸਟੀਕਤਾ " ++"ਟਿਕਾਣਾ ਸੇਵਾਵਾਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਦਾ ਪਤਾ ਲਗਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦੀਆਂ ਹਨ। ਸਟੀਕਤਾ " + "ਵਧਾਉਣ ਲਈ Wi-Fi ਅਤੇ ਮੋਬਾਈਲ ਬਰਾਂਡਬੈਂਡ ਨੂੰ ਵਰਤੋਂ।" + + #: panels/location/cc-location-panel.ui:81 +@@ -2480,8 +2544,8 @@ msgid "" + "Automatically locking the screen prevents others from accessing the computer " + "while you're away." + msgstr "" +-"ਆਪਣੇ-ਆਪ ਸਕਰੀਨ ਨੂੰ ਲਾਕ ਕਰਨ ਨਾਲ ਤੁਹਾਡੇ ਦੂਰ ਚਲੇ ਜਾਣ ਉੱਤੇ ਹੋਰਾਂ ਵਲੋਂ ਕੰਪਿਊਟਰ ਨੂੰ" +-" ਵਰਤਣ ਤੋਂ ਰੋਕਿਆ ਜਾਂਦਾ ਹੈ।" ++"ਆਪਣੇ-ਆਪ ਸਕਰੀਨ ਨੂੰ ਲਾਕ ਕਰਨ ਨਾਲ ਤੁਹਾਡੇ ਦੂਰ ਚਲੇ ਜਾਣ ਉੱਤੇ ਹੋਰਾਂ ਵਲੋਂ ਕੰਪਿਊਟਰ ਨੂੰ ਵਰਤਣ ਤੋਂ ਰੋਕਿਆ " ++"ਜਾਂਦਾ ਹੈ।" + + #: panels/lock/cc-lock-panel.ui:44 + msgid "Blank Screen Delay" +@@ -2515,9 +2579,7 @@ msgstr "ਨਵੇਂ _USB ਡਿਵਾਈਸਾਂ ਉੱਤੇ ਰੋਕ" + msgid "" + "Prevent new USB devices from interacting with the system when the screen is " + "locked." +-msgstr "" +-"ਜਦੋਂ ਸਕਰੀਨ ਲਾਕ ਹੋਵੇ ਤਾਂ ਨਵੇਂ USB ਡਿਵਾਈਸਾਂ ਨੂੰ ਸਿਸਟਮ ਨਾਲ ਤਾਲਮੇਲ ਕਰਨ ਤੋਂ ਰੋਕਦਾ" +-" ਹੈ।" ++msgstr "ਜਦੋਂ ਸਕਰੀਨ ਲਾਕ ਹੋਵੇ ਤਾਂ ਨਵੇਂ USB ਡਿਵਾਈਸਾਂ ਨੂੰ ਸਿਸਟਮ ਨਾਲ ਤਾਲਮੇਲ ਕਰਨ ਤੋਂ ਰੋਕਦਾ ਹੈ।" + + #. Translators: Option for "Lock screen after blank for" in "Screen Lock" dialog. + #: panels/lock/cc-lock-panel.ui:166 +@@ -2650,8 +2712,7 @@ msgid "" + "Disabling the microphone may cause some applications to not function " + "properly." + msgstr "" +-"ਮਾਈਕਰੋਫੋਨ ਦੀ ਵਰਤੋਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਆਡੀਓ ਰਿਕਾਰਡ ਕਰਨ ਤੇ ਸੁਣਨ ਲਈ ਸਹਿਮਤੀ ਦਿੰਦੀ ਹੈ।" +-" ਮਾਈਕਰੋਫੋਨ ਨੂੰ " ++"ਮਾਈਕਰੋਫੋਨ ਦੀ ਵਰਤੋਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਆਡੀਓ ਰਿਕਾਰਡ ਕਰਨ ਤੇ ਸੁਣਨ ਲਈ ਸਹਿਮਤੀ ਦਿੰਦੀ ਹੈ। ਮਾਈਕਰੋਫੋਨ ਨੂੰ " + "ਅਸਮਰੱਥ ਕਰਨ ਨਾਲ ਕੁਝ ਐਪਲੀਕੇਸ਼ਨਾਂ ਠੀਕ ਤਰ੍ਹਾਂ ਕੰਮ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ।" + + #: panels/microphone/cc-microphone-panel.ui:85 +@@ -2666,11 +2727,6 @@ msgstr "ਮਾਈਕਰੋਫ਼ੋਨ ਪਹੁੰਚ ਲਈ ਕੋਈ ਐਪ + msgid "Protect your conversations" + msgstr "ਤਹਾਡੀਆਂ ਗੱਲਾਂਬਾਤਾਂ ਸੁਰੱਖਿਅਤ ਕਰੋ" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "ਆਮ" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "ਪ੍ਰਾਇਮਰੀ ਬਟਨ" +@@ -2772,15 +2828,13 @@ msgstr "ਮਾਊਸ ਤੇ ਟੱਚਪੈਚ" + #: panels/mouse/gnome-mouse-panel.desktop.in.in:4 + msgid "" + "Change your mouse or touchpad sensitivity and select right or left-handed" +-msgstr "" +-"ਆਪਣੇ ਮਾਊਸ ਜਾਂ ਟੱਚਪੈਡ ਦੀ ਸੰਵੇਦਨਸ਼ੀਲਤਾ ਬਦਲੋ ਅਤੇ ਸੱਜੇ ਜਾਂ ਖੱਬੇ-ਹੱਥ ਦੀ ਚੋਣ ਕਰੋ" ++msgstr "ਆਪਣੇ ਮਾਊਸ ਜਾਂ ਟੱਚਪੈਡ ਦੀ ਸੰਵੇਦਨਸ਼ੀਲਤਾ ਬਦਲੋ ਅਤੇ ਸੱਜੇ ਜਾਂ ਖੱਬੇ-ਹੱਥ ਦੀ ਚੋਣ ਕਰੋ" + + #. 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;Pointer;Click;Tap;Double;Button;Trackball;ਟਰੈਕਪੈਂਡ;ਪੁਆਇੰਟਰ;ਕਲਿੱਕ;ਟੈਪ;" +-"ਡਬਲ;" ++"Trackpad;Pointer;Click;Tap;Double;Button;Trackball;ਟਰੈਕਪੈਂਡ;ਪੁਆਇੰਟਰ;ਕਲਿੱਕ;ਟੈਪ;ਡਬਲ;" + "ਬਟਨ;ਟਰੈਕਬਾਲ;Scroll;" + + #: panels/network/cc-network-panel.c:661 panels/network/cc-wifi-panel.ui:307 +@@ -2851,8 +2905,7 @@ msgid "" + "Turning on the hotspot will disconnect from %s, and it will not be possible " + "to access the internet through Wi-Fi." + msgstr "" +-"ਹਾਟਸਪਾਟ ਨੂੰ ਚਾਲੂ ਕਰਨ ਨਾਲ %s ਤੋਂ ਡਿਸ-ਕਨੈਕਟ ਕੀਤਾ ਜਾਵੇਗਾ ਅਤੇ Wi-Fi ਰਾਹੀਂ" +-" ਇੰਟਰਨੈੱਟ ਨਾਲ ਪਹੁੰਚ " ++"ਹਾਟਸਪਾਟ ਨੂੰ ਚਾਲੂ ਕਰਨ ਨਾਲ %s ਤੋਂ ਡਿਸ-ਕਨੈਕਟ ਕੀਤਾ ਜਾਵੇਗਾ ਅਤੇ Wi-Fi ਰਾਹੀਂ ਇੰਟਰਨੈੱਟ ਨਾਲ ਪਹੁੰਚ " + "ਸੰਭਵ ਨਹੀਂ ਹੋਵੇਗੀ।" + + #: panels/network/cc-wifi-hotspot-dialog.c:265 +@@ -2869,10 +2922,8 @@ msgid "" + "Wi-Fi network that they can connect to. To do this, you must have an " + "internet connection through a source other than Wi-Fi." + msgstr "" +-"Wi-Fi ਹਾਟਸਪਾਟ ਹੋਰਾਂ ਨੂੰ ਤੁਹਾਡੇ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਨੂੰ ਸਾਂਝਾ ਕਰਨ ਦਿੰਦਾ ਹੈ, ਜੋ ਕਿ" +-" Wi-Fi ਨੈੱਟਵਰਕ ਬਣਾ " +-"ਕੇ ਹੁੰਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਉਹ ਕਨੈਕਟ ਹੋ ਸਕਦੇ ਹਨ। ਇਹ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ Wi-Fi ਤੋਂ ਬਿਨਾਂ" +-" ਕਿਸੇ ਹੋਰ ਸਰੋਤ " ++"Wi-Fi ਹਾਟਸਪਾਟ ਹੋਰਾਂ ਨੂੰ ਤੁਹਾਡੇ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਨੂੰ ਸਾਂਝਾ ਕਰਨ ਦਿੰਦਾ ਹੈ, ਜੋ ਕਿ Wi-Fi ਨੈੱਟਵਰਕ ਬਣਾ " ++"ਕੇ ਹੁੰਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਉਹ ਕਨੈਕਟ ਹੋ ਸਕਦੇ ਹਨ। ਇਹ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ Wi-Fi ਤੋਂ ਬਿਨਾਂ ਕਿਸੇ ਹੋਰ ਸਰੋਤ " + "ਰਾਹੀਂ ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।" + + #: panels/network/cc-wifi-hotspot-dialog.ui:44 +@@ -2992,10 +3043,8 @@ msgid "" + "network device this connection is activated on. This feature is known as MAC " + "cloning or spoofing. Example: 00:11:22:33:44:55" + msgstr "" +-"ਇੱਥੇ ਦਿੱਤਾ ਮੈਕ (MAC) ਐਡਰੈੱਸ ਨੈੱਟਵਰਕ ਡਿਵਾਈਸ ਲਈ ਹਾਰਡਵੇਅਰ ਐਡਰੈੱਸ ਵਜੋਂ ਵਰਤਿਆ" +-" ਜਾਵੇਗਾ, ਜਿਸ ਲਈ ਇਸ " +-"ਕਨੈਕਸ਼ਨ ਐਕਟੀਵੇਟ ਕੀਤਾ ਗਿਆ ਹੈ। ਇਹ ਫੀਚਰ ਨੂੰ ਮੈਕ ਕਲੋਨਿੰਗ ਜਾਂ ਸਪੂਫਿੰਗ (spoofing)" +-" ਕਹਿੰਦੇ ਹਨ। " ++"ਇੱਥੇ ਦਿੱਤਾ ਮੈਕ (MAC) ਐਡਰੈੱਸ ਨੈੱਟਵਰਕ ਡਿਵਾਈਸ ਲਈ ਹਾਰਡਵੇਅਰ ਐਡਰੈੱਸ ਵਜੋਂ ਵਰਤਿਆ ਜਾਵੇਗਾ, ਜਿਸ ਲਈ ਇਸ " ++"ਕਨੈਕਸ਼ਨ ਐਕਟੀਵੇਟ ਕੀਤਾ ਗਿਆ ਹੈ। ਇਹ ਫੀਚਰ ਨੂੰ ਮੈਕ ਕਲੋਨਿੰਗ ਜਾਂ ਸਪੂਫਿੰਗ (spoofing) ਕਹਿੰਦੇ ਹਨ। " + "ਜਿਵੇਂ: 00:11:22:33:44:55" + + #: panels/network/connection-editor/ce-page.c:399 +@@ -3498,8 +3547,7 @@ msgstr "ਕੰਟਰੋਲ ਕਰੋ ਕਿ ਇੰਟਰਨੈੱਟ ਨਾਲ + #. 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;IP;LAN;Proxy;WAN;Broadband;Modem;Bluetooth;vpn;DNS;" +-msgstr "" +-"ਨੈੱਟਵਰਕ;ਆਈਪੀ;ਬਰਾਡਬੈਂਡ;ਮਾਡਮ;ਬਲੂਟੁੱਥ;ਬਲੂਟੁੱਥ;ਵੀਪੀਐਨ;ਪਰਾਕਸੀ;ਵੈਨ;ਮੌਡਮ;ਡੀਐਨਐਸ;" ++msgstr "ਨੈੱਟਵਰਕ;ਆਈਪੀ;ਬਰਾਡਬੈਂਡ;ਮਾਡਮ;ਬਲੂਟੁੱਥ;ਬਲੂਟੁੱਥ;ਵੀਪੀਐਨ;ਪਰਾਕਸੀ;ਵੈਨ;ਮੌਡਮ;ਡੀਐਨਐਸ;" + + #: panels/network/gnome-wifi-panel.desktop.in.in:4 + msgid "Control how you connect to Wi-Fi networks" +@@ -3545,8 +3593,7 @@ msgid "" + "Network details for the selected networks, including passwords and any " + "custom configuration will be lost." + msgstr "" +-"ਚੁਣੇ ਗਏ ਨੈੱਟਵਰਕਾਂ ਲਈ ਨੈੱਟਵਰਕ ਵੇਰਵਾ, ਜਿਸ ਵਿੱਚ ਪਾਸਵਰਡ ਅਤੇ ਹੋਰ ਪਸੰਦੀਦਾ ਸੰਰਚਨਾ" +-" ਦਿੱਤੀ ਸੀ, ਖਤਮ ਹੋ " ++"ਚੁਣੇ ਗਏ ਨੈੱਟਵਰਕਾਂ ਲਈ ਨੈੱਟਵਰਕ ਵੇਰਵਾ, ਜਿਸ ਵਿੱਚ ਪਾਸਵਰਡ ਅਤੇ ਹੋਰ ਪਸੰਦੀਦਾ ਸੰਰਚਨਾ ਦਿੱਤੀ ਸੀ, ਖਤਮ ਹੋ " + "ਜਾਵੇਗਾ।" + + #: panels/network/net-device-wifi.c:855 +@@ -3594,8 +3641,7 @@ msgstr "ਬੰਦ" + #: panels/network/net-proxy.c:112 + msgid "" + "Web Proxy Autodiscovery is used when a Configuration URL is not provided." +-msgstr "" +-"ਵੈੱਬ ਪਰਾਕਸੀ ਆਪੇ-ਆਪ ਖੋਜ ਵਰਤੀ ਜਾਂਦੀ ਹੈ, ਜਦੋਂ ਸੰਰਚਨਾ URL ਨਾ ਦਿੱਤਾ ਗਿਆ ਹੋਵੇ।" ++msgstr "ਵੈੱਬ ਪਰਾਕਸੀ ਆਪੇ-ਆਪ ਖੋਜ ਵਰਤੀ ਜਾਂਦੀ ਹੈ, ਜਦੋਂ ਸੰਰਚਨਾ URL ਨਾ ਦਿੱਤਾ ਗਿਆ ਹੋਵੇ।" + + #. TRANSLATORS: WPAD is bad: if you enable it on an untrusted + #. * network, then anyone else on that network can tell your +@@ -4166,8 +4212,7 @@ msgid "" + "\n" + "(You can password-protect your private key with openssl)" + msgstr "" +-"ਚੁਣੀ ਗਈ ਪ੍ਰਾਈਵੇਟ ਕੁੰਜੀ ਪਾਸਵਰਡ ਨਾਲ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਜਾਪਦੀ ਹੈ। ਇਹ ਤੁਹਾਡੀ ਸੁਰੱਖਿਅਤ" +-" ਸਨਦ ਨੂੰ ਖਤਰਾ " ++"ਚੁਣੀ ਗਈ ਪ੍ਰਾਈਵੇਟ ਕੁੰਜੀ ਪਾਸਵਰਡ ਨਾਲ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਜਾਪਦੀ ਹੈ। ਇਹ ਤੁਹਾਡੀ ਸੁਰੱਖਿਅਤ ਸਨਦ ਨੂੰ ਖਤਰਾ " + "ਪੈਦਾ ਕਰ ਸਕਦੀ ਹੈ। ਪਾਸਵਰਡ ਨਾਲ ਸੁਰੱਖਿਅਤ ਪ੍ਰਾਈਵੇਟ ਕੁੰਜੀ ਚੁਣੋ ਜੀ।\n" + "\n" + "(ਤੁਸੀਂ openssl ਨਾਲ ਪ੍ਰਾਈਵੇਟ ਕੁੰਜੀ ਪਾਸਵਰਡ ਸੁਰੱਖਿਅਤ ਕਰ ਸਕਦੇ ਹੋ)" +@@ -4301,8 +4346,7 @@ msgid "" + "invalid wep-key: wrong key length %zu. A key must be either of length 5/13 " + "(ascii) or 10/26 (hex)" + msgstr "" +-"ਅਵੈਧ wep-key: ਗ਼ਲਤ %zu ਕੁੰਜੀ ਲੰਬਾਈ। ਕੁੰਜੀ ਦੀ ਲੰਬਾਈ ਜਾਂ ਤਾਂ 5/13 (ascii) ਜਾਂ" +-" 10/26 " ++"ਅਵੈਧ wep-key: ਗ਼ਲਤ %zu ਕੁੰਜੀ ਲੰਬਾਈ। ਕੁੰਜੀ ਦੀ ਲੰਬਾਈ ਜਾਂ ਤਾਂ 5/13 (ascii) ਜਾਂ 10/26 " + "(ਹੈਕਸਾ) ਹੋ ਸਕਦੇ ਹਨ" + + #: panels/network/wireless-security/ws-wep-key.c:144 +@@ -4343,8 +4387,7 @@ msgid "" + "invalid wpa-psk: invalid key-length %zu. Must be [8,63] bytes or 64 hex " + "digits" + msgstr "" +-"ਅਵੈਧ wpa-psk: ਕੁੰਜੀ-ਲੰਬਾਈ %zu ਅਵੈਧ ਹੈ। ਜਾਂ ਤਾਂ [8,63] ਬਾਈਟ ਜਾਂ 64 ਹੈਕਸਾ-ਅੰਕ" +-" ਹੋਣੀ ਚਾਹੀਦੀ " ++"ਅਵੈਧ wpa-psk: ਕੁੰਜੀ-ਲੰਬਾਈ %zu ਅਵੈਧ ਹੈ। ਜਾਂ ਤਾਂ [8,63] ਬਾਈਟ ਜਾਂ 64 ਹੈਕਸਾ-ਅੰਕ ਹੋਣੀ ਚਾਹੀਦੀ " + "ਹੈ।" + + #: panels/network/wireless-security/ws-wpa-psk.c:86 +@@ -4373,8 +4416,7 @@ msgid "" + "Notifications will continue to appear in the notification list when popups " + "are disabled." + msgstr "" +-"ਜਦੋਂ ਪੋਪਅੱਪ ਅਸਮਰੱਥ ਕੀਤੇ ਜਾਂਦੇ ਹਨ ਤਾਂ ਨੋਟੀਫਿਕੇਸ਼ਨ ਸੂਚੀ ਵਿੱਚ ਨੋਟੀਫਿਕੇਸ਼ਨ ਦਿਖਾਈ" +-" ਦੇਣਾ ਜਾਰੀ ਰੱਖਣਗੇ।" ++"ਜਦੋਂ ਪੋਪਅੱਪ ਅਸਮਰੱਥ ਕੀਤੇ ਜਾਂਦੇ ਹਨ ਤਾਂ ਨੋਟੀਫਿਕੇਸ਼ਨ ਸੂਚੀ ਵਿੱਚ ਨੋਟੀਫਿਕੇਸ਼ਨ ਦਿਖਾਈ ਦੇਣਾ ਜਾਰੀ ਰੱਖਣਗੇ।" + + #. Popups here refers to message tray notifications in the middle of the screen. + #: panels/notifications/cc-app-notifications-dialog.ui:249 +@@ -4449,8 +4491,7 @@ msgstr "ਆਨਲਾਈਨ ਖਾਤੇ" + + #: panels/online-accounts/gnome-online-accounts-panel.desktop.in.in:4 + msgid "Connect to your online accounts and decide what to use them for" +-msgstr "" +-"ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ" ++msgstr "ਆਪਣੇ ਆਨਲਾਈਨ ਖਾਤਿਆਂ ਨਾਲ ਕਨੈਕਟ ਹੋਵੋ ਅਤੇ ਫੈਸਲਾ ਕਰੋ ਕਿ ਉਹਨਾਂ ਨੂੰ ਕਿਸ ਲਈ ਵਰਤਣਾ ਹੈ" + + #. Translators: Search terms to find the Online Accounts panel. + #. Do NOT translate or localize the semicolons! +@@ -4461,8 +4502,7 @@ msgid "" + "Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;" + "Kerberos;IMAP;SMTP;Pocket;ReadItLater;" + msgstr "" +-"ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebo" +-"ok;Twitter;" ++"ਗੂਗਲ;ਫੇਸਬੁੱਕ;ਟਵਿੱਟਰ;ਯਾਹੂ;ਵੈੱਬ;ਆਨਲਾਈਨ;ਗੱਲਬਾਤ;ਚੈਟ;ਕੈਲੰਡਰ;ਮੇਲ;ਸੰਪਰਕ;Google;Facebook;Twitter;" + "Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;Kerberos;IMAP;SMTP;" + "Packet;ReaditLater;" + +@@ -4780,8 +4820,7 @@ msgstr "ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ(_M)" + + #: panels/power/cc-power-panel.ui:621 + msgid "Mobile broadband (LTE, 4G, 3G, etc.) can be turned off to save power." +-msgstr "" +-"ਊਰਜਾ ਬਚਾਉਣ ਲਈ ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ (LTE, 4G, 3G, ਆਦਿ) ਨੂੰ ਬੰਦ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।" ++msgstr "ਊਰਜਾ ਬਚਾਉਣ ਲਈ ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ (LTE, 4G, 3G, ਆਦਿ) ਨੂੰ ਬੰਦ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।" + + #: panels/power/cc-power-panel.ui:671 + msgid "_Bluetooth" +@@ -4874,8 +4913,8 @@ msgid "" + "Power;Sleep;Suspend;Hibernate;Battery;Brightness;Dim;Blank;Monitor;DPMS;Idle;" + "Energy;" + msgstr "" +-"ਸਕਰੀਨ;ਚਮਕ;ਵੇਹਲਾ;ਪਾਵਰ;ਸਲੀਪ;ਸਸਪੈਂਡ;ਹਾਈਬਰਨੇਟ;ਬੈਟਰੀ;ਵੇਹਲ;ਡਿਮ;ਖਾਲੀ;ਮਾਨੀਟਰ;ਡੀਪੀਐਮਐਸ;" +-"ਮੁਅੱਤਲ;ਊਰਜਾ;" ++"ਸਕਰੀਨ;ਚਮਕ;ਵੇਹਲਾ;ਪਾਵਰ;ਸਲੀਪ;ਸਸਪੈਂਡ;ਹਾਈਬਰਨੇਟ;ਬੈਟਰੀ;ਵੇਹਲ;ਡਿਮ;ਖਾਲੀ;ਮਾਨੀਟਰ;ਡੀਪੀਐਮਐਸ;ਮੁਅੱਤਲ;" ++"ਊਰਜਾ;" + + #: panels/printers/authentication-dialog.ui:11 + msgid " " +@@ -4920,8 +4959,7 @@ msgstr "ਪਰਿੰਟਰ" + + #: panels/printers/gnome-printers-panel.desktop.in.in:4 + msgid "Add printers, view printer jobs and decide how you want to print" +-msgstr "" +-"ਪਰਿੰਟਰ ਜੋੜੋ, ਪਰਿੰਟਰ ਜਾਬ ਵੇਖੋ ਅਤੇ ਤਹਿ ਕਰੋ ਤੁਸੀਂ ਕਿਵੇਂ ਪਰਿੰਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੈ" ++msgstr "ਪਰਿੰਟਰ ਜੋੜੋ, ਪਰਿੰਟਰ ਜਾਬ ਵੇਖੋ ਅਤੇ ਤਹਿ ਕਰੋ ਤੁਸੀਂ ਕਿਵੇਂ ਪਰਿੰਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੈ" + + #. 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 +@@ -4954,8 +4992,7 @@ msgstr "ਨੈਟਵਰਕ ਐਡਰੈਸ ਦਿਓ ਜਾਂ ਪਰਿੰਟ + + #: panels/printers/new-printer-dialog.ui:356 + msgid "Enter username and password to view printers on Print Server." +-msgstr "" +-"ਪਰਿੰਟਰ ਸਰਵਰ ਉੱਤੇ ਪਰਿੰਟਰਾਂ ਨੂੰ ਵੇਖਣ ਲਈ ਆਪਣਾ ਵਰਤੋਂਕਾਰ-ਨਾਂ ਅਤੇ ਪਾਸਵਰਡ ਦਿਉ।" ++msgstr "ਪਰਿੰਟਰ ਸਰਵਰ ਉੱਤੇ ਪਰਿੰਟਰਾਂ ਨੂੰ ਵੇਖਣ ਲਈ ਆਪਣਾ ਵਰਤੋਂਕਾਰ-ਨਾਂ ਅਤੇ ਪਾਸਵਰਡ ਦਿਉ।" + + #. Translators: This is the title of the dialog. %s is the printer name. + #: panels/printers/pp-details-dialog.c:74 +@@ -5547,9 +5584,7 @@ msgstr "ਫਾਰਮੈਟ" + msgid "" + "Choose the format for numbers, dates and currencies. Changes take effect on " + "next login." +-msgstr "" +-"ਅੰਕਾਂ, ਤਾਰੀਖਾਂ ਤੇ ਕਰੰਸੀਆਂ ਲਈ ਫਾਰਮੈਟ ਚੁਣੋ। ਤਬਦੀਲੀਆਂ ਅਗਲੇ ਲਾਗਇਨ ਉੱਤੇ ਲਾਗੂ" +-" ਹੁੰਦੀਆਂ ਹਨ।" ++msgstr "ਅੰਕਾਂ, ਤਾਰੀਖਾਂ ਤੇ ਕਰੰਸੀਆਂ ਲਈ ਫਾਰਮੈਟ ਚੁਣੋ। ਤਬਦੀਲੀਆਂ ਅਗਲੇ ਲਾਗਇਨ ਉੱਤੇ ਲਾਗੂ ਹੁੰਦੀਆਂ ਹਨ।" + + #: panels/region/cc-format-chooser.ui:117 + msgid "Search locales..." +@@ -5643,9 +5678,7 @@ msgstr "ਫਾਰਮੈਟ(_F)" + + #: panels/region/cc-region-panel.ui:231 + msgid "Login settings are used by all users when logging into the system" +-msgstr "" +-"ਲਾਗਇਨ ਸੈਟਿੰਗਾਂ ਨੂੰ ਸਭ ਵਰਤੋਂਕਾਰਾਂ ਵਲੋਂ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ, ਜਦੋਂ ਸਿਸਟਮ ਵਿੱਚ ਲਾਗਇਨ" +-" ਕਰਦੇ ਹਨ" ++msgstr "ਲਾਗਇਨ ਸੈਟਿੰਗਾਂ ਨੂੰ ਸਭ ਵਰਤੋਂਕਾਰਾਂ ਵਲੋਂ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ, ਜਦੋਂ ਸਿਸਟਮ ਵਿੱਚ ਲਾਗਇਨ ਕਰਦੇ ਹਨ" + + #: panels/region/gnome-region-panel.desktop.in.in:3 + msgid "Region & Language" +@@ -5804,8 +5837,7 @@ msgid "" + "device;system;default;application;preferred;cd;dvd;usb;audio;video;disc;" + "removable;media;autorun;" + msgstr "" +-"ਡਿਵਾਈਸ;ਡੀਵਾਈਸ;ਯੰਤਰ;ਜੰਤਰ;ਡਿਫਾਲਟ;ਮੂਲ;ਐਪਲੀਕੇਸ਼ਨ;ਤਰਜੀਹੀ;ਪਸੰਦ;ਸੀਡੀ;ਡੀਵੀਡੀ;ਆਡੀਓ;ਯੂਐਸ" +-"ਬੀ;" ++"ਡਿਵਾਈਸ;ਡੀਵਾਈਸ;ਯੰਤਰ;ਜੰਤਰ;ਡਿਫਾਲਟ;ਮੂਲ;ਐਪਲੀਕੇਸ਼ਨ;ਤਰਜੀਹੀ;ਪਸੰਦ;ਸੀਡੀ;ਡੀਵੀਡੀ;ਆਡੀਓ;ਯੂਐਸਬੀ;" + "ਵੀਡੀਓ;ਹਟਾਉਣਯੋਗ;ਵਿਡੀਓ;ਮੀਡੀਆ;ਆਟੋ-ਰਨ;" + + #: panels/search/cc-search-locations-dialog.c:636 +@@ -5827,9 +5859,7 @@ msgstr "ਟਿਕਾਣਾ ਖੋਜ" + msgid "" + "Folders which are searched by system applications, such as Files, Photos and " + "Videos." +-msgstr "" +-"ਫੋਲਡਰ, ਜਿਹਨਾਂ ਨੂੰ ਸਿਸਟਮ ਐਪਲੀਕੇਸ਼ਨਾਂ, ਜਿਵੇਂ ਫਾਇਲਾਂ, ਫੋਟੋ ਅਤੇ ਵਿਡੀਓ ਵਲੋਂ ਖੋਜਿਆ" +-" ਜਾਂਦਾ ਹੈ।" ++msgstr "ਫੋਲਡਰ, ਜਿਹਨਾਂ ਨੂੰ ਸਿਸਟਮ ਐਪਲੀਕੇਸ਼ਨਾਂ, ਜਿਵੇਂ ਫਾਇਲਾਂ, ਫੋਟੋ ਅਤੇ ਵਿਡੀਓ ਵਲੋਂ ਖੋਜਿਆ ਜਾਂਦਾ ਹੈ।" + + #: panels/search/cc-search-locations-dialog.ui:52 + msgid "Places" +@@ -5860,8 +5890,7 @@ msgid "" + "Control which search results are shown in the Activities Overview. The order " + "of search results can also be changed by moving rows in the list." + msgstr "" +-"ਕੰਟਰੋਲ ਕਰੋ ਕਿ ਕਿਹੜੇ ਖੋਜ ਨਤੀਜਿਆ ਨੂੰ ਸਰਗਰਮੀ ਸਾਰ ਵਿੱਚ ਵਿਖਾਇਆ ਜਾਂਦਾ ਹੈ। ਖੋਜ" +-" ਨਤੀਜਿਆਂ ਦੀ ਲੜੀ ਨੂੰ " ++"ਕੰਟਰੋਲ ਕਰੋ ਕਿ ਕਿਹੜੇ ਖੋਜ ਨਤੀਜਿਆ ਨੂੰ ਸਰਗਰਮੀ ਸਾਰ ਵਿੱਚ ਵਿਖਾਇਆ ਜਾਂਦਾ ਹੈ। ਖੋਜ ਨਤੀਜਿਆਂ ਦੀ ਲੜੀ ਨੂੰ " + "ਸੂਚੀ ਵਿੱਚ ਕਤਾਰਾਂ ਰਾਹੀਂ ਹਿਲਾ ਕੇ ਵੀ ਬਦਲਿਆ ਜਾ ਸਕਦਾ ਹੈ।" + + #: panels/search/gnome-search-panel.desktop.in.in:4 +@@ -5873,8 +5902,7 @@ msgstr "ਕੰਟਰੋਲ ਕਰੋ ਕਿਹੜੀਆਂ ਐਪਲੀਕੇਸ਼ + #: panels/search/gnome-search-panel.desktop.in.in:19 + msgid "Search;Find;Index;Hide;Privacy;Results;" + msgstr "" +-"ਖੋਜ;ਲੱਭੋ;ਲੱਭਣਾ;ਇੰਡੈਕਸ;ਤਤਕਰਾ;ਪਰਾਈਵੇਸੀ;ਨਤੀਜੇ;Search;Find;Index;Hide;Privacy;Resu" +-"lts;" ++"ਖੋਜ;ਲੱਭੋ;ਲੱਭਣਾ;ਇੰਡੈਕਸ;ਤਤਕਰਾ;ਪਰਾਈਵੇਸੀ;ਨਤੀਜੇ;Search;Find;Index;Hide;Privacy;Results;" + + #. Label + #: panels/sharing/cc-sharing-networks.c:306 +@@ -5916,8 +5944,7 @@ msgid "" + "File Sharing allows you to share your Public folder with others on your " + "current network using: %s" + msgstr "" +-"ਫਾਇਲ ਸਾਂਝ ਤੁਹਾਨੂੰ ਤੁਹਾਡੇ ਪਬਲਿਕ ਫੋਲਡਰ ਨੂੰ ਹੋਰਾਂ ਨਾਲ ਤੁਹਾਡੇ ਮੌਜੂਦਾ ਨੈੱਟਵਰਕ ਉੱਤੇ" +-" ਦੀ ਵਰਤੋਂ ਨਾਲ ਸਾਂਝਾ " ++"ਫਾਇਲ ਸਾਂਝ ਤੁਹਾਨੂੰ ਤੁਹਾਡੇ ਪਬਲਿਕ ਫੋਲਡਰ ਨੂੰ ਹੋਰਾਂ ਨਾਲ ਤੁਹਾਡੇ ਮੌਜੂਦਾ ਨੈੱਟਵਰਕ ਉੱਤੇ ਦੀ ਵਰਤੋਂ ਨਾਲ ਸਾਂਝਾ " + "ਕਰਨ ਲਈ ਸਹਾਇਕ ਹੈ: %s" + + #. TRANSLATORS: %s is replaced with a link to a "ssh " command to run +@@ -5928,8 +5955,7 @@ msgid "" + "Shell command:\n" + "%s" + msgstr "" +-"ਜਦੋਂ ਰਿਮੋਟ ਲਾਗਇਨ ਸਮਰੱਥ ਹੁੰਦਾ ਹੈ ਤਾਂ ਰਿਮੋਟ ਵਰਤੋਂਕਾਰ ਨੂੰ ਸੁਰੱਖਿਅਤ ਸ਼ੈੱਲ ਕਮਾਂਡ" +-" ਰਾਹੀਂ ਕਨੈਕਟ ਹੋ ਸਕਦਾ " ++"ਜਦੋਂ ਰਿਮੋਟ ਲਾਗਇਨ ਸਮਰੱਥ ਹੁੰਦਾ ਹੈ ਤਾਂ ਰਿਮੋਟ ਵਰਤੋਂਕਾਰ ਨੂੰ ਸੁਰੱਖਿਅਤ ਸ਼ੈੱਲ ਕਮਾਂਡ ਰਾਹੀਂ ਕਨੈਕਟ ਹੋ ਸਕਦਾ " + "ਹੈ:\n" + "%s" + +@@ -5940,8 +5966,7 @@ msgid "" + "Screen sharing allows remote users to view or control your screen by " + "connecting to %s" + msgstr "" +-"ਸਕਰੀਨ ਸਾਂਝਾ ਕਰਨ ਨਾਲ ਰਿਮੋਟ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਆਪਣੀ ਸਕਰੀਨ ਵੇਖਣ ਜਾਂ ਕੰਟਰੋਲ ਦਿੱਤਾ" +-" ਜਾਂਦਾ ਹੈ, %s ਨਾਲ " ++"ਸਕਰੀਨ ਸਾਂਝਾ ਕਰਨ ਨਾਲ ਰਿਮੋਟ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਆਪਣੀ ਸਕਰੀਨ ਵੇਖਣ ਜਾਂ ਕੰਟਰੋਲ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ, %s ਨਾਲ " + "ਕਨੈਕਟ ਕਰਕੇ" + + #: panels/sharing/cc-sharing-panel.c:813 +@@ -6043,8 +6068,7 @@ msgid "" + "share;sharing;ssh;host;name;remote;desktop;media;audio;video;pictures;photos;" + "movies;server;renderer;" + msgstr "" +-"ਸਾਂਝਾ;ਸਾਂਝਾ ਕਰੋ;ਨਾਂ;ਨਾਮ;ਡੈਸਕਟਾਪ;ਮੀਡੀਆ;ਆਡੀਓ;ਵੀਡੀਓ;ਹੋਸਟ;ssh;ਰਿਮੋਟ;ਤਸਵੀਰ;ਫੋਟੋ;ਮੂਵ" +-"ੀ;ਸਰਵਰ;" ++"ਸਾਂਝਾ;ਸਾਂਝਾ ਕਰੋ;ਨਾਂ;ਨਾਮ;ਡੈਸਕਟਾਪ;ਮੀਡੀਆ;ਆਡੀਓ;ਵੀਡੀਓ;ਹੋਸਟ;ssh;ਰਿਮੋਟ;ਤਸਵੀਰ;ਫੋਟੋ;ਮੂਵੀ;ਸਰਵਰ;" + "ਰੈਂਡਰ;" + + #: panels/sharing/org.gnome.controlcenter.remote-login-helper.policy.in.in:11 +@@ -6161,9 +6185,7 @@ msgstr "ਸਾਊਂਡ ਲੈਵਲ, ਇੰਪੁੱਟ, ਆਉਟਪੁੱਟ + #: panels/sound/gnome-sound-panel.desktop.in.in:20 + msgid "" + "Card;Microphone;Volume;Fade;Balance;Bluetooth;Headset;Audio;Output;Input;" +-msgstr "" +-"ਕਾਰਡ;ਮਾਈਕਰੋਫੋਨ;ਵਾਲੀਅਮ;ਫੇਡ;ਬੈਲਨਸ;ਬਲਿਊਟੁੱਲ;ਹੈੱਡਸੈੱਟ;ਆਡੀਓ;ਆਉਟਪੁੱਟ;ਇੰਪੁੱਟ;ਇਨਪੁੱਟ;ਬ" +-"ਲੁਟੁੱਥ;" ++msgstr "ਕਾਰਡ;ਮਾਈਕਰੋਫੋਨ;ਵਾਲੀਅਮ;ਫੇਡ;ਬੈਲਨਸ;ਬਲਿਊਟੁੱਲ;ਹੈੱਡਸੈੱਟ;ਆਡੀਓ;ਆਉਟਪੁੱਟ;ਇੰਪੁੱਟ;ਇਨਪੁੱਟ;ਬਲੁਟੁੱਥ;" + + #: panels/thunderbolt/cc-bolt-device-dialog.c:94 + #: panels/thunderbolt/cc-bolt-device-entry.c:125 +@@ -6276,8 +6298,7 @@ msgstr "ਪਰਮਾਣਿਤ ਹੈ" + msgid "" + "The Thunderbolt subsystem (boltd) is not installed or not set up properly." + msgstr "" +-"ਥੰਡਰਬੋਲਟ ਸਬ-ਸਿਸਟਮ (boldtd) ਠੀਕ ਤਰ੍ਹਾਂ ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ ਜਾਂ ਠੀਕ ਤਰ੍ਹਾਂ ਸੈਟ ਅੱਪ" +-" ਨਹੀਂ ਕੀਤਾ ਹੈ।" ++"ਥੰਡਰਬੋਲਟ ਸਬ-ਸਿਸਟਮ (boldtd) ਠੀਕ ਤਰ੍ਹਾਂ ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ ਜਾਂ ਠੀਕ ਤਰ੍ਹਾਂ ਸੈਟ ਅੱਪ ਨਹੀਂ ਕੀਤਾ ਹੈ।" + + #: panels/thunderbolt/cc-bolt-panel.c:468 + msgid "" +@@ -6286,8 +6307,7 @@ msgid "" + "BIOS or is set to an unsupported security level in the BIOS." + msgstr "" + "ਥੰਡਰਬੋਲਟ ਖੋਜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ।\n" +-"ਜਾਂ ਤਾਂ ਸਿਸਟਮ ਥੰਡਰਬੋਲਢ ਲਈ ਸਹਾਇਕ ਨਹੀ ਹੈ, ਇਹ BIOS ਵਿੱਚੋਂ ਅਸਮਰੱਥ ਕੀਤਾ ਹੋ ਸਕਦਾ ਹੈ" +-" ਜਾਂ BIOS " ++"ਜਾਂ ਤਾਂ ਸਿਸਟਮ ਥੰਡਰਬੋਲਢ ਲਈ ਸਹਾਇਕ ਨਹੀ ਹੈ, ਇਹ BIOS ਵਿੱਚੋਂ ਅਸਮਰੱਥ ਕੀਤਾ ਹੋ ਸਕਦਾ ਹੈ ਜਾਂ BIOS " + "ਵਿੱਚ ਗ਼ੈਰ-ਸਹਾਇਕ ਸੁਰੱਖਿਆ ਪੱਧਰ ਲਈ ਸੈੱਟ ਕੀਤਾ ਹੋ ਸਕਦਾ ਹੈ।" + + #: panels/thunderbolt/cc-bolt-panel.c:512 +@@ -6887,10 +6907,8 @@ msgid "" + "Bounce;Mouse;Double;click;Delay;Speed;Assist;Repeat;Blink;visual;hearing;" + "audio;typing;" + msgstr "" +-"ਕੀਬੋਰਡ;,ਮਾਊਸ;ਫੋਂਟ;ਟੈਕਸਟ;ਆਕਾਰ;ਕਰਸਰ;ਆਵਾਜ਼;ਸਾਊਂਡ;ਬਾਊਂਸ;ਕੀ-ਬੋਰਡ;ਸਵਿੱਚਾਂ,ਕੀ;ਅਸੈਸਬਲਿਟ" +-"ੀ;ਜ਼ੂਮ;ਡਬਲ " +-"ਕਲਿੱਕ;ਦੋਹਰਾ ਕਲਿੱਕ;ਦੇਰੀ;ਸਹਾਇਕ;ਰੀਡਰ;ਐਕਟਿਵਐਕਸ;ਹੌਲੀ;ਕਨਟਰਾਸਟ;ਦੁਹਰਾਉਣਾ;ਝਪਕਣਾ;ਦੁਹਰਾ;ਵ" +-"ੱਡੇ;ਵੱਡਾ;" ++"ਕੀਬੋਰਡ;,ਮਾਊਸ;ਫੋਂਟ;ਟੈਕਸਟ;ਆਕਾਰ;ਕਰਸਰ;ਆਵਾਜ਼;ਸਾਊਂਡ;ਬਾਊਂਸ;ਕੀ-ਬੋਰਡ;ਸਵਿੱਚਾਂ,ਕੀ;ਅਸੈਸਬਲਿਟੀ;ਜ਼ੂਮ;ਡਬਲ " ++"ਕਲਿੱਕ;ਦੋਹਰਾ ਕਲਿੱਕ;ਦੇਰੀ;ਸਹਾਇਕ;ਰੀਡਰ;ਐਕਟਿਵਐਕਸ;ਹੌਲੀ;ਕਨਟਰਾਸਟ;ਦੁਹਰਾਉਣਾ;ਝਪਕਣਾ;ਦੁਹਰਾ;ਵੱਡੇ;ਵੱਡਾ;" + "ਉੱਚ;ਹੋਰ ਵੱਡਾ;ਸਪੀਡ;ਗਤੀ;ਦਿੱਖ;ਸੁਣਨਾ;ਆਡੀਓ;ਲਿਖਣਾ;ਟਾਈਪ ਕਰਨਾ;ਟਾਈਪਿੰਗ;ਵਿਆਪਕ ਪਹੁੰਚ;" + + #: panels/usage/cc-usage-panel.c:154 +@@ -6927,10 +6945,8 @@ msgid "" + "shared between applications, and makes it easier to find files that you " + "might want to use." + msgstr "" +-"ਫਾਇਲ ਅਤੀਤ ਫਾਇਲਾਂ ਦੇ ਰਿਕਾਰਡ ਰੱਖਦਾ ਹੈ, ਜੋ ਤੁਸੀਂ ਵਰਤੇ ਚੁੱਕੇ ਹੋ। ਇਹ ਜਾਣਕਾਰੀ ਨੂੰ" +-" ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿਚਾਲੇ " +-"ਸਾਂਝਾ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਤੁਹਾਡੇ ਲਈ ਫਾਇਲਾਂ ਲੱਭਣੀਆਂ ਸੌਖੀਆਂ ਹੋ ਜਾਂਦੀਆਂ ਹਨ," +-" ਜਦੋਂ ਵਰਤੀਆਂ ਹੋਣ।" ++"ਫਾਇਲ ਅਤੀਤ ਫਾਇਲਾਂ ਦੇ ਰਿਕਾਰਡ ਰੱਖਦਾ ਹੈ, ਜੋ ਤੁਸੀਂ ਵਰਤੇ ਚੁੱਕੇ ਹੋ। ਇਹ ਜਾਣਕਾਰੀ ਨੂੰ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿਚਾਲੇ " ++"ਸਾਂਝਾ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਤੁਹਾਡੇ ਲਈ ਫਾਇਲਾਂ ਲੱਭਣੀਆਂ ਸੌਖੀਆਂ ਹੋ ਜਾਂਦੀਆਂ ਹਨ, ਜਦੋਂ ਵਰਤੀਆਂ ਹੋਣ।" + + #: panels/usage/cc-usage-panel.ui:56 + msgid "File H_istory" +@@ -6953,8 +6969,7 @@ msgid "" + "Trash and temporary files can sometimes include personal or sensitive " + "information. Automatically deleting them can help to protect privacy." + msgstr "" +-"ਰੱਦੀ ਅਤੇ ਆਰਜ਼ੀ ਫਾਇਲਾਂ ਕਈ ਵਾਰ ਨਿੱਜੀ ਅਤੇ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਣਕਾਰੀ ਰੱਖ ਸਕਦੀਆਂ ਹਨ। ਉਹਨਾਂ" +-" ਨੂੰ ਆਪਣੇ-ਆਪ " ++"ਰੱਦੀ ਅਤੇ ਆਰਜ਼ੀ ਫਾਇਲਾਂ ਕਈ ਵਾਰ ਨਿੱਜੀ ਅਤੇ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਣਕਾਰੀ ਰੱਖ ਸਕਦੀਆਂ ਹਨ। ਉਹਨਾਂ ਨੂੰ ਆਪਣੇ-ਆਪ " + "ਹਟਾਉਣ ਨਾਲ ਪਰਦੇਦਾਰੀ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰਨ ਲਈ ਮਦਦ ਮਿਲ ਸਕਦੀ ਹੈ।" + + #: panels/usage/cc-usage-panel.ui:159 +@@ -7161,8 +7176,7 @@ msgid "" + "used on this device. You can also use this account to access company " + "resources on the internet." + msgstr "" +-"ਇੰਟਰਪਰਾਈਜ਼ ਲਾਗਇਨ ਮੌਜੂਦਾ ਕੇਂਦਰੀਕ੍ਰਿਤ ਵਰਤੋਂਕਾਰ ਅਕਾਊਂਟ ਨੂੰ ਇਹ ਜੰਤਰ ਉੱਤੇ ਵਰਤਣ ਲਈ" +-" ਸਹਾਇਕ ਹੈ। ਤੁਸੀਂ " ++"ਇੰਟਰਪਰਾਈਜ਼ ਲਾਗਇਨ ਮੌਜੂਦਾ ਕੇਂਦਰੀਕ੍ਰਿਤ ਵਰਤੋਂਕਾਰ ਅਕਾਊਂਟ ਨੂੰ ਇਹ ਜੰਤਰ ਉੱਤੇ ਵਰਤਣ ਲਈ ਸਹਾਇਕ ਹੈ। ਤੁਸੀਂ " + "ਇਸ ਅਕਾਊਂਟ ਨੂੰ ਇੰਟਰਨੈੱਟ ਉੱਤੇ ਕੰਪਨੀ ਦੇ ਸਰੋਤਾਂ ਤੱਕ ਪਹੁੰਚ ਲਈ ਵੀ ਵਰਤ ਸਕਦੇ ਹੋ।" + + #: panels/user-accounts/cc-add-user-dialog.ui:732 +@@ -7213,8 +7227,7 @@ msgid "" + "Do you want to delete your registered fingerprints so fingerprint login is " + "disabled?" + msgstr "" +-"ਕੀ ਤੁਸੀਂ ਆਪਣੇ ਰਜਿਸਟਰ ਕੀਤੇ ਫਿੰਗਰਪਰਿੰਟ ਹਟਾਉਣੇ ਚਾਹੁੰਦੇ ਹੋ ਤਾਂ ਕਿ ਫਿੰਗਰਪਰਿੰਟ" +-" ਲਾਗਇਨ ਨੂੰ ਆਯੋਗ ਕੀਤਾ " ++"ਕੀ ਤੁਸੀਂ ਆਪਣੇ ਰਜਿਸਟਰ ਕੀਤੇ ਫਿੰਗਰਪਰਿੰਟ ਹਟਾਉਣੇ ਚਾਹੁੰਦੇ ਹੋ ਤਾਂ ਕਿ ਫਿੰਗਰਪਰਿੰਟ ਲਾਗਇਨ ਨੂੰ ਆਯੋਗ ਕੀਤਾ " + "ਜਾ ਸਕੇ?" + + #. Translators: This is the empty state page label which states that there are no devices ready. +@@ -7247,9 +7260,8 @@ msgid "" + "Fingerprint login allows you to unlock and log into your computer with your " + "finger" + msgstr "" +-"ਫਿੰਗਰਪਰਿੰਟ ਲਾਗਇਨ ਤੁਹਾਨੂੰ ਆਪਣੇ ਕੰਪਿਊਟਰ ਨੂੰ ਅਣ-ਲਾਕ ਕਰਨ ਤੇ ਲਾਗਇਨ ਕਰਨ ਲਈ ਤੁਹਾਡੀ" +-" ਉਂਗਲ " +-"ਵਰਤਣ ਲਈ ਸਹਾਇਕ ਹੈ" ++"ਫਿੰਗਰਪਰਿੰਟ ਲਾਗਇਨ ਤੁਹਾਨੂੰ ਆਪਣੇ ਕੰਪਿਊਟਰ ਨੂੰ ਅਣ-ਲਾਕ ਕਰਨ ਤੇ ਲਾਗਇਨ ਕਰਨ ਲਈ ਤੁਹਾਡੀ ਉਂਗਲ ਵਰਤਣ ਲਈ " ++"ਸਹਾਇਕ ਹੈ" + + #: panels/user-accounts/cc-fingerprint-dialog.ui:352 + msgid "_Delete Fingerprints" +@@ -7400,8 +7412,7 @@ msgstr "ਦਾਖਲਾ ਰੋਕਣ ਲਈ ਫੇਲ੍ਹ: %s" + msgid "" + "Repeatedly lift and place your finger on the reader to enroll your " + "fingerprint" +-msgstr "" +-"ਆਪਣੇ ਫਿੰਗਰਪਰਿੰਟ ਨੂੰ ਦਾਖਲ ਕਰਨ ਲਈ ਰੀਡਰ ਉੱਤੇ ਆਪਣੀ ਉਂਗਲ ਨੂੰ ਲਗਾਤਾਰ ਚੱਕੋ ਅਤੇ ਰੱਖੋ" ++msgstr "ਆਪਣੇ ਫਿੰਗਰਪਰਿੰਟ ਨੂੰ ਦਾਖਲ ਕਰਨ ਲਈ ਰੀਡਰ ਉੱਤੇ ਆਪਣੀ ਉਂਗਲ ਨੂੰ ਲਗਾਤਾਰ ਚੱਕੋ ਅਤੇ ਰੱਖੋ" + + #. TRANSLATORS: This is the label for the button to enroll a new finger + #: panels/user-accounts/cc-fingerprint-dialog.c:1118 +@@ -7589,8 +7600,7 @@ msgid "" + "Deleting a user while they are logged in can leave the system in an " + "inconsistent state." + msgstr "" +-"ਜਦੋਂ ਵਰਤੋਂਕਾਰ ਲਾਗਇਨ ਹੋਵੇ ਤਾਂ ਉਸ ਨੂੰ ਹਟਾਉਣ ਨਾਲ ਸਿਸਟਮ ਖਰਾਬ ਹੋਣ ਦੀ ਹਾਲਤ 'ਚ ਆ" +-" ਸਕਦਾ ਹੈ।" ++"ਜਦੋਂ ਵਰਤੋਂਕਾਰ ਲਾਗਇਨ ਹੋਵੇ ਤਾਂ ਉਸ ਨੂੰ ਹਟਾਉਣ ਨਾਲ ਸਿਸਟਮ ਖਰਾਬ ਹੋਣ ਦੀ ਹਾਲਤ 'ਚ ਆ ਸਕਦਾ ਹੈ।" + + #: panels/user-accounts/cc-user-panel.c:624 + #, c-format +@@ -7602,8 +7612,7 @@ msgid "" + "It is possible to keep the home directory, mail spool and temporary files " + "around when deleting a user account." + msgstr "" +-"ਘਰ ਡਾਇਰੈਕਟਰੀ, ਮੇਲ ਸਪੂਲ ਅਤੇ ਆਰਜ਼ੀ ਫਾਇਲਾਂ ਨੂੰ ਰੱਖਣਾ ਸੰਭਵ ਹੈ, ਜਦੋਂ ਵਰਤੋਂਕਾਰ ਖਾਤਾ" +-" ਹਟਾਉਣਾ ਹੋਵੇ।" ++"ਘਰ ਡਾਇਰੈਕਟਰੀ, ਮੇਲ ਸਪੂਲ ਅਤੇ ਆਰਜ਼ੀ ਫਾਇਲਾਂ ਨੂੰ ਰੱਖਣਾ ਸੰਭਵ ਹੈ, ਜਦੋਂ ਵਰਤੋਂਕਾਰ ਖਾਤਾ ਹਟਾਉਣਾ ਹੋਵੇ।" + + #: panels/user-accounts/cc-user-panel.c:631 + msgid "_Delete Files" +@@ -7719,8 +7728,7 @@ msgid "" + "Administrators can add and remove other users, and can change settings for " + "all users." + msgstr "" +-"ਪਰਸ਼ਾਸ਼ਕ ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਜੋੜ ਜਾਂ ਹਟਾ ਸਕਦੇ ਹਨ, ਅਤੇ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਲਈ" +-" ਸੈਟਿੰਗਾਂ ਬਦਲ ਸਕਦੇ ਹਨ।" ++"ਪਰਸ਼ਾਸ਼ਕ ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਜੋੜ ਜਾਂ ਹਟਾ ਸਕਦੇ ਹਨ, ਅਤੇ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਲਈ ਸੈਟਿੰਗਾਂ ਬਦਲ ਸਕਦੇ ਹਨ।" + + #: panels/user-accounts/cc-user-panel.ui:333 + #| msgid "Controls" +@@ -7885,8 +7893,7 @@ msgid "" + "Try to avoid repeating the same type of character: you need to mix up " + "letters, numbers and punctuation." + msgstr "" +-"ਇੱਕੋ ਕਿਸਮ ਦੇ ਅੱਖਰ ਮੁੜ-ਵਰਤਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ: ਤੁਸੀਂ ਅੱਖਰਾਂ, ਅੰਕਾਂ ਅਤੇ ਵਿਰਾਮ" +-" ਚਿੰਨ੍ਹਾਂ ਨੂੰ ਮਿਲ ਸਕਦੇ ਹੋ।" ++"ਇੱਕੋ ਕਿਸਮ ਦੇ ਅੱਖਰ ਮੁੜ-ਵਰਤਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ: ਤੁਸੀਂ ਅੱਖਰਾਂ, ਅੰਕਾਂ ਅਤੇ ਵਿਰਾਮ ਚਿੰਨ੍ਹਾਂ ਨੂੰ ਮਿਲ ਸਕਦੇ ਹੋ।" + + #: panels/user-accounts/pw-utils.c:126 + msgctxt "Password hint" +@@ -7899,8 +7906,7 @@ msgid "" + "Password needs to be longer. Try to add more letters, numbers and " + "punctuation." + msgstr "" +-"ਪਾਸਵਰਡ ਹੋਰ ਲੰਮਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। ਅੱਖਰ, ਅੰਕ ਅਤੇ ਵਿਰਾਮ-ਚਿੰਨ੍ਹ ਨੂੰ ਮਿਲਾ ਕੇ ਵਰਤ ਕੇ" +-" ਕੋਸ਼ਿਸ਼ ਕਰੋ।" ++"ਪਾਸਵਰਡ ਹੋਰ ਲੰਮਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। ਅੱਖਰ, ਅੰਕ ਅਤੇ ਵਿਰਾਮ-ਚਿੰਨ੍ਹ ਨੂੰ ਮਿਲਾ ਕੇ ਵਰਤ ਕੇ ਕੋਸ਼ਿਸ਼ ਕਰੋ।" + + #: panels/user-accounts/pw-utils.c:130 + msgctxt "Password hint" +@@ -7967,8 +7973,7 @@ msgid "" + "The username should usually only consist of lower case letters from a-z, " + "digits and the following characters: - _" + msgstr "" +-"ਵਰਤੋਂਕਾਰ ਨਾਂ ਵਿੱਚ ਅਕਸਰ ਕੇਵਲ ਅੰਗਰੇਜ਼ੀ ਦੇ ਛੋਟੇ ਅੱਖਰ (a-z), ਅੰਕ, ਅਤੇ ਅੱਗੇ ਦਿੱਤੇ" +-" ਅੱਖਰ ਹੋ ਸਕਦੇ ਹਨ: - __" ++"ਵਰਤੋਂਕਾਰ ਨਾਂ ਵਿੱਚ ਅਕਸਰ ਕੇਵਲ ਅੰਗਰੇਜ਼ੀ ਦੇ ਛੋਟੇ ਅੱਖਰ (a-z), ਅੰਕ, ਅਤੇ ਅੱਗੇ ਦਿੱਤੇ ਅੱਖਰ ਹੋ ਸਕਦੇ ਹਨ: - __" + + #: panels/user-accounts/user-utils.c:436 + msgid "Sorry, that user name isn’t available. Please try another." +@@ -8000,8 +8005,7 @@ msgid "" + "To edit a shortcut, choose the “Send Keystroke” action, press the keyboard " + "shortcut button and hold down the new keys or press Backspace to clear." + msgstr "" +-"ਸ਼ਾਰਟਕੱਟ ਸੋਧਣ ਲਈ, ”ਕੀ-ਸਟੋਰਕ ਭੇਜੋ” ਕਾਰਵਾਈ ਚੁਣੋ, ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ ਬਟਨ ਦੱਬੋ ਅਤੇ" +-" ਨਵੀਆਂ ਸਵਿੱਚਾਂ ਲਈ " ++"ਸ਼ਾਰਟਕੱਟ ਸੋਧਣ ਲਈ, ”ਕੀ-ਸਟੋਰਕ ਭੇਜੋ” ਕਾਰਵਾਈ ਚੁਣੋ, ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ ਬਟਨ ਦੱਬੋ ਅਤੇ ਨਵੀਆਂ ਸਵਿੱਚਾਂ ਲਈ " + "ਹੋਲਡ ਕਰਕੇ ਰੱਖੋ ਜਾਂ ਬੈਕਸਪੇਸ ਸਾਫ਼ ਕਰਨ ਲਈ ਵਰਤੋਂ।" + + #: panels/wacom/calibrator/calibrator.ui:61 +@@ -8009,8 +8013,7 @@ msgid "" + "Please tap the target markers as they appear on screen to calibrate the " + "tablet." + msgstr "" +-"ਟਾਰਗੇਟ ਮਾਰਕਰ ਲਈ ਟੈਪ ਕਰੋ ਜਿਵੇਂ ਕਿ ਉਹ ਸਕਰੀਨ ਉੱਤੇ ਟੇਬਲੇਟ ਨੂੰ ਕੈਲੀਬਰੇਟ ਕਰਨ ਲਈ" +-" ਵੇਖਾਈ ਦਿੰਦਾ ਹੈ।" ++"ਟਾਰਗੇਟ ਮਾਰਕਰ ਲਈ ਟੈਪ ਕਰੋ ਜਿਵੇਂ ਕਿ ਉਹ ਸਕਰੀਨ ਉੱਤੇ ਟੇਬਲੇਟ ਨੂੰ ਕੈਲੀਬਰੇਟ ਕਰਨ ਲਈ ਵੇਖਾਈ ਦਿੰਦਾ ਹੈ।" + + #: panels/wacom/calibrator/calibrator.ui:78 + msgid "Mis-click detected, restarting…" +@@ -8269,8 +8272,7 @@ msgid "" + "may experience incorrect system behavior, data loss, and other unexpected " + "issues. " + msgstr "" +-"ਸੈਟਿੰਗਾਂ ਦਾ ਇਹ ਵਰਜ਼ਨ ਡਿਵੈਲਪਮੈਂਟ ਮਕਸਦ ਲਈ ਹੀ ਵਰਤਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਤੁਹਾਨੂੰ ਕੁਝ" +-" ਗਲਤ ਸਿਸਟਮ " ++"ਸੈਟਿੰਗਾਂ ਦਾ ਇਹ ਵਰਜ਼ਨ ਡਿਵੈਲਪਮੈਂਟ ਮਕਸਦ ਲਈ ਹੀ ਵਰਤਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਤੁਹਾਨੂੰ ਕੁਝ ਗਲਤ ਸਿਸਟਮ " + "ਰਵੱਈਏ, ਡਾਟਾ ਗੁਆਚਣ ਅਤੇ ਹੋਰ ਅਚਨਚੇਤ ਮਸਲਿਆਂ ਦਾ ਸਾਹਮਣਾ ਕਰਨਾ ਪੈ ਸਕਦਾ ਹੈ।" + + #: shell/cc-window.ui:330 +@@ -8321,8 +8323,7 @@ msgid "" + "The identifier for the last Settings panel to be opened. Unrecognised values " + "will be ignored and the first panel in the list selected." + msgstr "" +-"ਆਖਰੀ ਸੈਟਿੰਗਾਂ ਪੈਨਲ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਪਛਾਣਕਰਤਾ ਹੈ। ਬੇਪਛਾਣ ਮੁੱਲਾਂ ਨੂੰ ਅਣਡਿੱਠਾ ਕੀਤਾ" +-" ਜਾਵੇਗਾ ਅਤੇ ਸੂਚੀ " ++"ਆਖਰੀ ਸੈਟਿੰਗਾਂ ਪੈਨਲ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਪਛਾਣਕਰਤਾ ਹੈ। ਬੇਪਛਾਣ ਮੁੱਲਾਂ ਨੂੰ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾਵੇਗਾ ਅਤੇ ਸੂਚੀ " + "ਵਿੱਚੋਂ ਪਹਿਲਾਂ ਪੈਨਲ ਚੁਣਿਆ ਜਾਂਦਾ ਹੈ।" + + #: shell/org.gnome.ControlCenter.gschema.xml:13 +@@ -8332,8 +8333,7 @@ msgstr "ਜਦੋਂ ਸੈਟਿੰਗਾਂ ਦੀ ਡਿਵੈਲਪਮੈਂ + #: shell/org.gnome.ControlCenter.gschema.xml:14 + msgid "" + "Whether Settings should show a warning when running a development build." +-msgstr "" +-"ਕੀ ਸੈਟਿੰਗਾਂ ਨੂੰ ਚੇਤਾਵਨੀ ਦਿਖਾਉਣੀ ਚਾਹੀਦੀ ਹੈ, ਜਦੋਂ ਡਿਵੈਲਪਮੈਂਟ ਬਿਲਡ ਚੱਲਦਾ ਹੋਵੇ।" ++msgstr "ਕੀ ਸੈਟਿੰਗਾਂ ਨੂੰ ਚੇਤਾਵਨੀ ਦਿਖਾਉਣੀ ਚਾਹੀਦੀ ਹੈ, ਜਦੋਂ ਡਿਵੈਲਪਮੈਂਟ ਬਿਲਡ ਚੱਲਦਾ ਹੋਵੇ।" + + #. translators: + #. * The number of sound outputs on a particular device +diff --git a/po/pl.po b/po/pl.po +index 7083f6ca6..143165b08 100644 +--- a/po/pl.po ++++ b/po/pl.po +@@ -9,8 +9,24 @@ + # Wojciech Szczęsny , 2013. + # Aviary.pl , 2007-2020. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# pl.po.multitasking (gnome-control-center) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-08 08:29+0000\n" ++"PO-Revision-Date: 2021-09-14 19:18+0200\n" ++"Last-Translator: Piotr Drąg \n" ++"Language-Team: Polish \n" ++"Language: pl\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " ++"|| n%100>=20) ? 1 : 2);\n" ++"#-#-#-#-# pl.po (gnome-control-center) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -25,6 +41,94 @@ msgstr "" + "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " + "|| n%100>=20) ? 1 : 2);\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Ogólne" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Aktywny róg" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Dotknięcie lewego górnego rogu otwiera ekran podglądu." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "Aktywne _krawędzie ekranu" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Przeciągnięcie okna do górnej, lewej lub prawej krawędzi ekranu zmienia jego " ++"rozmiar." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Obszary robocze" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Dynamiczne" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Automatycznie usuwa puste obszary robocze." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Stała liczba" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Można podać liczbę stałych obszarów roboczych." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Liczba obszarów roboczych" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Wiele monitorów" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "_Obszary robocze tylko na głównym ekranie" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "O_bszary robocze na wszystkich ekranach" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Przełączanie programów" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "_Programy ze wszystkich obszarów roboczych" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Progra_my tylko z obecnego obszaru roboczego" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Wielozadaniowość" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Zarządzanie preferencjami efektywności i wielozadaniowości" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"Wielozadaniowość;Multitasking;Efektywność;Produktywność;Dostosuj;" ++"Dostosowanie;Pulpit;Desktop;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Magistrala systemowa" +@@ -2646,11 +2750,6 @@ msgstr "Żadne programy nie poprosiły o dostęp do mikrofonu" + msgid "Protect your conversations" + msgstr "Ochrona rozmów" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Ogólne" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Przycisk podstawowy" +diff --git a/po/pt.po b/po/pt.po +index a63525f4a..a30a2848d 100644 +--- a/po/pt.po ++++ b/po/pt.po +@@ -1,3 +1,17 @@ ++# #-#-#-#-# pt.po.multitasking (3.8) #-#-#-#-# ++# gnome-control-center's Portuguese Translation ++# Copyright © 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 gnome-control-center ++# Distributed under the same licence as the gnome-control-center package ++# Duarte Loreto , 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014. ++# Nuno Ferreira , 1999. ++# António Lima , 2013. ++# Tiago Santos , 2014 - 2016. ++# Pedro Albuquerque , 2015. ++# Sérgio Cardeira , 2016. ++# Hugo Carvalho , 2021-2022. ++# Juliano de Souza Camargo , 2020-2022. ++# ++# #-#-#-#-# pt.po (3.8) #-#-#-#-# + # gnome-control-center's Portuguese Translation + # Copyright © 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 gnome-control-center + # Distributed under the same licence as the gnome-control-center package +@@ -9,8 +23,32 @@ + # Sérgio Cardeira , 2016. + # Juliano de Souza Camargo , 2020. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# pt.po.multitasking (3.8) #-#-#-#-#\n" ++"Project-Id-Version: 3.8\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2022-02-15 18:11+0000\n" ++"PO-Revision-Date: 2022-02-15 22:14+0000\n" ++"Last-Translator: Hugo Carvalho \n" ++"Language-Team: Portuguese < https://l10n.gnome.org/teams/pt/>\n" ++"Language: pt\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 3.0.1\n" ++"X-Language: pt_PT\n" ++"X-Source-Language: C\n" ++"X-Project-Style: gnome\n" ++"X-DL-Team: pt\n" ++"X-DL-Module: gnome-control-center\n" ++"X-DL-Branch: gnome-41\n" ++"X-DL-Domain: po\n" ++"X-DL-State: Translating\n" ++"#-#-#-#-# pt.po (3.8) #-#-#-#-#\n" + "Project-Id-Version: 3.8\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -28,6 +66,93 @@ msgstr "" + "X-Source-Language: C\n" + "X-Project-Style: gnome\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Geral" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "Canto ativo" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "" ++"Toque no canto superior esquerdo para abrir a Visão geral das Atividades." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "Margens de ecrã ativas" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Arraste janelas contra os lados ou a parte superior do ecrã para as " ++"redimensionar." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Áreas de trabalho" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "Áreas de trabalho _dinâmicas" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Remove automaticamente áreas de trabalho vazias." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "Número fixo de áreas de trabalho" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Especifique um número de áreas de trabalho permanentes." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Número de áreas de trabalho" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Multi-Monitor" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Áreas de trabalho apenas no ecrã _principal" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Áreas de trabalho em todos os ecrãs" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Comutação de aplicações" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Incluir aplicações de todas as áreas de trabalho" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Incluir apenas aplicações da área de trabalho atual" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Multitarefa" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Gerir preferências para produtividade e multitarefa" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Multitasking;Multitask;Productivity;Customize;Desktop;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Barramento do sistema" +@@ -2638,11 +2763,6 @@ msgstr "Nenhuma aplicação requisitou acesso ao microfone" + msgid "Protect your conversations" + msgstr "Proteja suas conversas" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Geral" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Botão primário" +diff --git a/po/pt_BR.po b/po/pt_BR.po +index 0674b4d2c..675f9abbb 100644 +--- a/po/pt_BR.po ++++ b/po/pt_BR.po +@@ -1,3 +1,36 @@ ++# #-#-#-#-# pt_BR.po.multitasking (gnome-control-center) #-#-#-#-# ++# Brazilian Portuguese translation of GNOME Control Center. ++# Copyright (C) 2021 The GNOME Control Center authors. ++# This file is distributed under the same license as the gnome-control-center package. ++# Ivan Passos , 1999. ++# Sandro Nunes Henrique , 1999. ++# Gustavo Maciel Dias Vieira , 2000-2001. ++# Tiago Cardoso Menezes , 2003. ++# Evandro Fernandes Giovanini , 2004, 2006. ++# Alex Camacho Castilho , 2004. ++# Guilherme de S. Pastore , 2004-2005. ++# Leonardo Ferreira Fontenelle , 2006, 2008. ++# Luiz Armesto , 2007-2008. ++# Og Maciel , 2007, 2009-2011. ++# Washington Lins , 2007. ++# Raul Pereira , 2007. ++# Jonh Wendell , 2008, 2009 ++# Henrique P Machado , 2008-2009. ++# Fabrício Godoy , 2008. ++# Djavan Fagundes , 2008, 2009, 2011. ++# André Gondim , 2009. ++# Krix Apolinário , 2009, 2011. ++# Antonio Fernandes C. Neto , 2010, 2013. ++# Hugo Vaz Sampaio , 2010. ++# Djavan Fagundes , 2012. ++# Gustavo Marques , 2015, 2016. ++# Artur de Aquino Morais , 2016. ++# Georges Basile Stavracas Neto , 2013-2019. ++# Bruno Lopes , 2021. ++# Rafael Fontenelle , 2012-2021. ++# Enrico Nicoletto , 2012-2016, 2018-2019, 2021. ++# ++# #-#-#-#-# pt_BR.po (gnome-control-center) #-#-#-#-# + # Brazilian Portuguese translation of GNOME Control Center. + # Copyright (C) 1999-2021 The GNOME Control Center authors. + # This file is distributed under the same license as the gnome-control-center package. +@@ -29,8 +62,25 @@ + # Bruno Lopes , 2021. + # Rafael Fontenelle , 2012-2021. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# pt_BR.po.multitasking (gnome-control-center) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-11-13 18:02+0000\n" ++"PO-Revision-Date: 2021-11-23 04:32-0300\n" ++"Last-Translator: Rafael Fontenelle \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 3.0\n" ++"X-Project-Style: gnome\n" ++"#-#-#-#-# pt_BR.po (gnome-control-center) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -46,6 +96,95 @@ msgstr "" + "X-Generator: Gtranslator 3.38.0\n" + "X-Project-Style: gnome\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Geral" ++ ++# Traduzido como "Canto ativo" conforme tradução do Módulo "gsettings-desktop-schemas" - Enrico. ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "Canto at_ivo" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Toque o canto superior esquerdo para abrir o Panorama de Atividades." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "Bordas de tela _ativas" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Arrasta janelas para as bordas de tela superior, esquerda e direita para " ++"redimensioná-las." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Espaços de trabalho" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "Espaços de trabalho _dinâmicos" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Remove automaticamente espaços de trabalho vazios." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "Número _fixo de espaços de trabalho" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Especifica um número permanente de espaços de trabalho." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Número de espaços de trabalho" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Multi-Monitor" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Espaços de trabalho somente na tela _principal" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Espaços de trabalho em todas as t_elas" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Alternador de aplicativos" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Incluir aplicativos de todos os es_paços de trabalho" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Incluir aplicativos somente do espaço de trabalho at_ual" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Multitarefas" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Gerencie preferências para produtividade e multitarefas" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"Multitarefa;Multitarefas;Produtividade;Personalizar;Customizar;Área de " ++"trabalho;Desktop;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Barramento de sistema" +@@ -2678,11 +2817,6 @@ msgstr "Nenhum aplicativo pediu por acesso ao microfone" + msgid "Protect your conversations" + msgstr "Projeta suas conversas" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Geral" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Botão primário" +diff --git a/po/ro.po b/po/ro.po +index d8a544dd2..f5755d4c5 100644 +--- a/po/ro.po ++++ b/po/ro.po +@@ -12,8 +12,27 @@ + # Lupescu Mircea , 2011. + # Jobava , 2015. + # Daniel Șerbănescu , 2011, 2016-2018, 2020. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# ro.po.multitasking (gnome-control-center) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-08 08:29+0000\n" ++"PO-Revision-Date: 2021-09-09 13:24+0200\n" ++"Last-Translator: Florentina Mușat \n" ++"Language-Team: Romanian Gnome Team\n" ++"Language: ro\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " ++"20)) ? 1 : 2);\n" ++"X-Generator: Poedit 3.0\n" ++"X-Launchpad-Export-Date: 2014-07-13 17:08+0000\n" ++"X-Project-Style: gnome\n" ++"#-#-#-#-# ro.po (gnome-control-center) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -31,6 +50,98 @@ msgstr "" + "X-Launchpad-Export-Date: 2014-07-13 17:08+0000\n" + "X-Project-Style: gnome\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Generale" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "Colț _important" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "" ++"Atingeți colțul din dreapta sus pentru a deschide Vederea de ansamblu a " ++"Activităților." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "Margini de ecran _active" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Trageți ferestrele spre marginile de sus, stânga și dreapta pentru a le " ++"redimensiona." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Spații de lucru" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "Spații de lucru _dinamice" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Elimină automat spații de lucru goale." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "Spații de lucru _fixe" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Specifică un număr permanent de spații de lucru." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Număr de spații de lucru" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Monitoare multiple" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Spațiile de lucru doar pe afișajul _principal" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Spații de lucru pe toate _ecranele" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Schimbarea între aplicații" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Include aplicații de pe toate _spațiile de lucru" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Include aplicații numai de pe spațiul de lucru _curent" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Sarcini multiple" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "" ++"Administrează preferințele pentru productivitate și efectuarea de sarcini " ++"multiple" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"Multitasking;Multitask;Productivity;Customize;Desktop;Sarcini;Sarcini " ++"multiple;Productivitate;Personalizează;Personalizare;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Magistrala sistemului" +@@ -2655,11 +2766,6 @@ msgstr "Nu sunt aplicații care au cerut accesul la microfon" + msgid "Protect your conversations" + msgstr "Protejați conversațiile" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Generale" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Buton principal" +diff --git a/po/ru.po b/po/ru.po +index e1374c2fb..f338a0e5b 100644 +--- a/po/ru.po ++++ b/po/ru.po +@@ -19,8 +19,25 @@ + # Stas Solovey , 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020. + # Ivan Komaritsyn , 2017. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# ru.po.multitasking (ru) #-#-#-#-#\n" ++"Project-Id-Version: ru\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2022-01-19 02:03+0000\n" ++"PO-Revision-Date: 2022-01-21 23:50+0300\n" ++"Last-Translator: Aleksandr Melman \n" ++"Language-Team: Русский \n" ++"Language: ru\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" ++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" ++"X-Generator: Poedit 3.0\n" ++"#-#-#-#-# ru.po (ru) #-#-#-#-#\n" + "Project-Id-Version: ru\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -36,6 +53,92 @@ msgstr "" + "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + "X-Generator: Poedit 2.2.4\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Общие" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Горячий угол" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Прикоснитесь к верхнему левому углу экрана, чтобы открыть Обзор." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Активные границы экрана" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Перетащите окна к верхней, левой или правой границе экрана, чтобы " ++"автоматически изменить размер." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Рабочие столы" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Автоматическое управление столами" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Автоматически убирать пустые столы." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Фиксированное количество столов" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Укажите количество столов, которое нужно вам постоянно." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Количество столов" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Для нескольких мониторов" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Рабочие столы только на _главном дисплее" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Рабочие столы на _всех дисплеях" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Переключение между приложениями" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Включать приложения со всех _столов" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Включать приложения _только с текущего стола" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Многозадачность" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Управляйте предпочтениями продуктивности и многозадачности" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Многозадачность;Продуктивность;Фокус;Настройка;Рабочий стол;" ++ + #: panels/applications/cc-applications-panel.c:708 + msgid "System Bus" + msgstr "Системная шина" +@@ -2758,11 +2861,6 @@ msgstr "Нет приложений запросивших доступ к ми + msgid "Protect your conversations" + msgstr "Защитите ваш обмен сообщениями" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Общие" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Основная кнопка" +diff --git a/po/sk.po b/po/sk.po +index 49f9d06df..dc6448b2a 100644 +--- a/po/sk.po ++++ b/po/sk.po +@@ -1,3 +1,15 @@ ++# #-#-#-#-# sk.po.multitasking (gnome-control-center) #-#-#-#-# ++# Slovak translation for gnome-control-center. ++# Copyright (C) 2000-2005, 2007-2009, 2011-2013 Free Software Foundation, Inc. ++# This file is distributed under the same license as the gnome-control-center package. ++# Stanislav Višňovsky , 2000-2004. ++# Marcel Telka , 2005. ++# Peter Tuhársky , 2007. ++# Pavol Šimo , 2007-2011. ++# Pavol Klačanský , 2012, 2013. ++# Dušan Kazik , 2013-2021. ++# ++# #-#-#-#-# sk.po (gnome-control-center) #-#-#-#-# + # Slovak translation for gnome-control-center. + # Copyright (C) 2000-2005, 2007-2009, 2011-2013 Free Software Foundation, Inc. + # This file is distributed under the same license as the gnome-control-center package. +@@ -8,8 +20,25 @@ + # Pavol Klačanský , 2012, 2013. + # Dušan Kazik , 2013-2020. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# sk.po.multitasking (gnome-control-center) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-25 09:28+0000\n" ++"PO-Revision-Date: 2021-10-01 10:43+0200\n" ++"Last-Translator: Dušan Kazik \n" ++"Language-Team: Slovak \n" ++"Language: sk\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0\n" ++"X-Launchpad-Export-Date: 2012-10-06 09:48+0000\n" ++"X-Generator: Gtranslator 40.0\n" ++"#-#-#-#-# sk.po (gnome-control-center) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -25,6 +54,100 @@ msgstr "" + "X-Launchpad-Export-Date: 2012-10-06 09:48+0000\n" + "X-Generator: Poedit 2.4.1\n" + ++# GtkLabel label ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Všeobecné" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "Aktívny _roh" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Dotykom horného ľavého rohu otvoríte prehľad aktivít." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Aktívne rohy obrazovky" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Potiahnutím okien k hornej, ľavej a pravej hrane obrazovky mu zmeníte " ++"veľkosť." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Pracovné priestory" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Dynamické pracovné priestory" ++ ++# GtkLabel label ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++#| msgid "Automatically Delete Temporary _Files" ++msgid "Automatically removes empty workspaces." ++msgstr "Automaticky odstraňuje prázdne pracovné priestory." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Pevný počet pracovných priestorov" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Určí počet trvalých pracovných priestorov." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Počet pracovných priestorov" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Viacero monitorov" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Pracovné priestory iba na _hlavnom displeji" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Pracovné priestory na všetkých _displejoch" ++ ++# tab ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++#| msgctxt "Wacom action-type" ++#| msgid "Application defined" ++msgid "Application Switching" ++msgstr "Prepínanie aplikácií" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Zahrnúť aplikácie zo všetkých _pracovných priestorov" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Zahrnúť aplikácie iba z _aktuálneho pracovného priestoru" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Súbežná práca" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Spravuje predvoľby pre produktivitu a súbežnú prácu" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"multitasking;súbežná;práca;produktivita;prispôsobiť;prispôsobenie;pracovná;" ++"plocha;" ++ + #: panels/applications/cc-applications-panel.c:815 + msgid "System Bus" + msgstr "Zbernica systému" +@@ -2882,12 +3005,6 @@ msgstr "Žiadne aplikácie si nevyžiadali prístup k mikrofónu" + msgid "Protect your conversations" + msgstr "Ochráňte vaše konverzácie" + +-# GtkLabel label +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Všeobecné" +- + # GtkLabel label + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" +diff --git a/po/sl.po b/po/sl.po +index 37979ffb3..ddef4444a 100644 +--- a/po/sl.po ++++ b/po/sl.po +@@ -1,3 +1,14 @@ ++# #-#-#-#-# sl.po.multitasking (gnome-control-center master) #-#-#-#-# ++# Slovenian translations for gnome-control-center. ++# Copyright (C) 2009 gnome-control-center COPYRIGHT HOLDER ++# This file is distributed under the same license as the gnome-control-center package. ++# ++# Andraž Tori , 2004. ++# Matjaž Horvat , 2005–2006. ++# Matic Žgur , 2006–2007. ++# Matej Urbančič , + 2007–2021. ++# ++# #-#-#-#-# sl.po (gnome-control-center master) #-#-#-#-# + # Slovenian translations for gnome-control-center. + # Copyright (C) 2009 gnome-control-center COPYRIGHT HOLDER + # This file is distributed under the same license as the gnome-control-center package. +@@ -7,8 +18,26 @@ + # Matic Žgur , 2006–2007. + # Matej Urbančič , + 2007–2021. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# sl.po.multitasking (gnome-control-center master) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-14 17:58+0000\n" ++"PO-Revision-Date: 2021-09-14 21:19+0200\n" ++"Last-Translator: Matej Urbančič \n" ++"Language-Team: Slovenian GNOME Translation Team \n" ++"Language: sl_SI\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" ++"%100==4 ? 3 : 0);\n" ++"X-Poedit-SourceCharset: utf-8\n" ++"X-Generator: Poedit 2.4.2\n" ++"#-#-#-#-# sl.po (gnome-control-center master) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -25,6 +54,94 @@ msgstr "" + "X-Poedit-SourceCharset: utf-8\n" + "X-Generator: Poedit 2.4.1\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Splošno" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Vroči kot" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Dotik levega zgornjega kota odpre pregled dejavnosti." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Dejavni robovi zaslona" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Dotik okna z zgornjim, levim ali desnim robom sproži dejanje prilagajanja " ++"velikosti okna." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Delovne površine" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Dinamične delovne površine" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Samodejno odstrani prazne delovne površine" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Določeno število delovnih površin" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Število števila prikazanih delovnih površin" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Število delovnih površin" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Podpora več monitorjem" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Delovne površine le na _osnovnem zaslonu" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "_Delovne površine naj bodo na vseh zaslonih" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Preklapljanje programov" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Vključi programe _vseh delovnih površin" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Vključi le programe s _trenutne delovne površine" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Večopravilnost" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Upravljanje nastavitev za učinkovito delo in večopravilnost" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"Multitasking;Multitask;Productivity;Customize;Desktop;Namizje;Večopravilnost;" ++"Učinkovitost;Prilagajanje;Delo;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Sistemsko vodilo" +@@ -2639,11 +2756,6 @@ msgstr "Ni programov, ki bi zahtevali dostop do mikrofona" + msgid "Protect your conversations" + msgstr "Zaščita pogovorov" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Splošno" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Osnovni gumb" +diff --git a/po/sr.po b/po/sr.po +index 446bffd8c..20893c6ea 100644 +--- a/po/sr.po ++++ b/po/sr.po +@@ -1,3 +1,15 @@ ++# #-#-#-#-# sr.po.multitasking (gnome-control-center) #-#-#-#-# ++# Serbian translation of gnome-control-center ++# Courtesy of Prevod.org team (http://prevod.org/) -- 2003–2021. ++# This file is distributed under the same license as the gnome-control-center package. ++# Вељко М. Станојевић ++# Данило Шеган , 2005. ++# Слободан Д. Средојевић , 2006. ++# Милош Поповић , 2010, 2011. ++# Марко М. Костић , 2016. ++# Борисав Живановић , 2017-2018. ++# Мирослав Николић , 2011–2021. ++# #-#-#-#-# sr.po (gnome-control-center) #-#-#-#-# + # Serbian translation of gnome-control-center + # Courtesy of Prevod.org team (http://prevod.org/) -- 2003—2021. + # This file is distributed under the same license as the gnome-control-center package. +@@ -8,8 +20,25 @@ + # Марко М. Костић , 2016. + # Борисав Живановић , 2017-2018. + # Мирослав Николић , 2011—2021. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# sr.po.multitasking (gnome-control-center) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-24 15:42+0000\n" ++"PO-Revision-Date: 2021-09-26 08:19+0200\n" ++"Last-Translator: Мирослав Николић \n" ++"Language-Team: српски \n" ++"Language: sr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n" ++"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" ++"X-Project-Style: gnome\n" ++"#-#-#-#-# sr.po (gnome-control-center) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -25,6 +54,95 @@ msgstr "" + "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + "X-Project-Style: gnome\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Опште" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "Врући у_гао" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Досегните горњи леви угао да бисте отворили преглед активности." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "Укључене ивице екран_а" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Повуците прозоре ка горњој, левој и десној ивици екрана да бисте променили " ++"величину." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Радни простори" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Динамички радни простори" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Самостално брише празне радне просторе." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Трајни радни простори" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Наведите број трајних радних простора." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Број радних простора" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Више екрана" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Радни _простори само на главном екрану" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Ра_дни простори на свим екранима" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Пребацивање програма" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Прикажи програме са свих _радних простора" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Прикажи програме _само са тренутног радног простора" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Упоредни рад" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Управљајте поставкама продуктивности и упоредног рада" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"Multitasking;Multitask;Productivity;Customize;Desktop;Упоредни рад;" ++"Вишеструки рад;Продуктивност;Прилагоди;Десктоп;Радна површ;Uporedni rad;" ++"Višestruki rad;Produktivnost;Prilagodi;Desktop;Radna površ;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Системска сабирница" +@@ -2672,11 +2790,6 @@ msgstr "Ниједан програм није затражио приступ + msgid "Protect your conversations" + msgstr "Заштитите ваше разговоре" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Опште" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Главно дугме" +diff --git a/po/sv.po b/po/sv.po +index 9d8665c7f..95239c1cb 100644 +--- a/po/sv.po ++++ b/po/sv.po +@@ -1,3 +1,19 @@ ++# #-#-#-#-# sv.po.multitasking (gnome-control-center) #-#-#-#-# ++# Swedish messages for gnome-control-center. ++# Copyright © 1998-2021 Free Software Foundation, Inc. ++# This file is distributed under the same license as the gnome-control-center package. ++# ++# Martin Wahlen , 1998, 1999. ++# Christian Rose , 2000, 2001, 2002, 2003, 2004, 2005. ++# Daniel Nylander , 2006, 2007, 2008, 2009, 2010, 2011, 2012. ++# Josef Andersson , 2014. ++# Åke Engelbrektson , 2014. ++# Anders Jonsson , 2015, 2016, 2017, 2018, 2019, 2020, 2021. ++# Mattias Eriksson , 2015. ++# Sebastian Rasmussen , 2015, 2016. ++# Luna Jernberg , 2020, 2021. ++# ++# #-#-#-#-# sv.po (gnome-control-center) #-#-#-#-# + # Swedish messages for gnome-control-center. + # Copyright © 1998-2021 Free Software Foundation, Inc. + # This file is distributed under the same license as the gnome-control-center package. +@@ -12,8 +28,24 @@ + # Sebastian Rasmussen , 2015, 2016. + # Luna Jernberg , 2020. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# sv.po.multitasking (gnome-control-center) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-08 08:29+0000\n" ++"PO-Revision-Date: 2021-09-08 20:14+0200\n" ++"Last-Translator: Luna Jernberg \n" ++"Language-Team: Swedish \n" ++"Language: sv\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 3.0\n" ++"#-#-#-#-# sv.po (gnome-control-center) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -28,6 +60,92 @@ msgstr "" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Poedit 2.4.2\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Allmänt" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Hett hörn" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Rör det övre vänstra hörnet för att öppna översiktsvyn Aktiviteter." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Aktiva skärmkanter" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Dra fönster mot de övre, vänstra och högra skärmkanterna för att ändra " ++"storlek på dem." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Arbetsytor" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Dynamiska arbetsytor" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Ta automatiskt bort tomma arbetsytor." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Fast antal arbetsytor" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Ange ett antal permanenta arbetsytor." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "A_ntal arbetsytor" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Flera skärmar" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Arbetsytor bara på den _primära skärmen" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Arbetsytor på a_lla skärmar" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Programväxling" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Inkludera program från alla a_rbetsytor" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Inkludera endast program från den a_ktuella arbetsytan" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Multikörning" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Hantera inställningar för produktivitet och multikörning" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Multitasking;Multitask;Multikörning;Produktivitet;Anpassa;Skrivbord;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Systembuss" +@@ -2624,11 +2742,6 @@ msgstr "Inga program har bett om åtkomst till mikrofonen" + msgid "Protect your conversations" + msgstr "Skydda dina konversationer" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Allmänt" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Primärknapp" +diff --git a/po/tr.po b/po/tr.po +index 51f147bf0..bd5cba02b 100644 +--- a/po/tr.po ++++ b/po/tr.po +@@ -1,3 +1,23 @@ ++# #-#-#-#-# tr.po.multitasking (gnome-control-center) #-#-#-#-# ++# Turkish translation of gnome-control-center. ++# ++# Copyright (C) 2000-2003, 2004, 2005, 2008, 2009, 2011 Free Software Foundation, Inc. ++# Copyright (C) 2012-2019 gnome-control-center'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the gnome-control-center package. ++# ++# Nilgün Belma Bugüner , 2001. ++# Fatih Demir , 2000. ++# Baris Cicek , 2004, 2005, 2008, 2009. ++# Erçin EKER , 2011. ++# ztugcesirin , 2014. ++# Furkan Tokaç , 2017. ++# Furkan Ahmet Kara , 2018. ++# Çağatay Yiğit Şahin , 2018. ++# Sabri Ünal , 2014, 2019. ++# Muhammet Kara , 2011-2021. ++# Emin Tufan Çetin , 2013-2021. ++# ++# #-#-#-#-# tr.po (gnome-control-center) #-#-#-#-# + # Turkish translation of gnome-control-center. + # + # Copyright (C) 2000-2003, 2004, 2005, 2008, 2009, 2011 Free Software Foundation, Inc. +@@ -16,8 +36,24 @@ + # Sabri Ünal , 2014, 2019. + # Emin Tufan Çetin , 2013-2021. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# tr.po.multitasking (gnome-control-center) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-24 15:42+0000\n" ++"PO-Revision-Date: 2021-09-09 22:32+0300\n" ++"Last-Translator: Emin Tufan Çetin \n" ++"Language-Team: Turkish \n" ++"Language: tr\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++"X-Generator: Poedit 2.4.3\n" ++"#-#-#-#-# tr.po (gnome-control-center) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -32,6 +68,90 @@ msgstr "" + "Plural-Forms: nplurals=1; plural=0;\n" + "X-Generator: Poedit 2.4.2\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Genel" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Sıcak Köşe" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Etkinlikler Genel Görünümünü açmak için sol üst köşeye dokun." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Etkin Ekran Köşeleri" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "Pencereleri üste, sola ve sağa sürükleyerek yeniden boyutlandır." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Çalışma Alanları" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Dinamik çalışma alanları" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Boş çalışma alanlarını kendiliğinden kaldırır." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Belirli sayıda çalışma alanları" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Kalıcı çalışma alanı sayısını belirt." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "Çalışma Alanı _Sayısı" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Çoklu Monitör" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Çalışma alanları yalnızca _birincil ekranda" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Çalışma alanları tüm _ekranlarda" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Uygulama Geçişi" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Tüm _çalışma alanlarından uygulamaları içer" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Yalnızca _geçerli çalışma alanından uygulamaları içer" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Çoklu Görev" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Verimlilik ve çoklu görev için tercihleri yönet" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "Çoklugörev;Çoğulgörev;Verimlilik;Üretkenlik;Özelleştir;Masaüstü;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Sistem Veriyolu" +@@ -2629,11 +2749,6 @@ msgstr "Hiçbir Uygulama Mikrofon Erişimi İsteği Yapmadı" + msgid "Protect your conversations" + msgstr "Konuşmalarınızı koruyun" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Genel" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Birincil Düğme" +diff --git a/po/uk.po b/po/uk.po +index 3824c39e7..f65e39cdf 100644 +--- a/po/uk.po ++++ b/po/uk.po +@@ -5,10 +5,29 @@ + # Wanderlust , 2009. + # Daniel Korostil , 2013, 2014, 2015, 2016, 2017. + # Yuri Chornoivan , 2020, 2021. ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# uk.po.multitasking (gnome-control-center) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center\n" +-"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/issues\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-08 08:29+0000\n" ++"PO-Revision-Date: 2021-09-08 12:56+0300\n" ++"Last-Translator: Yuri Chornoivan \n" ++"Language-Team: Ukrainian \n" ++"Language: uk\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" ++"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" ++"X-Generator: Lokalize 20.12.0\n" ++"X-Project-Style: gnome\n" ++"#-#-#-#-# uk.po (gnome-control-center) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" + "POT-Creation-Date: 2021-02-01 20:21+0000\n" + "PO-Revision-Date: 2021-02-02 09:00+0200\n" + "Last-Translator: Yuri Chornoivan \n" +@@ -17,10 +36,99 @@ msgstr "" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" ++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + "X-Generator: Lokalize 20.11.70\n" + "X-Project-Style: gnome\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "Загальне" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Гарячий кут" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Торкніться верхнього лівого кута, щоб відкрити огляд «Діяльності»." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Активні краї екрана" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Перетягніть вікна до верхнього, лівого або правого країв екрана, щоб змінити " ++"їхній розмір." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Робочі простори" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Динамічні робочі простори" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Автоматично вилучає порожні робочі простори." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Фіксована кількість робочих просторів" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Вкажіть кількість сталих робочих просторів." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "_Кількість робочих просторів" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Декілька моніторів" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Робочі простори _лише на основному дисплеї" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Робочі простори на усіх д_исплеях" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Перемикання програм" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Включити програми з усіх _робочих просторів" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Включити лише програми з пото_чного робочого простору" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Багатозадачність" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Керування параметрами продуктивності та багатозадачності" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"Multitasking;Multitask;Productivity;Customize;Desktop;багатозадачність;" ++"задача;завдання;продуктивність;налаштовування;налаштування;стільниця;" ++ + #: panels/applications/cc-applications-panel.c:823 + msgid "System Bus" + msgstr "Системна шина" +@@ -2639,11 +2747,6 @@ msgstr "Немає програм, які б надсилали запит що + msgid "Protect your conversations" + msgstr "Захистіть ваш обмін повідомленнями" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "Загальне" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "Основна кнопка" +@@ -3096,15 +3199,13 @@ msgstr "Адреса IP" + #: panels/network/net-device-ethernet.c:163 + #: panels/network/net-device-mobile.c:456 + msgid "DNS4" +-msgstr "" +-"DNS4" ++msgstr "DNS4" + + #: panels/network/connection-editor/ce-page-details.c:420 + #: panels/network/net-device-ethernet.c:164 + #: panels/network/net-device-mobile.c:457 + msgid "DNS6" +-msgstr "" +-"DNS6" ++msgstr "DNS6" + + #: panels/network/connection-editor/ce-page-details.c:423 + #: panels/network/connection-editor/ce-page-details.c:424 +diff --git a/po/vi.po b/po/vi.po +index 8baf230b2..1b51bad13 100644 +--- a/po/vi.po ++++ b/po/vi.po +@@ -1,3 +1,14 @@ ++# #-#-#-#-# vi.po.multitasking (gnome-control-center master) #-#-#-#-# ++# Vietnamese Translation for GNOME Control Center. ++# Bản dịch tiếng Việt dành cho GNOME Control Center. ++# Copyright © 2016 Free Software Foundation, Inc. ++# This file is distributed under the same license as the gnome-control-center package. ++# Nguyễn Thái Ngọc Duy , 2004,2007,2010-2013. ++# Clytie Siddall , 2005-2009. ++# Ngô Chin , 2011. ++# Trần Ngọc Quân , 2013-2018, 2021. ++# ++# #-#-#-#-# vi.po (gnome-control-center master) #-#-#-#-# + # Vietnamese Translation for GNOME Control Center. + # Bản dịch tiếng Việt dành cho GNOME Control Center. + # Copyright © 2016 Free Software Foundation, Inc. +@@ -7,8 +18,24 @@ + # Ngô Chin , 2011. + # Trần Ngọc Quân , 2013-2014, 2015, 2016, 2017, 2018. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# vi.po.multitasking (gnome-control-center master) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center master\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2021-09-27 07:48+0000\n" ++"PO-Revision-Date: 2021-09-28 14:47+0700\n" ++"Last-Translator: Trần Ngọc Quân \n" ++"Language-Team: Vietnamese \n" ++"Language: vi\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++"X-Generator: Gtranslator 3.38.0\n" ++"#-#-#-#-# vi.po (gnome-control-center master) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -23,6 +50,95 @@ msgstr "" + "Plural-Forms: nplurals=1; plural=0;\n" + "X-Generator: Gtranslator 2.91.7\n" + ++#. #-#-#-#-# vi.po.multitasking (gnome-control-center master) #-#-#-#-# ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++#: panels/mouse/gnome-mouse-properties.ui:45 ++msgid "General" ++msgstr "Chung" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "_Góc nóng" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "Di chuyển chuột đến góc trên-trái để mở “Tổng quan hoạt động”." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "_Kích hoạt cạnh màn hình" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "" ++"Kéo cửa sổ vào đỉnh, trái, và phải màn hình để thay đổi kích thước của chúng." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "Không gian làm việc" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "_Không gian làm việc động" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "Tự động xóa bỏ không gian làm việc trống rỗng." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "_Cố định số lượng không gian làm việc" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "Chỉ định số không gian làm việc cố định." ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "Số lượng _không gian làm việc" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "Đa màn hình" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "Không gian làm việc chỉ ở trên màn hình _chính" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "Hiển thị không gian làm việc trên mọ_i màn hình" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "Chuyển ứng dụng" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "Bao gồm các ứng dụng từ mọi _không gian việc" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "Bao gồm các ứng dụng _chỉ từ không gian việc hiện tại thôi" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "Đa nhiệm" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "Quản lý các tùy chỉnh cho năng suất và đa nhiệm" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"Multitasking;Multitask;Productivity;Customize;Desktop;Đa;nhiệm;Tùy;chọn;" ++"chỉnh;da nhiem;" ++ + #: panels/background/background.ui:49 + msgid "_Background" + msgstr "Ảnh _nền" +@@ -2003,10 +2119,6 @@ msgstr "" + "Trackpad;Pointer;Con;trỏ;tro;Click;Nhấn;Nhắp;Nhan;Nhap;Tap;Double;Dup;Button;" + "Nút;Nut;Trackball;Scroll;cuộn;cuon;" + +-#: panels/mouse/gnome-mouse-properties.ui:45 +-msgid "General" +-msgstr "Chung" +- + #: panels/mouse/gnome-mouse-properties.ui:83 + msgid "Primary Button" + msgstr "Nút chính" +diff --git a/po/zh_CN.po b/po/zh_CN.po +index ba8a7a8b7..285d6efbe 100644 +--- a/po/zh_CN.po ++++ b/po/zh_CN.po +@@ -1,3 +1,36 @@ ++# #-#-#-#-# zh_CN.po.multitasking (gnome-control-center 41.0) #-#-#-#-# ++# Simplified Chinese translation for gnome-control-center. ++# Copyright (C) 2001-2021 gnome-control-center's COPYRIGHT HOLDER ++# This file is distributed under the same license as gnome-control-center package. ++# Some translations are taken from tranditional Chinese translation. ++# by Abel Cheung , 2001. ++# He Qiangqiang , 2002. ++# Sun G11n , 2002. ++# Funda Wang , 2003-2006. ++# 甘露(Gan Lu) , 2009, 2013. ++# Deng Xiyue , 2009. ++# FujianWzh , 2009. ++# Tao Wei , 2009, 2010. ++# Xhacker Liu , 2010. ++# 朱涛 , 2010. ++# zhang ping , 2010. ++# 指冷玉笙寒 (dhyang) , 2011. ++# Lele Long , 2011. ++# Wind He , 2011. ++# bsfmig , 2012. ++# Cheng Lu , 2012. ++# YunQiang Su , 2011, 2013. ++# Wylmer Wang , 2011, 2012, 2014. ++# Tong Hui , 2014. ++# Eleanor Chen , 2014. ++# Aron Xu , 2010, 2011, 2012, 2013, 2014, 2015. ++# Mingye Wang , 2015. ++# Mingcong Bai , 2015, 2016, 2018. ++# Yuchen Guo , 2020. ++# Dingzhong Chen , 2016-2021. ++# Liu Tao , 2021. ++# ++# #-#-#-#-# zh_CN.po (gnome-control-center master) #-#-#-#-# + # Simplified Chinese translation for gnome-control-center. + # Copyright (C) 2001-2019 gnome-control-center's COPYRIGHT HOLDER + # This file is distributed under the same license as gnome-control-center package. +@@ -28,8 +61,24 @@ + # Dingzhong Chen , 2016-2019. + # Yuchen Guo , 2020. + # ++#, fuzzy + msgid "" + msgstr "" ++"#-#-#-#-# zh_CN.po.multitasking (gnome-control-center 41.0) #-#-#-#-#\n" ++"Project-Id-Version: gnome-control-center 41.0\n" ++"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" ++"issues\n" ++"POT-Creation-Date: 2022-02-07 20:42+0000\n" ++"PO-Revision-Date: 2022-02-07 16:11-0500\n" ++"Last-Translator: Boyuan Yang <073plan@gmail.com>\n" ++"Language-Team: Chinese - China \n" ++"Language: zh_CN\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++"X-Generator: Poedit 3.0.1\n" ++"#-#-#-#-# zh_CN.po (gnome-control-center master) #-#-#-#-#\n" + "Project-Id-Version: gnome-control-center master\n" + "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" + "issues\n" +@@ -44,6 +93,92 @@ msgstr "" + "Plural-Forms: nplurals=1; plural=0;\n" + "X-Generator: Poedit 2.4.1\n" + ++#. FIXME ++#: panels/mouse/cc-mouse-panel.ui:37 ++#: panels/multitasking/cc-multitasking-panel.ui:31 ++msgid "General" ++msgstr "常规" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:56 ++msgid "_Hot Corner" ++msgstr "热区(_H)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:57 ++msgid "Touch the top-left corner to open the Activities Overview." ++msgstr "触碰屏幕左上角以打开活动概览界面。" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:84 ++msgid "_Active Screen Edges" ++msgstr "激活屏幕边缘(_A)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:85 ++msgid "" ++"Drag windows against the top, left, and right screen edges to resize them." ++msgstr "将窗口拖曳至顶部、底部、左侧和右侧边缘以更改其大小。" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:114 ++msgid "Workspaces" ++msgstr "工作空间" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:139 ++msgid "_Dynamic workspaces" ++msgstr "动态工作空间(_D)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:140 ++msgid "Automatically removes empty workspaces." ++msgstr "自动移除空的工作空间。" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:158 ++msgid "_Fixed number of workspaces" ++msgstr "固定数量的工作空间(_F)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:159 ++msgid "Specify a number of permanent workspaces." ++msgstr "指定永久存在的工作空间的数量。" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:179 ++msgid "_Number of Workspaces" ++msgstr "工作空间数量(_N)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:200 ++msgid "Multi-Monitor" ++msgstr "多显示器" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:225 ++msgid "Workspaces on _primary display only" ++msgstr "工作空间仅位于主显示器上(_P)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:252 ++msgid "Workspaces on all d_isplays" ++msgstr "工作空间位于所有显示器上(_I)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:282 ++msgid "Application Switching" ++msgstr "应用程序切换" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:307 ++msgid "Include applications from all _workspaces" ++msgstr "包括所有工作空间的应用程序(_W)" ++ ++#: panels/multitasking/cc-multitasking-panel.ui:325 ++msgid "Include applications from the _current workspace only" ++msgstr "仅包括当前工作空间中的应用程序(_C)" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:3 ++msgid "Multitasking" ++msgstr "多任务" ++ ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:4 ++msgid "Manage preferences for productivity and multitasking" ++msgstr "管理生产力和多任务的首选项" ++ ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/multitasking/gnome-multitasking-panel.desktop.in.in:15 ++msgid "Multitasking;Multitask;Productivity;Customize;Desktop;" ++msgstr "" ++"Multitasking;Multitask;Productivity;Customize;Desktop;多任务;多进程;生产力;自" ++"定义;桌面;" ++ + #: panels/applications/cc-applications-panel.c:815 + msgid "System Bus" + msgstr "系统总线" +@@ -2507,11 +2642,6 @@ msgstr "没有应用程序要求访问麦克风" + msgid "Protect your conversations" + msgstr "保护对话" + +-#. FIXME +-#: panels/mouse/cc-mouse-panel.ui:37 +-msgid "General" +-msgstr "常规" +- + #: panels/mouse/cc-mouse-panel.ui:75 + msgid "Primary Button" + msgstr "主按钮" +-- +2.34.1 + diff --git a/backport-wacom-tool-id-fixes.patch b/backport-wacom-tool-id-fixes.patch deleted file mode 100644 index fa067ab..0000000 --- a/backport-wacom-tool-id-fixes.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 6d01e7277f8589a1f0076acbf9e08b45a5a96d0d Mon Sep 17 00:00:00 2001 -From: Peter Hutterer -Date: Thu, 13 Dec 2018 14:32:33 +1000 -Subject: [PATCH 1/2] wacom: Map wacom-driver-specific generic IDs to 0 - -The xf86-input-wacom driver doesn't use 0 for tools that do not have an id or -serials. Serials default to 1, and the tool id is either 0x2 for stylus or 0xa -for eraser, see xf86WacomDefs.h, the defines for STYLUS_DEVICE_ID and -ERASER_DEVICE_ID. - -libwacom uses 0xfffff and 0xffffe for the generic pens and all the lookup code -we have in the panel is designed for a serial/tool id of 0. So let's just map -the wacom driver IDs to 0 at the only transition point between Gdk and our -panel. - -No devices with serials 0 or hw ids 2/10 exist, so this shouldn't have side -effects. This only affects X + xf86-input-wacom. ---- - panels/wacom/cc-wacom-panel.c | 17 +++++++++++++++++ - 1 file changed, 17 insertions(+) - -diff --git a/panels/wacom/cc-wacom-panel.c b/panels/wacom/cc-wacom-panel.c -index e4f3ca7..8748876 100644 ---- a/panels/wacom/cc-wacom-panel.c -+++ b/panels/wacom/cc-wacom-panel.c -@@ -354,6 +354,14 @@ update_current_tool (CcWacomPanel *panel, - - /* Check whether we already know this tool, nothing to do then */ - serial = gdk_device_tool_get_serial (tool); -+ -+ /* The wacom driver sends serial-less tools with a serial of -+ * 1, libinput uses 0. No device exists with serial 1, let's reset -+ * it here so everything else works as expected. -+ */ -+ if (serial == 1) -+ serial = 0; -+ - stylus = cc_tablet_tool_map_lookup_tool (priv->tablet_tool_map, - wacom_device, serial); - -@@ -361,6 +369,15 @@ update_current_tool (CcWacomPanel *panel, - gboolean added; - - id = gdk_device_tool_get_hardware_id (tool); -+ -+ /* The wacom driver sends a hw id of 0x2 for stylus and 0xa -+ * for eraser for devices that don't have a true HW id. -+ * Reset those to 0 so we can use the same code-paths -+ * libinput uses. -+ */ -+ if (id == 0x2 || id == 0xa) -+ id = 0; -+ - stylus = cc_wacom_tool_new (serial, id, wacom_device); - if (!stylus) - return; --- -2.24.1 - - -From 6974aaeb20a5146f95de9c40cd0b3b5967b317a6 Mon Sep 17 00:00:00 2001 -From: Peter Hutterer -Date: Fri, 14 Dec 2018 16:14:30 +1000 -Subject: [PATCH 2/2] wacom: ignore the wacom driver's touch tool type - -When the wacom driver handles the touch device, we get a tool id of 0x3. Let's -ignore that because we don't need a tool for the touch node. - -Ideally we should be able to rely on the GDK tool type but that one is always -GDK_DEVICE_TOOL_TYPE_UNKNOWN see -https://gitlab.gnome.org/GNOME/gtk/merge_requests/453 - -A GTK bug (also fixed in that MR) prevents the tool id from updating. -Until that GTK bug is fixed the pen will only be detected if it is the first -event from this physical device. If the touch node sends an event before the -pen, the pen won't be detected. ---- - panels/wacom/cc-wacom-panel.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/panels/wacom/cc-wacom-panel.c b/panels/wacom/cc-wacom-panel.c -index 8748876..985ddf5 100644 ---- a/panels/wacom/cc-wacom-panel.c -+++ b/panels/wacom/cc-wacom-panel.c -@@ -374,9 +374,14 @@ update_current_tool (CcWacomPanel *panel, - * for eraser for devices that don't have a true HW id. - * Reset those to 0 so we can use the same code-paths - * libinput uses. -+ * The touch ID is 0x3, let's ignore that because we don't -+ * have a touch tool and it only happens when the wacom -+ * driver handles the touch device. - */ - if (id == 0x2 || id == 0xa) - id = 0; -+ else if (id == 0x3) -+ return; - - stylus = cc_wacom_tool_new (serial, id, wacom_device); - if (!stylus) --- -2.24.1 - diff --git a/categorize-infiniband.patch b/categorize-infiniband.patch deleted file mode 100644 index 4842a19..0000000 --- a/categorize-infiniband.patch +++ /dev/null @@ -1,708 +0,0 @@ -From c96f608b5d6c3ac12cb8bf76e4688f6c0e8dd059 Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Tue, 23 Apr 2019 19:29:41 +0200 -Subject: [PATCH 1/3] network: Rename section header - -The "Bluetooth" section is actually a catchall section for all -device types we don't know much specifically (Includes, but not -limited to Bluetooth). - -Rename/relabel it to something more comprehensive. - -Closes https://gitlab.gnome.org/GNOME/gnome-control-center/issues/488 ---- - panels/network/network.ui | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/panels/network/network.ui b/panels/network/network.ui -index 14c70cd..189febf 100644 ---- a/panels/network/network.ui -+++ b/panels/network/network.ui -@@ -87,7 +87,7 @@ - vertical - 12 - -- -+ - - - True -@@ -98,7 +98,7 @@ - False - True - 0.0 -- Bluetooth -+ Other Devices - - - --- -2.27.0.rc2 - - -From fc48e7e618a92f9d52cd61a9ef9b14bf889a9ef3 Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Tue, 23 Apr 2019 19:46:32 +0200 -Subject: [PATCH 2/3] network: Handle Infiniband as a wired interface - -The configuration/UI we expose for wired settings are meaningful for those -devices as well. - -Closes: https://gitlab.gnome.org/GNOME/gnome-control-center/issues/489 ---- - panels/network/cc-network-panel.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/panels/network/cc-network-panel.c b/panels/network/cc-network-panel.c -index 51ea823..5cdf616 100644 ---- a/panels/network/cc-network-panel.c -+++ b/panels/network/cc-network-panel.c -@@ -461,6 +461,7 @@ panel_add_device (CcNetworkPanel *panel, NMDevice *device) - /* map the NMDeviceType to the GType, or ignore */ - switch (type) { - case NM_DEVICE_TYPE_ETHERNET: -+ case NM_DEVICE_TYPE_INFINIBAND: - device_g_type = NET_TYPE_DEVICE_ETHERNET; - break; - case NM_DEVICE_TYPE_MODEM: --- -2.27.0.rc2 - - -From f71f867f35a8a6c437d2d525e39f3846e0782e4b Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Thu, 11 Jun 2020 14:16:03 +0200 -Subject: [PATCH 3/3] Update translations - ---- - po/ca.po | 4 ++++ - po/cs.po | 4 ++++ - po/da.po | 4 ++++ - po/de.po | 4 ++++ - po/el.po | 4 ++++ - po/en_GB.po | 4 ++++ - po/eo.po | 4 ++++ - po/es.po | 4 ++++ - po/eu.po | 4 ++++ - po/fa.po | 4 ++++ - po/fi.po | 4 ++++ - po/fr.po | 4 ++++ - po/fur.po | 4 ++++ - po/gl.po | 4 ++++ - po/hr.po | 4 ++++ - po/hu.po | 4 ++++ - po/id.po | 4 ++++ - po/it.po | 4 ++++ - po/ja.po | 4 ++++ - po/ko.po | 4 ++++ - po/lt.po | 4 ++++ - po/ms.po | 4 ++++ - po/nb.po | 4 ++++ - po/ne.po | 4 ++++ - po/nl.po | 4 ++++ - po/oc.po | 5 +++++ - po/pa.po | 4 ++++ - po/pl.po | 4 ++++ - po/pt_BR.po | 4 ++++ - po/ro.po | 4 ++++ - po/ru.po | 4 ++++ - po/sk.po | 4 ++++ - po/sl.po | 4 ++++ - po/sr.po | 4 ++++ - po/sv.po | 4 ++++ - po/tr.po | 4 ++++ - po/uk.po | 5 +++++ - po/zh_CN.po | 4 ++++ - po/zh_TW.po | 4 ++++ - 39 files changed, 158 insertions(+) - -diff --git a/po/ca.po b/po/ca.po -index 0592282..36172d9 100644 ---- a/po/ca.po -+++ b/po/ca.po -@@ -224,6 +224,10 @@ msgstr "Desactiveu el mode d'avió per a habilitar el Bluetooth." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Altres dispositius" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Activeu i desactiveu el Bluetooth i connecteu els dispositius" -diff --git a/po/cs.po b/po/cs.po -index 7d6c2cc..b827d87 100644 ---- a/po/cs.po -+++ b/po/cs.po -@@ -226,6 +226,10 @@ msgstr "Vypněte přepínač režimu „letadlo“, aby se povolilo Bluetooth." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Ostatní zařízení" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Zapnout a vypnout Bluetooth a připojit se k zařízením" -diff --git a/po/da.po b/po/da.po -index dc85493..bfcd034 100644 ---- a/po/da.po -+++ b/po/da.po -@@ -234,6 +234,10 @@ msgstr "Sluk for kontakten Flytilstand for at aktivere Bluetooth." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Andre enheder" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Slå Bluetooth til eller fra og tilslut dine enheder" -diff --git a/po/de.po b/po/de.po -index 78325a2..a5d65f8 100644 ---- a/po/de.po -+++ b/po/de.po -@@ -230,6 +230,10 @@ msgstr "" - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Weitere Geräte" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Schalten Sie Bluetooth an oder aus und verbinden Sie Ihre Geräte" -diff --git a/po/el.po b/po/el.po -index a4a1374..81120c7 100644 ---- a/po/el.po -+++ b/po/el.po -@@ -2934,6 +2934,10 @@ msgstr "Απενεργοποίηση συσκευής" - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Άλλες συσκευές" -+ - #: ../panels/network/network.ui.h:3 - msgid "Not set up" - msgstr "Δεν είναι ρυθμισμένο" -diff --git a/po/en_GB.po b/po/en_GB.po -index 96733a1..1bba5a6 100644 ---- a/po/en_GB.po -+++ b/po/en_GB.po -@@ -213,6 +213,10 @@ msgstr "Turn off the Aeroplane mode switch to enable Bluetooth." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Other Devices" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Turn Bluetooth on and off and connect your devices" -diff --git a/po/eo.po b/po/eo.po -index a13393b..473ed08 100644 ---- a/po/eo.po -+++ b/po/eo.po -@@ -3000,6 +3000,10 @@ msgstr "Elŝalti aparaton" - msgid "Bluetooth" - msgstr "Bludento" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Aliaj aparatoj" -+ - #: ../panels/network/network.ui.h:3 - msgid "Not set up" - msgstr "" -diff --git a/po/es.po b/po/es.po -index b59dcd8..4ae235b 100644 ---- a/po/es.po -+++ b/po/es.po -@@ -221,6 +221,10 @@ msgstr "Apague el modo avión para activar el Bluetooth." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Otros dispositivos" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Activar y desactivar Bluetooth y conectar sus dispositivos" -diff --git a/po/eu.po b/po/eu.po -index b702316..8ed6d30 100644 ---- a/po/eu.po -+++ b/po/eu.po -@@ -2906,6 +2906,10 @@ msgstr "Desaktibatu gailua" - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Beste gailuak" -+ - #: ../panels/network/network.ui.h:3 - msgid "Not set up" - msgstr "Konfiguratu gabe" -diff --git a/po/fa.po b/po/fa.po -index 12a92ac..101b73c 100644 ---- a/po/fa.po -+++ b/po/fa.po -@@ -2792,6 +2792,10 @@ msgstr "خاموش کردن دستگاه" - msgid "Bluetooth" - msgstr "بلوتوث" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "دیگر دستگاه‌ها" -+ - #: ../panels/network/network.ui.h:3 - msgid "Not set up" - msgstr "برپا نشده" -diff --git a/po/fi.po b/po/fi.po -index 30f8098..b278e0f 100644 ---- a/po/fi.po -+++ b/po/fi.po -@@ -228,6 +228,10 @@ msgstr "Poista lentokonetila käytöstä käyttääksesi Bluetoothia." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Muut laitteet" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Kytke Bluetooth päälle tai pois ja yhdistä laitteita" -diff --git a/po/fr.po b/po/fr.po -index fbe309a..7c55fd2 100644 ---- a/po/fr.po -+++ b/po/fr.po -@@ -241,6 +241,10 @@ msgstr "Désactivez le mode avion pour activer le Bluetooth." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Autres périphériques" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Active/désactive le Bluetooth et connecte vos périphériques" -diff --git a/po/fur.po b/po/fur.po -index 7cc4bb2..7bdfcba 100644 ---- a/po/fur.po -+++ b/po/fur.po -@@ -211,6 +211,10 @@ msgstr "Distude il cric de modalitât Avion par abilitâ il Bluetooth." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Altris dispositîfs" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Impie e distude il Bluetooth e conet i tiei dispositîfs" -diff --git a/po/gl.po b/po/gl.po -index 6a2061f..b4763b7 100644 ---- a/po/gl.po -+++ b/po/gl.po -@@ -222,6 +222,10 @@ msgstr "Apague o modo avión para activar o Bluetooth." - 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 "Active ou desactive o Bluetooth e conecte os seus dispositivos" -diff --git a/po/hr.po b/po/hr.po -index 480fe50..740ef7b 100644 ---- a/po/hr.po -+++ b/po/hr.po -@@ -209,6 +209,10 @@ msgstr "Isključite način rada u zrakoplovu kako bi mogli kristiti Bluetooth." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Ostali uređaji" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Uključite ili isključite Bluetooth i povežite svoje uređaje" -diff --git a/po/hu.po b/po/hu.po -index 9fddf1c..41b0e51 100644 ---- a/po/hu.po -+++ b/po/hu.po -@@ -220,6 +220,10 @@ msgstr "" - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Egyéb eszközök" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Kapcsolja be és ki a Bluetooth-t, majd csatlakoztassa eszközeit" -diff --git a/po/id.po b/po/id.po -index ad2772a..49c370d 100644 ---- a/po/id.po -+++ b/po/id.po -@@ -213,6 +213,10 @@ msgstr "Matikan saklar mode Pesawat Terbang untuk memfungsikan Bluetooth." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Perangkat Lainnya" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Nyalakan dan matikan Bluetooth dan sambungkan perangkat Anda" -diff --git a/po/it.po b/po/it.po -index cdbc7b0..1390c7c 100644 ---- a/po/it.po -+++ b/po/it.po -@@ -216,6 +216,10 @@ msgstr "Disattivare la modalità aereo via hardware per abilitare il Bluetooth." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Altri dispositivi" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Attiva e disattiva il Bluetooth e connette i propri dispositivi" -diff --git a/po/ja.po b/po/ja.po -index 5f4767f..bc144dd 100644 ---- a/po/ja.po -+++ b/po/ja.po -@@ -2893,6 +2893,10 @@ msgstr "デバイスをオフにする" - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "その他のデバイス" -+ - #: ../panels/network/network.ui.h:3 - msgid "Not set up" - msgstr "未設定" -diff --git a/po/ko.po b/po/ko.po -index 49d9c2f..3d350b2 100644 ---- a/po/ko.po -+++ b/po/ko.po -@@ -230,6 +230,10 @@ msgstr "블루투스를 사용하려면 비행 모드 스위치를 끄십시오. - msgid "Bluetooth" - msgstr "블루투스" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "기타 장치" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "블루투스를 켜거나 끄고 블루투스 장치에 연결합니다" -diff --git a/po/lt.po b/po/lt.po -index 3a1292e..9328564 100644 ---- a/po/lt.po -+++ b/po/lt.po -@@ -220,6 +220,10 @@ msgstr "Išjunkite skrydžio veiksenos jungiklį Bluetooth įjungimui." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Kiti įrenginiai" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Įjunkite arba išjunkite Bluetooth ir junkitės prie savo įrenginių" -diff --git a/po/ms.po b/po/ms.po -index c78df1b..e90eec8 100644 ---- a/po/ms.po -+++ b/po/ms.po -@@ -2723,6 +2723,10 @@ msgstr "Profail ujian:" - msgid "VPN" - msgstr "" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Lain-lain Peranti" -+ - #: ../panels/network/connection-editor/net-connection-editor.c:578 - msgid "Bond" - msgstr "" -diff --git a/po/nb.po b/po/nb.po -index e1e4b11..02815b2 100644 ---- a/po/nb.po -+++ b/po/nb.po -@@ -2842,6 +2842,10 @@ msgstr "Slå enhet av" - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Andre enheter" -+ - #: ../panels/network/network.ui.h:3 - msgid "Not set up" - msgstr "Ikke satt opp" -diff --git a/po/ne.po b/po/ne.po -index 6cd1bb9..ad3a137 100644 ---- a/po/ne.po -+++ b/po/ne.po -@@ -2448,6 +2448,10 @@ msgstr "नायाँ प्रोफाइल" - msgid "VPN" - msgstr "भीपीएन" - -+#: panels/network/network.ui:102 -+msgid "Other Devices" -+msgstr "अरु यन्त्रहरू " -+ - #: ../panels/network/connection-editor/net-connection-editor.c:751 - msgid "Import from file…" - msgstr "फाईलबाट आयात गर्नुहोस्" -diff --git a/po/nl.po b/po/nl.po -index 3b48a77..d81a865 100644 ---- a/po/nl.po -+++ b/po/nl.po -@@ -233,6 +233,10 @@ msgstr "Vliegtuigstand uitschakelen om Bluetooth mogelijk te maken." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Overige apparaten" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Bluetooth aan- en uitzetten en uw apparaten aansluiten" -diff --git a/po/oc.po b/po/oc.po -index bcd7fbe..025b78b 100644 ---- a/po/oc.po -+++ b/po/oc.po -@@ -2815,6 +2815,11 @@ msgstr "Apondre lo periferic" - msgid "Remove Device" - msgstr "Levar lo periferic" - -+#: panels/network/network.ui:102 -+#| msgid "Devices" -+msgid "Other Devices" -+msgstr "Autres periferics" -+ - #: ../panels/network/network-vpn.ui.h:1 - msgid "VPN Type" - msgstr "Tipe de VPN" -diff --git a/po/pa.po b/po/pa.po -index ce50b62..a894921 100644 ---- a/po/pa.po -+++ b/po/pa.po -@@ -215,6 +215,10 @@ msgstr "ਬਲੂਟੁੱਥ ਨੂੰ ਸਮਰੱਥ ਕਰਨ ਲਈ ਏਅ - msgid "Bluetooth" - msgstr "ਬਲੂਟੁੱਥ" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "ਹੋਰ ਡਿਵਾਈਸ" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "ਬਲੂਟੁੱਥ ਜੰਤਰ ਨੂੰ ਚਾਲੂ ਤੇ ਬੰਦ ਕਰੋ ਅਤੇ ਆਪਣੇ ਜੰਤਰਾਂ ਨਾਲ ਕਨੈਕਟ ਕਰੋ-" -diff --git a/po/pl.po b/po/pl.po -index 9093e4e..c1536f4 100644 ---- a/po/pl.po -+++ b/po/pl.po -@@ -214,6 +214,10 @@ msgstr "Należy wyłączyć przełącznik trybu sprzętowego, aby włączyć Blu - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Inne urządzenia" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Włączanie Bluetooth i łączenie z urządzeniami" -diff --git a/po/pt_BR.po b/po/pt_BR.po -index acad283..bc0861b 100644 ---- a/po/pt_BR.po -+++ b/po/pt_BR.po -@@ -236,6 +236,10 @@ msgstr "Desligue o alternador do modo avião para habilitar o Bluetooth." - 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" -diff --git a/po/ro.po b/po/ro.po -index 10fc7eb..6d3f307 100644 ---- a/po/ro.po -+++ b/po/ro.po -@@ -221,6 +221,10 @@ msgstr "Opriți modul avion pentru a putea activa Bluetooth." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:102 -+msgid "Other Devices" -+msgstr "Alte dispozitive" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Deschideți și închideți Bluetooth și conectați-vă dispozitivele" -diff --git a/po/ru.po b/po/ru.po -index 52762fd..414b598 100644 ---- a/po/ru.po -+++ b/po/ru.po -@@ -226,6 +226,10 @@ msgstr "Для включения Bluetooth выключите режим для - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Другие устройства" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Включение и отключение Bluetooth. Подключение устройств Bluetooth" -diff --git a/po/sk.po b/po/sk.po -index 3d67fb2..1a4ee5e 100644 ---- a/po/sk.po -+++ b/po/sk.po -@@ -231,6 +231,10 @@ msgstr "Vypnite prepínač režimu v lietadle na povolenie rozhrania Bluetooth." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Ostatné zariadenia" -+ - # desktop entry comment - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" -diff --git a/po/sl.po b/po/sl.po -index ba5f934..5008f64 100644 ---- a/po/sl.po -+++ b/po/sl.po -@@ -215,6 +215,10 @@ msgstr "Izklopi letalski način za omogočanje vmesnika Bluetooth." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Druge naprave" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Vklopite in izklopite Bluetooth in povežite svoje naprave" -diff --git a/po/sr.po b/po/sr.po -index 1c747a4..6604629 100644 ---- a/po/sr.po -+++ b/po/sr.po -@@ -218,6 +218,10 @@ msgstr "Искључите авионски режим рада бисте ук - msgid "Bluetooth" - msgstr "Блутут" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Други уређаји" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Укључите или искључите блутут и повежите ваше уређаје" -diff --git a/po/sv.po b/po/sv.po -index d8f4138..25567fb 100644 ---- a/po/sv.po -+++ b/po/sv.po -@@ -217,6 +217,10 @@ msgstr "Slå av växelknappen för flygplansläge för att aktivera Bluetooth." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Andra enheter" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Slå på samt av Bluetooth och anslut dina enheter" -diff --git a/po/tr.po b/po/tr.po -index 7ac1573..5ef1d82 100644 ---- a/po/tr.po -+++ b/po/tr.po -@@ -220,6 +220,10 @@ msgstr "Bluetooth’u etkinleştirmek için Uçak kipini kapat." - msgid "Bluetooth" - msgstr "Bluetooth" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "Diğer Aygıtlar" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "Bluetooth’u açıp kapatın ve aygıtlarınızı bağlayın" -diff --git a/po/uk.po b/po/uk.po -index 9e9d8dc..4bc1cbb 100644 ---- a/po/uk.po -+++ b/po/uk.po -@@ -2900,6 +2900,11 @@ msgstr "Додати пристрій" - msgid "Remove Device" - msgstr "Вилучити носій" - -+#: panels/network/network.ui:68 -+#| msgid "Devices" -+msgid "Other Devices" -+msgstr "Інші пристрої" -+ - #: ../panels/network/network-vpn.ui.h:1 - msgid "VPN Type" - msgstr "Тип VPN" -diff --git a/po/zh_CN.po b/po/zh_CN.po -index 3c7050c..c3153b1 100644 ---- a/po/zh_CN.po -+++ b/po/zh_CN.po -@@ -2780,6 +2780,10 @@ msgstr "添加设备" - msgid "Remove Device" - msgstr "移除设备" - -+#: panels/network/network.ui:102 -+msgid "Other Devices" -+msgstr "其他设备" -+ - #: ../panels/network/network-vpn.ui.h:1 - msgid "VPN Type" - msgstr "VPN 类型" -diff --git a/po/zh_TW.po b/po/zh_TW.po -index 8d5a5a0..e0de674 100644 ---- a/po/zh_TW.po -+++ b/po/zh_TW.po -@@ -215,6 +215,10 @@ msgstr "關閉飛安模式開關以啟用藍牙。" - msgid "Bluetooth" - msgstr "藍牙" - -+#: panels/network/network.ui:68 -+msgid "Other Devices" -+msgstr "其他裝置" -+ - #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 - msgid "Turn Bluetooth on and off and connect your devices" - msgstr "開啟或關閉藍牙與連接您的裝置" --- -2.27.0.rc2 - diff --git a/change-device-name-with-enter-key.patch b/change-device-name-with-enter-key.patch new file mode 100644 index 0000000..edc8eaa --- /dev/null +++ b/change-device-name-with-enter-key.patch @@ -0,0 +1,81 @@ +From 8eab500540c1631dbdc760bca617a581e2969ed6 Mon Sep 17 00:00:00 2001 +From: Felipe Borges +Date: Mon, 1 Aug 2022 10:57:07 +0200 +Subject: [PATCH] info-overview: Allow changing "Device Name" by pressing + "Enter" + +The hostname/device name dialog has only a GtkEntry. So a user +navigating with only a keyboard should be able to apply their +changes by pressing "Enter". +--- + panels/info-overview/cc-info-overview-panel.c | 34 +++++++++++++++++++ + .../info-overview/cc-info-overview-panel.ui | 1 + + 2 files changed, 35 insertions(+) + +diff --git a/panels/info-overview/cc-info-overview-panel.c b/panels/info-overview/cc-info-overview-panel.c +index a2cb70755..e8881d70d 100644 +--- a/panels/info-overview/cc-info-overview-panel.c ++++ b/panels/info-overview/cc-info-overview-panel.c +@@ -818,6 +818,38 @@ on_device_name_entry_changed (CcInfoOverviewPanel *self) + g_strcmp0 (current_hostname, new_hostname) != 0); + } + ++static void ++update_device_name (CcInfoOverviewPanel *self) ++{ ++ const gchar *hostname; ++ ++ /* We simply change the CcHostnameEntry text. CcHostnameEntry ++ * listens to changes and updates hostname on change. ++ */ ++ hostname = gtk_entry_get_text (GTK_ENTRY (self->device_name_entry)); ++ gtk_entry_set_text (GTK_ENTRY (self->hostname_entry), hostname); ++} ++ ++static void ++on_hostname_editor_dialog_response_cb (GtkDialog *dialog, ++ gint response, ++ CcInfoOverviewPanel *self) ++{ ++ if (response == GTK_RESPONSE_APPLY) ++ { ++ update_device_name (self); ++ } ++ ++ gtk_window_close (GTK_WINDOW (dialog)); ++} ++ ++static void ++on_device_name_entry_activated_cb (CcInfoOverviewPanel *self) ++{ ++ update_device_name (self); ++ gtk_window_close (GTK_WINDOW (self->hostname_editor)); ++} ++ + static void + open_hostname_edit_dialog (CcInfoOverviewPanel *self) + { +@@ -906,6 +938,8 @@ cc_info_overview_panel_class_init (CcInfoOverviewPanelClass *klass) + + gtk_widget_class_bind_template_callback (widget_class, cc_info_panel_row_activated_cb); + gtk_widget_class_bind_template_callback (widget_class, on_device_name_entry_changed); ++ gtk_widget_class_bind_template_callback (widget_class, on_device_name_entry_activated_cb); ++ gtk_widget_class_bind_template_callback (widget_class, on_hostname_editor_dialog_response_cb); + + g_type_ensure (CC_TYPE_LIST_ROW); + g_type_ensure (CC_TYPE_HOSTNAME_ENTRY); +diff --git a/panels/info-overview/cc-info-overview-panel.ui b/panels/info-overview/cc-info-overview-panel.ui +index 2f5d3cf8b..adf3b5409 100644 +--- a/panels/info-overview/cc-info-overview-panel.ui ++++ b/panels/info-overview/cc-info-overview-panel.ui +@@ -219,6 +219,7 @@ + + True + ++ + + + +-- +2.34.1 + diff --git a/display-infobar-if-night-light-unsupported.patch b/display-infobar-if-night-light-unsupported.patch new file mode 100644 index 0000000..62a3e2b --- /dev/null +++ b/display-infobar-if-night-light-unsupported.patch @@ -0,0 +1,416 @@ +From c999bade4d27e0384b6495ee3bbf88df1b9e256b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Thu, 24 Feb 2022 12:30:23 +0100 +Subject: [PATCH 1/2] display: Add 'NightLightSupported' property support + +--- + panels/display/cc-display-config-manager-dbus.c | 17 +++++++++++++++++ + panels/display/cc-display-config-manager.c | 6 ++++++ + panels/display/cc-display-config-manager.h | 3 +++ + 3 files changed, 26 insertions(+) + +diff --git a/panels/display/cc-display-config-manager-dbus.c b/panels/display/cc-display-config-manager-dbus.c +index 392140101..678b696db 100644 +--- a/panels/display/cc-display-config-manager-dbus.c ++++ b/panels/display/cc-display-config-manager-dbus.c +@@ -33,6 +33,7 @@ struct _CcDisplayConfigManagerDBus + GVariant *current_state; + + gboolean apply_allowed; ++ gboolean night_light_supported; + }; + + G_DEFINE_TYPE (CcDisplayConfigManagerDBus, +@@ -169,6 +170,12 @@ bus_gotten (GObject *object, + else + g_warning ("Missing property 'ApplyMonitorsConfigAllowed' on DisplayConfig API"); + ++ variant = g_dbus_proxy_get_cached_property (proxy, "NightLightSupported"); ++ if (variant) ++ self->night_light_supported = g_variant_get_boolean (variant); ++ else ++ g_warning ("Missing property 'NightLightSupported' on DisplayConfig API"); ++ + get_current_state (self); + } + +@@ -176,6 +183,7 @@ static void + cc_display_config_manager_dbus_init (CcDisplayConfigManagerDBus *self) + { + self->apply_allowed = TRUE; ++ self->night_light_supported = TRUE; + self->cancellable = g_cancellable_new (); + g_bus_get (G_BUS_TYPE_SESSION, self->cancellable, bus_gotten, self); + } +@@ -205,6 +213,14 @@ cc_display_config_manager_dbus_get_apply_allowed (CcDisplayConfigManager *pself) + return self->apply_allowed; + } + ++static gboolean ++cc_display_config_manager_dbus_get_night_light_supported (CcDisplayConfigManager *pself) ++{ ++ CcDisplayConfigManagerDBus *self = CC_DISPLAY_CONFIG_MANAGER_DBUS (pself); ++ ++ return self->night_light_supported; ++} ++ + static void + cc_display_config_manager_dbus_class_init (CcDisplayConfigManagerDBusClass *klass) + { +@@ -215,6 +231,7 @@ cc_display_config_manager_dbus_class_init (CcDisplayConfigManagerDBusClass *klas + + parent_class->get_current = cc_display_config_manager_dbus_get_current; + parent_class->get_apply_allowed = cc_display_config_manager_dbus_get_apply_allowed; ++ parent_class->get_night_light_supported = cc_display_config_manager_dbus_get_night_light_supported; + } + + CcDisplayConfigManager * +diff --git a/panels/display/cc-display-config-manager.c b/panels/display/cc-display-config-manager.c +index 3d683c53d..f231edd69 100644 +--- a/panels/display/cc-display-config-manager.c ++++ b/panels/display/cc-display-config-manager.c +@@ -65,3 +65,9 @@ cc_display_config_manager_get_apply_allowed (CcDisplayConfigManager *self) + { + return CC_DISPLAY_CONFIG_MANAGER_GET_CLASS (self)->get_apply_allowed (self); + } ++ ++gboolean ++cc_display_config_manager_get_night_light_supported (CcDisplayConfigManager *self) ++{ ++ return CC_DISPLAY_CONFIG_MANAGER_GET_CLASS (self)->get_night_light_supported (self); ++} +diff --git a/panels/display/cc-display-config-manager.h b/panels/display/cc-display-config-manager.h +index 64f0775e9..ab1e84f85 100644 +--- a/panels/display/cc-display-config-manager.h ++++ b/panels/display/cc-display-config-manager.h +@@ -35,12 +35,15 @@ struct _CcDisplayConfigManagerClass + + CcDisplayConfig * (*get_current) (CcDisplayConfigManager *self); + gboolean (* get_apply_allowed) (CcDisplayConfigManager *self); ++ gboolean (* get_night_light_supported) (CcDisplayConfigManager *self); + }; + + CcDisplayConfig * cc_display_config_manager_get_current (CcDisplayConfigManager *self); + + gboolean cc_display_config_manager_get_apply_allowed (CcDisplayConfigManager *self); + ++gboolean cc_display_config_manager_get_night_light_supported (CcDisplayConfigManager *self); ++ + void _cc_display_config_manager_emit_changed (CcDisplayConfigManager *self); + + G_END_DECLS +-- +2.34.1 + + +From 414e23272f89198efc452a4f8d50442c72a07956 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Thu, 24 Feb 2022 12:31:00 +0100 +Subject: [PATCH 2/2] display: Show infobar if night light isn't supported + +This may be the case on e.g. fully remote / headless sessions, or as of +now, when using the NVIDIA driver to run a Wayland session. + +Closes: https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1659 +--- + panels/display/cc-night-light-page.c | 153 +++++++++++++++----------- + panels/display/cc-night-light-page.ui | 41 ++++++- + 2 files changed, 129 insertions(+), 65 deletions(-) + +diff --git a/panels/display/cc-night-light-page.c b/panels/display/cc-night-light-page.c +index f51b0ba69..482b90fea 100644 +--- a/panels/display/cc-night-light-page.c ++++ b/panels/display/cc-night-light-page.c +@@ -29,15 +29,18 @@ + #include "list-box-helper.h" + + #include "shell/cc-object-storage.h" ++#include "cc-display-config-manager-dbus.h" + + struct _CcNightLightPage { + GtkBin parent; + ++ GtkWidget *night_light_settings; + GtkWidget *box_manual; + GtkButton *button_from_am; + GtkButton *button_from_pm; + GtkButton *button_to_am; + GtkButton *button_to_pm; ++ GtkWidget *infobar_unsupported; + GtkWidget *infobar_disabled; + GtkListBox *listbox; + GtkWidget *scale_color_temperature; +@@ -64,6 +67,8 @@ struct _CcNightLightPage { + gboolean ignore_value_changed; + guint timer_id; + GDesktopClockFormat clock_format; ++ ++ CcDisplayConfigManager *config_manager; + }; + + G_DEFINE_TYPE (CcNightLightPage, cc_night_light_page, GTK_TYPE_BIN); +@@ -122,88 +127,97 @@ dialog_adjustments_set_frac_hours (CcNightLightPage *self, + static void + dialog_update_state (CcNightLightPage *self) + { +- gboolean automatic; +- gboolean disabled_until_tomorrow = FALSE; +- gboolean enabled; +- gdouble value = 0.f; +- +- /* only show the infobar if we are disabled */ +- if (self->proxy_color != NULL) ++ if (cc_display_config_manager_get_night_light_supported (self->config_manager)) + { +- g_autoptr(GVariant) disabled = NULL; +- disabled = g_dbus_proxy_get_cached_property (self->proxy_color, +- "DisabledUntilTomorrow"); +- if (disabled != NULL) +- disabled_until_tomorrow = g_variant_get_boolean (disabled); +- } +- gtk_widget_set_visible (self->infobar_disabled, disabled_until_tomorrow); ++ gboolean automatic; ++ gboolean disabled_until_tomorrow = FALSE; ++ gboolean enabled; ++ gdouble value = 0.f; + +- /* make things insensitive if the switch is disabled */ +- enabled = g_settings_get_boolean (self->settings_display, "night-light-enabled"); +- automatic = g_settings_get_boolean (self->settings_display, "night-light-schedule-automatic"); ++ /* only show the infobar if we are disabled */ ++ if (self->proxy_color != NULL) ++ { ++ g_autoptr(GVariant) disabled = NULL; ++ disabled = g_dbus_proxy_get_cached_property (self->proxy_color, ++ "DisabledUntilTomorrow"); ++ if (disabled != NULL) ++ disabled_until_tomorrow = g_variant_get_boolean (disabled); ++ } ++ gtk_widget_set_visible (self->infobar_disabled, disabled_until_tomorrow); + +- gtk_widget_set_sensitive (self->box_manual, enabled && !automatic); ++ /* make things insensitive if the switch is disabled */ ++ enabled = g_settings_get_boolean (self->settings_display, "night-light-enabled"); ++ automatic = g_settings_get_boolean (self->settings_display, "night-light-schedule-automatic"); + +- gtk_combo_box_set_active_id (self->schedule_type_combo, automatic ? "automatic" : "manual"); ++ gtk_widget_set_sensitive (self->box_manual, enabled && !automatic); + +- /* set from */ +- if (automatic && self->proxy_color != NULL) +- { +- g_autoptr(GVariant) sunset = NULL; +- sunset = g_dbus_proxy_get_cached_property (self->proxy_color, "Sunset"); +- if (sunset != NULL) ++ gtk_combo_box_set_active_id (self->schedule_type_combo, automatic ? "automatic" : "manual"); ++ ++ /* set from */ ++ if (automatic && self->proxy_color != NULL) + { +- value = g_variant_get_double (sunset); ++ g_autoptr(GVariant) sunset = NULL; ++ sunset = g_dbus_proxy_get_cached_property (self->proxy_color, "Sunset"); ++ if (sunset != NULL) ++ { ++ value = g_variant_get_double (sunset); ++ } ++ else ++ { ++ value = 16.0f; ++ g_warning ("no sunset data, using %02.2f", value); ++ } + } + else + { +- value = 16.0f; +- g_warning ("no sunset data, using %02.2f", value); ++ value = g_settings_get_double (self->settings_display, "night-light-schedule-from"); ++ value = fmod (value, 24.f); + } +- } +- else +- { +- value = g_settings_get_double (self->settings_display, "night-light-schedule-from"); +- value = fmod (value, 24.f); +- } +- dialog_adjustments_set_frac_hours (self, value, +- self->adjustment_from_hours, +- self->adjustment_from_minutes, +- self->stack_from, +- self->button_from_am, +- self->button_from_pm); +- +- /* set to */ +- if (automatic && self->proxy_color != NULL) +- { +- g_autoptr(GVariant) sunset = NULL; +- sunset = g_dbus_proxy_get_cached_property (self->proxy_color, "Sunrise"); +- if (sunset != NULL) ++ dialog_adjustments_set_frac_hours (self, value, ++ self->adjustment_from_hours, ++ self->adjustment_from_minutes, ++ self->stack_from, ++ self->button_from_am, ++ self->button_from_pm); ++ ++ /* set to */ ++ if (automatic && self->proxy_color != NULL) + { +- value = g_variant_get_double (sunset); ++ g_autoptr(GVariant) sunset = NULL; ++ sunset = g_dbus_proxy_get_cached_property (self->proxy_color, "Sunrise"); ++ if (sunset != NULL) ++ { ++ value = g_variant_get_double (sunset); ++ } ++ else ++ { ++ value = 8.0f; ++ g_warning ("no sunrise data, using %02.2f", value); ++ } + } + else + { +- value = 8.0f; +- g_warning ("no sunrise data, using %02.2f", value); ++ value = g_settings_get_double (self->settings_display, "night-light-schedule-to"); ++ value = fmod (value, 24.f); + } ++ dialog_adjustments_set_frac_hours (self, value, ++ self->adjustment_to_hours, ++ self->adjustment_to_minutes, ++ self->stack_to, ++ self->button_to_am, ++ self->button_to_pm); ++ ++ self->ignore_value_changed = TRUE; ++ value = (gdouble) g_settings_get_uint (self->settings_display, "night-light-temperature"); ++ gtk_adjustment_set_value (self->adjustment_color_temperature, value); ++ self->ignore_value_changed = FALSE; + } + else + { +- value = g_settings_get_double (self->settings_display, "night-light-schedule-to"); +- value = fmod (value, 24.f); ++ gtk_widget_set_visible (self->infobar_unsupported, TRUE); ++ gtk_widget_set_visible (self->infobar_disabled, FALSE); ++ gtk_widget_set_sensitive (self->night_light_settings, FALSE); + } +- dialog_adjustments_set_frac_hours (self, value, +- self->adjustment_to_hours, +- self->adjustment_to_minutes, +- self->stack_to, +- self->button_to_am, +- self->button_to_pm); +- +- self->ignore_value_changed = TRUE; +- value = (gdouble) g_settings_get_uint (self->settings_display, "night-light-temperature"); +- gtk_adjustment_set_value (self->adjustment_color_temperature, value); +- self->ignore_value_changed = FALSE; + } + + static void +@@ -549,6 +563,13 @@ dialog_am_pm_to_button_clicked_cb (GtkButton *button, + g_debug ("new value = %.3f", value); + } + ++static void ++config_manager_changed_cb (CcDisplayConfigManager *config_manager, ++ CcNightLightPage *self) ++{ ++ dialog_update_state (self); ++} ++ + /* GObject overrides */ + static void + cc_night_light_page_finalize (GObject *object) +@@ -583,11 +604,13 @@ cc_night_light_page_class_init (CcNightLightPageClass *klass) + gtk_widget_class_bind_template_child (widget_class, CcNightLightPage, adjustment_to_hours); + gtk_widget_class_bind_template_child (widget_class, CcNightLightPage, adjustment_to_minutes); + gtk_widget_class_bind_template_child (widget_class, CcNightLightPage, adjustment_color_temperature); ++ gtk_widget_class_bind_template_child (widget_class, CcNightLightPage, night_light_settings); + gtk_widget_class_bind_template_child (widget_class, CcNightLightPage, box_manual); + gtk_widget_class_bind_template_child (widget_class, CcNightLightPage, button_from_am); + gtk_widget_class_bind_template_child (widget_class, CcNightLightPage, button_from_pm); + gtk_widget_class_bind_template_child (widget_class, CcNightLightPage, button_to_am); + gtk_widget_class_bind_template_child (widget_class, CcNightLightPage, button_to_pm); ++ gtk_widget_class_bind_template_child (widget_class, CcNightLightPage, infobar_unsupported); + gtk_widget_class_bind_template_child (widget_class, CcNightLightPage, infobar_disabled); + gtk_widget_class_bind_template_child (widget_class, CcNightLightPage, listbox); + gtk_widget_class_bind_template_child (widget_class, CcNightLightPage, night_light_toggle_switch); +@@ -700,6 +723,10 @@ cc_night_light_page_init (CcNightLightPage *self) + G_CALLBACK (dialog_clock_settings_changed_cb), + self, G_CONNECT_SWAPPED); + ++ self->config_manager = cc_display_config_manager_dbus_new (); ++ g_signal_connect (self->config_manager, "changed", ++ G_CALLBACK (config_manager_changed_cb), self); ++ + dialog_update_state (self); + } + +diff --git a/panels/display/cc-night-light-page.ui b/panels/display/cc-night-light-page.ui +index 02b14f731..cb18837ad 100644 +--- a/panels/display/cc-night-light-page.ui ++++ b/panels/display/cc-night-light-page.ui +@@ -6,9 +6,45 @@ + + True + False +- center + start + vertical ++ ++ ++ False ++ infobar_unsupported ++ warning ++ ++ ++ True ++ vertical ++ True ++ 16 ++ ++ ++ True ++ start ++ 6 ++ False ++ Night Light unavailable ++ ++ ++ ++ ++ ++ ++ ++ True ++ start ++ 6 ++ False ++ This could be the result of the graphics driver being used, or the desktop being used remotely ++ ++ ++ ++ ++ ++ ++ + + + infobar_disabled +@@ -70,8 +106,9 @@ + + + +- ++ + True ++ center + False + 30 + 12 +-- +2.34.1 + diff --git a/dist b/dist new file mode 100644 index 0000000..89c1faf --- /dev/null +++ b/dist @@ -0,0 +1 @@ +an9 diff --git a/distro-logo.patch b/distro-logo.patch index 3c38c30..d59e43a 100644 --- a/distro-logo.patch +++ b/distro-logo.patch @@ -1,99 +1,195 @@ -From 73be5fcb0764cb8e7bdcbcf3ee06b833078d576a Mon Sep 17 00:00:00 2001 -From: Matthias Clasen -Date: Sun, 31 Mar 2013 20:28:19 -0400 -Subject: [PATCH] info: Switch around GNOME and distro information +From 4369e31ec541172e1c0d7c64645c7990e413bbca Mon Sep 17 00:00:00 2001 +From: Michael Catanzaro +Date: Tue, 9 Mar 2021 14:51:54 -0600 +Subject: [PATCH 1/3] info-overview: add build option to control distributor + logo -This makes the distribution logo prominent, and puts GNOME version -information in the small print. +Currently, we display a 256x256 version of the OS icon from +/etc/os-release. This is too big for my taste, and it's also not +sufficient for distros that want to display a logo that is not an icon. +For instance, because we no longer display the operating system name +immediately beneath the logo, it may be desirable to use a logo variant +that includes text. This patch adds a meson build option that +distributions can use to override the logo. -https://bugzilla.gnome.org/show_bug.cgi?id=695691 +Because the logo might include text, distributions may want to vary the +logo used in dark mode. A subsequent commit will add a second option for +this. --- - panels/info/cc-info-overview-panel.c | 7 ++----- - panels/info/info-overview.ui | 14 ++++++++------ - 2 files changed, 10 insertions(+), 11 deletions(-) + meson.build | 6 ++++++ + meson_options.txt | 1 + + panels/info-overview/cc-info-overview-panel.c | 4 ++++ + 3 files changed, 11 insertions(+) -diff --git a/panels/info/cc-info-overview-panel.c b/panels/info/cc-info-overview-panel.c -index 7a5879c6b..ce15e92d0 100644 ---- a/panels/info/cc-info-overview-panel.c -+++ b/panels/info/cc-info-overview-panel.c -@@ -446,7 +446,7 @@ static char * - get_os_name (void) +diff --git a/meson.build b/meson.build +index e8333c0da..1661caa4b 100644 +--- a/meson.build ++++ b/meson.build +@@ -50,6 +50,12 @@ foreach define: set_defines + config_h.set_quoted(define[0], define[1]) + endforeach + ++distributor_logo = get_option('distributor_logo') ++if (distributor_logo != '') ++ config_h.set_quoted('DISTRIBUTOR_LOGO', distributor_logo, ++ description: 'Define to absolute path of distributor logo') ++endif ++ + # meson does not support octal values, so it must be handled as a + # string. See: https://github.com/mesonbuild/meson/issues/2047 + config_h.set('USER_DIR_MODE', '0700', +diff --git a/meson_options.txt b/meson_options.txt +index 1b7b54810..93e551373 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -8,3 +8,4 @@ option('tracing', type: 'boolean', value: false, description: 'add extra debuggi + option('wayland', type: 'boolean', value: true, description: 'build with Wayland support') + option('profile', type: 'combo', choices: ['default','development'], value: 'default') + option('malcontent', type: 'boolean', value: false, description: 'build with malcontent support') ++option('distributor_logo', type: 'string', description: 'absolute path to distributor logo for the About panel') +diff --git a/panels/info-overview/cc-info-overview-panel.c b/panels/info-overview/cc-info-overview-panel.c +index bd0e07762..95a5904df 100644 +--- a/panels/info-overview/cc-info-overview-panel.c ++++ b/panels/info-overview/cc-info-overview-panel.c +@@ -869,6 +869,9 @@ cc_info_panel_row_activated_cb (CcInfoOverviewPanel *self, + static void + setup_os_logo (CcInfoOverviewPanel *panel) { - GHashTable *os_info; -- gchar *name, *version_id, *pretty_name, *build_id; -+ gchar *name, *version_id, *build_id; - gchar *result = NULL; - g_autofree gchar *name_version = NULL; ++#ifdef DISTRIBUTOR_LOGO ++ gtk_image_set_from_file (panel->os_logo, DISTRIBUTOR_LOGO); ++#else + g_autofree char *logo_name = g_get_os_info ("LOGO"); + if (logo_name != NULL) + { +@@ -879,6 +882,7 @@ setup_os_logo (CcInfoOverviewPanel *panel) + { + gtk_image_set_from_resource (panel->os_logo, "/org/gnome/control-center/info-overview/GnomeLogoVerticalMedium.svg"); + } ++#endif + } -@@ -457,12 +457,9 @@ get_os_name (void) + static void +-- +GitLab + + +From f08669767ca87ff99fc08e1a7334c8f2e7f18f0b Mon Sep 17 00:00:00 2001 +From: Michael Catanzaro +Date: Tue, 9 Mar 2021 16:02:46 -0600 +Subject: [PATCH 2/3] info-overview: add build option to specify a dark mode + logo variant + +Let's allow distributions to specify a different logo to use when using +a dark GTK theme. This is best-effort only since it relies on the +convention that dark themes must end with "dark" and therefore will fail +for a theme named "midnight" or anything that doesn't match convention. +--- + meson.build | 5 ++++ + meson_options.txt | 1 + + panels/info-overview/cc-info-overview-panel.c | 27 +++++++++++++++++++ + 3 files changed, 33 insertions(+) + +diff --git a/meson.build b/meson.build +index 1661caa4b..124171626 100644 +--- a/meson.build ++++ b/meson.build +@@ -54,6 +54,11 @@ distributor_logo = get_option('distributor_logo') + if (distributor_logo != '') + config_h.set_quoted('DISTRIBUTOR_LOGO', distributor_logo, + description: 'Define to absolute path of distributor logo') ++ dark_mode_distributor_logo = get_option('dark_mode_distributor_logo') ++ if (dark_mode_distributor_logo != '') ++ config_h.set_quoted('DARK_MODE_DISTRIBUTOR_LOGO', dark_mode_distributor_logo, ++ description: 'Define to absolute path of distributor logo for use in dark mode') ++ endif + endif - name = g_hash_table_lookup (os_info, "NAME"); - version_id = g_hash_table_lookup (os_info, "VERSION_ID"); -- pretty_name = g_hash_table_lookup (os_info, "PRETTY_NAME"); - build_id = g_hash_table_lookup (os_info, "BUILD_ID"); + # meson does not support octal values, so it must be handled as a +diff --git a/meson_options.txt b/meson_options.txt +index 93e551373..5305c8606 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -9,3 +9,4 @@ option('wayland', type: 'boolean', value: true, description: 'build with Wayland + option('profile', type: 'combo', choices: ['default','development'], value: 'default') + option('malcontent', type: 'boolean', value: false, description: 'build with malcontent support') + option('distributor_logo', type: 'string', description: 'absolute path to distributor logo for the About panel') ++option('dark_mode_distributor_logo', type: 'string', description: 'absolute path to distributor logo dark mode variant') +diff --git a/panels/info-overview/cc-info-overview-panel.c b/panels/info-overview/cc-info-overview-panel.c +index 95a5904df..cb20e16b1 100644 +--- a/panels/info-overview/cc-info-overview-panel.c ++++ b/panels/info-overview/cc-info-overview-panel.c +@@ -866,10 +866,37 @@ cc_info_panel_row_activated_cb (CcInfoOverviewPanel *self, + open_software_update (self); + } -- if (pretty_name) -- name_version = g_strdup (pretty_name); -- else if (name && version_id) -+ if (name && version_id) - name_version = g_strdup_printf ("%s %s", name, version_id); ++#ifdef DARK_MODE_DISTRIBUTOR_LOGO ++static gboolean ++is_dark_mode (CcInfoOverviewPanel *panel) ++{ ++ GdkScreen *screen; ++ GtkSettings *settings; ++ g_autofree char *theme_name = NULL; ++ ++ theme_name = g_strdup (g_getenv ("GTK_THEME")); ++ if (theme_name != NULL) ++ return g_str_has_suffix (theme_name, "dark"); ++ ++ screen = gtk_widget_get_screen (GTK_WIDGET (panel)); ++ settings = gtk_settings_get_for_screen (screen); ++ ++ g_object_get (settings, "gtk-theme-name", &theme_name, NULL); ++ return theme_name != NULL && g_str_has_suffix (theme_name, "dark"); ++} ++#endif ++ + static void + setup_os_logo (CcInfoOverviewPanel *panel) + { + #ifdef DISTRIBUTOR_LOGO ++#ifdef DARK_MODE_DISTRIBUTOR_LOGO ++ if (is_dark_mode (panel)) ++ { ++ gtk_image_set_from_file (panel->os_logo, DARK_MODE_DISTRIBUTOR_LOGO); ++ return; ++ } ++#endif + gtk_image_set_from_file (panel->os_logo, DISTRIBUTOR_LOGO); + #else + g_autofree char *logo_name = g_get_os_info ("LOGO"); +-- +GitLab + + +From c379ccc4e8f0bcdee78361f134ba29d3a25f7528 Mon Sep 17 00:00:00 2001 +From: Michael Catanzaro +Date: Wed, 10 Mar 2021 11:30:57 -0600 +Subject: [PATCH 3/3] info-overview: reduce size of logo when using icon from + /etc/os-release + +When using the icon from /etc/os-release, display it as 128x128 rather +than 256x256. In distributions that don't ship a 128x128, such as +Fedora, this results in the 256x256 icon being scaled down to a +reasonable size. 256x256 is so large here as to be clearly undesirable. +128x128 is also the size that Ubuntu uses in its downstream patch. Might +as well reduce the need for patching as far as possible, even though +Fedora doesn't plan to use this codepath. +--- + panels/info-overview/cc-info-overview-panel.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/panels/info-overview/cc-info-overview-panel.c b/panels/info-overview/cc-info-overview-panel.c +index cb20e16b1..3575b90c5 100644 +--- a/panels/info-overview/cc-info-overview-panel.c ++++ b/panels/info-overview/cc-info-overview-panel.c +@@ -903,7 +903,7 @@ setup_os_logo (CcInfoOverviewPanel *panel) + if (logo_name != NULL) + { + gtk_image_set_from_icon_name (panel->os_logo, logo_name, GTK_ICON_SIZE_INVALID); +- gtk_image_set_pixel_size (panel->os_logo, 256); ++ gtk_image_set_pixel_size (panel->os_logo, 128); + } else - name_version = g_strdup (_("Unknown")); -diff --git a/panels/info/info-overview.ui b/panels/info/info-overview.ui -index 219a83c4c..aa87fbec2 100644 ---- a/panels/info/info-overview.ui -+++ b/panels/info/info-overview.ui -@@ -12,13 +12,14 @@ - - True - False -- 18 -+ 6 - vertical - - - True - False -- /org/gnome/control-center/info/GnomeLogoVerticalMedium.svg -+ 128 -+ system-logo-icon - - - False -@@ -27,11 +28,12 @@ - - - -- -+ - True - False - Version 3.0 - True -+ 24 - - - -@@ -118,8 +120,8 @@ - True - False - 1 -- OS name -- os_name_label -+ GNOME -+ version_label - -@@ -228,7 +230,7 @@ - - - -- -+ - True - False - 0 + { -- -2.13.0 +GitLab diff --git a/download b/download index 77677a8..1b469d8 100644 --- a/download +++ b/download @@ -1 +1 @@ -9b6967307c49fff8d118a027ee398415 gnome-control-center-3.28.2.tar.xz +d704e59afe2df9c24ed876841adb3e0a gnome-control-center-40.0.tar.xz diff --git a/gnome-control-center-Drop-the-unused-build-dependency-on-Grilo.patch b/gnome-control-center-Drop-the-unused-build-dependency-on-Grilo.patch new file mode 100644 index 0000000..2287b1c --- /dev/null +++ b/gnome-control-center-Drop-the-unused-build-dependency-on-Grilo.patch @@ -0,0 +1,1385 @@ +From e2d3f71a37a7e587b0af2a9818377ec1ac098e79 Mon Sep 17 00:00:00 2001 +From: Debarshi Ray +Date: Tue, 20 Apr 2021 23:00:28 +0200 +Subject: [PATCH] background: Drop the unused build dependency on Grilo + +The code that uses Grilo to fetch the user's Flickr photos isn't +actually used by the Background panel, to the extent that the final +binary doesn't even link against Grilo. Getting rid of this unused code +will ensure that distributors aren't needlessly pulling in this +dependency. + +This patch has been customized for RHEL 9 to skip the .gitlab-ci.yml +file, which isn't part of the 'ninja dist' generated tarball. + +https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1345 +--- + build-aux/flatpak/org.gnome.Settings.json | 17 - + panels/background/bg-pictures-source.c | 855 ------------------ + panels/background/bg-pictures-source.h | 46 - + panels/background/cc-background-chooser.c | 1 - + panels/background/cc-background-grilo-miner.c | 315 ------- + panels/background/cc-background-grilo-miner.h | 31 - + panels/background/cc-background-panel.c | 2 - + panels/background/meson.build | 4 - + 8 files changed, 1271 deletions(-) + delete mode 100644 panels/background/bg-pictures-source.c + delete mode 100644 panels/background/bg-pictures-source.h + delete mode 100644 panels/background/cc-background-grilo-miner.c + delete mode 100644 panels/background/cc-background-grilo-miner.h + +diff --git a/build-aux/flatpak/org.gnome.Settings.json b/build-aux/flatpak/org.gnome.Settings.json +index 3e19894b0484..b64b4c2fdbc5 100644 +--- a/build-aux/flatpak/org.gnome.Settings.json ++++ b/build-aux/flatpak/org.gnome.Settings.json +@@ -485,23 +485,6 @@ + } + ] + }, +- { +- "name" : "grilo", +- "buildsystem" : "meson", +- "config-opts" : [ +- "-Denable-grl-pls=false", +- "-Denable-gtk-doc=false", +- "-Denable-introspection=false", +- "-Denable-test-ui=false", +- "-Denable-vala=false" +- ], +- "sources" : [ +- { +- "type" : "git", +- "url" : "https://gitlab.gnome.org/GNOME/grilo.git" +- } +- ] +- }, + { + "name" : "openldap", + "buildsystem" : "autotools", +diff --git a/panels/background/bg-pictures-source.c b/panels/background/bg-pictures-source.c +deleted file mode 100644 +index 3a3027b1391e..000000000000 +--- a/panels/background/bg-pictures-source.c ++++ /dev/null +@@ -1,855 +0,0 @@ +-/* bg-pictures-source.c */ +-/* +- * Copyright (C) 2010 Intel, Inc +- * +- * 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, see . +- * +- * Author: Thomas Wood +- * +- */ +- +-#include +- +-#include "bg-pictures-source.h" +- +-#include "cc-background-grilo-miner.h" +-#include "cc-background-item.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-#define ATTRIBUTES G_FILE_ATTRIBUTE_STANDARD_NAME "," \ +- G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE "," \ +- G_FILE_ATTRIBUTE_TIME_MODIFIED +- +-struct _BgPicturesSource +-{ +- BgSource parent_instance; +- +- GCancellable *cancellable; +- +- CcBackgroundGriloMiner *grl_miner; +- +- GFileMonitor *picture_dir_monitor; +- GFileMonitor *cache_dir_monitor; +- +- GHashTable *known_items; +-}; +- +-G_DEFINE_TYPE (BgPicturesSource, bg_pictures_source, BG_TYPE_SOURCE) +- +-const char * const content_types[] = { +- "image/png", +- "image/jp2", +- "image/jpeg", +- "image/bmp", +- "image/svg+xml", +- "image/x-portable-anymap", +- NULL +-}; +- +-const char * const screenshot_types[] = { +- "image/png", +- NULL +-}; +- +-static char *bg_pictures_source_get_unique_filename (const char *uri); +- +-static void picture_opened_for_read (GObject *source_object, GAsyncResult *res, gpointer user_data); +- +-static void +-bg_pictures_source_dispose (GObject *object) +-{ +- BgPicturesSource *source = BG_PICTURES_SOURCE (object); +- +- if (source->cancellable) +- { +- g_cancellable_cancel (source->cancellable); +- g_clear_object (&source->cancellable); +- } +- +- g_clear_object (&source->grl_miner); +- +- G_OBJECT_CLASS (bg_pictures_source_parent_class)->dispose (object); +-} +- +-static void +-bg_pictures_source_finalize (GObject *object) +-{ +- BgPicturesSource *bg_source = BG_PICTURES_SOURCE (object); +- +- g_clear_pointer (&bg_source->known_items, g_hash_table_destroy); +- +- g_clear_object (&bg_source->picture_dir_monitor); +- g_clear_object (&bg_source->cache_dir_monitor); +- +- G_OBJECT_CLASS (bg_pictures_source_parent_class)->finalize (object); +-} +- +-static void +-bg_pictures_source_class_init (BgPicturesSourceClass *klass) +-{ +- GObjectClass *object_class = G_OBJECT_CLASS (klass); +- +- object_class->dispose = bg_pictures_source_dispose; +- object_class->finalize = bg_pictures_source_finalize; +-} +- +-static void +-remove_placeholder (BgPicturesSource *bg_source, +- CcBackgroundItem *item) +-{ +- GListStore *store; +- guint i; +- +- store = bg_source_get_liststore (BG_SOURCE (bg_source)); +- +- for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (store)); i++) +- { +- g_autoptr(CcBackgroundItem) item_n = NULL; +- +- item_n = g_list_model_get_item (G_LIST_MODEL (store), i); +- +- if (item_n == item) +- { +- g_list_store_remove (store, i); +- break; +- } +- } +-} +- +-static gboolean +-picture_needs_rotation (GdkPixbuf *pixbuf) +-{ +- const gchar *str; +- +- str = gdk_pixbuf_get_option (pixbuf, "orientation"); +- if (str == NULL) +- return FALSE; +- +- if (*str == '5' || *str == '6' || *str == '7' || *str == '8') +- return TRUE; +- +- return FALSE; +-} +- +-static GdkPixbuf * +-swap_rotated_pixbuf (GdkPixbuf *pixbuf) +-{ +- GdkPixbuf *tmp_pixbuf; +- +- tmp_pixbuf = gdk_pixbuf_apply_embedded_orientation (pixbuf); +- if (tmp_pixbuf == NULL) +- return pixbuf; +- +- g_object_unref (pixbuf); +- return tmp_pixbuf; +-} +- +-static int +-sort_func (gconstpointer a, +- gconstpointer b, +- gpointer user_data) +-{ +- CcBackgroundItem *item_a; +- CcBackgroundItem *item_b; +- guint64 modified_a; +- guint64 modified_b; +- int retval; +- +- item_a = (CcBackgroundItem *) a; +- item_b = (CcBackgroundItem *) b; +- modified_a = cc_background_item_get_modified (item_a); +- modified_b = cc_background_item_get_modified (item_b); +- +- retval = modified_b - modified_a; +- +- return retval; +-} +- +-static void +-picture_scaled (GObject *source_object, +- GAsyncResult *res, +- gpointer user_data) +-{ +- BgPicturesSource *bg_source; +- CcBackgroundItem *item; +- g_autoptr(GError) error = NULL; +- g_autoptr(GdkPixbuf) pixbuf = NULL; +- const char *software; +- const char *uri; +- GListStore *store; +- cairo_surface_t *surface = NULL; +- int scale_factor; +- gboolean rotation_applied; +- +- item = g_object_get_data (source_object, "item"); +- pixbuf = gdk_pixbuf_new_from_stream_finish (res, &error); +- if (pixbuf == NULL) +- { +- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- { +- g_warning ("Failed to load image: %s", error->message); +- remove_placeholder (BG_PICTURES_SOURCE (user_data), item); +- } +- +- return; +- } +- +- /* since we were not cancelled, we can now cast user_data +- * back to BgPicturesSource. +- */ +- bg_source = BG_PICTURES_SOURCE (user_data); +- store = bg_source_get_liststore (BG_SOURCE (bg_source)); +- uri = cc_background_item_get_uri (item); +- if (uri == NULL) +- uri = cc_background_item_get_source_url (item); +- +- /* Ignore screenshots */ +- software = gdk_pixbuf_get_option (pixbuf, "tEXt::Software"); +- if (software != NULL && +- g_str_equal (software, "gnome-screenshot")) +- { +- g_debug ("Ignored URL '%s' as it's a screenshot from gnome-screenshot", uri); +- remove_placeholder (BG_PICTURES_SOURCE (user_data), item); +- return; +- } +- +- /* Process embedded orientation */ +- rotation_applied = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item), "rotation-applied")); +- +- if (!rotation_applied && picture_needs_rotation (pixbuf)) +- { +- /* the width and height of pixbuf we requested are wrong for EXIF +- * orientations 5, 6, 7 and 8. the file has to be reloaded. */ +- g_autoptr(GFile) file = NULL; +- +- file = g_file_new_for_uri (uri); +- g_object_set_data (G_OBJECT (item), "needs-rotation", GINT_TO_POINTER (TRUE)); +- g_object_set_data_full (G_OBJECT (file), "item", g_object_ref (item), g_object_unref); +- g_file_read_async (G_FILE (file), G_PRIORITY_DEFAULT, +- bg_source->cancellable, +- picture_opened_for_read, bg_source); +- return; +- } +- +- pixbuf = swap_rotated_pixbuf (pixbuf); +- +- scale_factor = bg_source_get_scale_factor (BG_SOURCE (bg_source)); +- surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale_factor, NULL); +- cc_background_item_load (item, NULL); +- +- /* insert the item into the liststore */ +- g_list_store_insert_sorted (store, item, sort_func, bg_source); +- +- g_hash_table_insert (bg_source->known_items, +- bg_pictures_source_get_unique_filename (uri), +- GINT_TO_POINTER (TRUE)); +- +- g_clear_pointer (&surface, cairo_surface_destroy); +-} +- +-static void +-picture_opened_for_read (GObject *source_object, +- GAsyncResult *res, +- gpointer user_data) +-{ +- BgPicturesSource *bg_source; +- CcBackgroundItem *item; +- g_autoptr(GFileInputStream) stream = NULL; +- g_autoptr(GError) error = NULL; +- gint thumbnail_height; +- gint thumbnail_width; +- gboolean needs_rotation; +- +- item = g_object_get_data (source_object, "item"); +- stream = g_file_read_finish (G_FILE (source_object), res, &error); +- if (stream == NULL) +- { +- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- { +- g_autofree gchar *filename = g_file_get_path (G_FILE (source_object)); +- g_warning ("Failed to load picture '%s': %s", filename, error->message); +- remove_placeholder (BG_PICTURES_SOURCE (user_data), item); +- } +- +- return; +- } +- +- /* since we were not cancelled, we can now cast user_data +- * back to BgPicturesSource. +- */ +- bg_source = BG_PICTURES_SOURCE (user_data); +- +- needs_rotation = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item), "needs-rotation")); +- if (needs_rotation) +- { +- /* swap width and height for EXIF orientations that need it */ +- thumbnail_width = bg_source_get_thumbnail_height (BG_SOURCE (bg_source)); +- thumbnail_height = bg_source_get_thumbnail_width (BG_SOURCE (bg_source)); +- g_object_set_data (G_OBJECT (item), "rotation-applied", GINT_TO_POINTER (TRUE)); +- } +- else +- { +- thumbnail_width = bg_source_get_thumbnail_width (BG_SOURCE (bg_source)); +- thumbnail_height = bg_source_get_thumbnail_height (BG_SOURCE (bg_source)); +- } +- +- g_object_set_data_full (G_OBJECT (stream), "item", g_object_ref (item), g_object_unref); +- gdk_pixbuf_new_from_stream_at_scale_async (G_INPUT_STREAM (stream), +- thumbnail_width, thumbnail_height, +- TRUE, +- bg_source->cancellable, +- picture_scaled, bg_source); +-} +- +-static void +-picture_copied_for_read (GObject *source_object, +- GAsyncResult *res, +- gpointer user_data) +-{ +- BgPicturesSource *bg_source; +- CcBackgroundItem *item; +- g_autoptr(GError) error = NULL; +- GFile *thumbnail_file = G_FILE (source_object); +- GFile *native_file; +- +- if (!g_file_copy_finish (thumbnail_file, res, &error)) +- { +- if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- return; +- else if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) +- { +- g_autofree gchar *uri = NULL; +- +- uri = g_file_get_uri (thumbnail_file); +- g_warning ("Failed to download '%s': %s", uri, error->message); +- return; +- } +- } +- +- bg_source = BG_PICTURES_SOURCE (user_data); +- +- native_file = g_object_get_data (G_OBJECT (thumbnail_file), "native-file"); +- item = g_object_get_data (G_OBJECT (thumbnail_file), "item"); +- g_object_set_data_full (G_OBJECT (native_file), "item", g_object_ref (item), g_object_unref); +- g_file_read_async (native_file, +- G_PRIORITY_DEFAULT, +- bg_source->cancellable, +- picture_opened_for_read, +- bg_source); +-} +- +-static gboolean +-in_content_types (const char *content_type) +-{ +- guint i; +- for (i = 0; content_types[i]; i++) +- if (g_str_equal (content_types[i], content_type)) +- return TRUE; +- return FALSE; +-} +- +-static GFile * +-bg_pictures_source_get_cache_file (void) +-{ +- g_autofree gchar *path = NULL; +- GFile *file; +- +- path = bg_pictures_source_get_cache_path (); +- file = g_file_new_for_path (path); +- +- return file; +-} +- +-static gboolean +-add_single_file (BgPicturesSource *bg_source, +- GFile *file, +- const gchar *content_type, +- guint64 mtime) +-{ +- g_autoptr(CcBackgroundItem) item = NULL; +- CcBackgroundItemFlags flags = 0; +- g_autofree gchar *source_uri = NULL; +- g_autofree gchar *uri = NULL; +- gboolean needs_download; +- gboolean retval = FALSE; +- const gchar *pictures_path; +- g_autoptr(GFile) pictures_dir = NULL; +- g_autoptr(GFile) cache_dir = NULL; +- GrlMedia *media; +- +- /* find png and jpeg files */ +- if (!content_type) +- goto out; +- if (!in_content_types (content_type)) +- goto out; +- +- /* create a new CcBackgroundItem */ +- uri = g_file_get_uri (file); +- +- pictures_path = g_get_user_special_dir (G_USER_DIRECTORY_PICTURES); +- if (pictures_path == NULL) +- pictures_path = g_get_home_dir (); +- pictures_dir = g_file_new_for_path (pictures_path); +- cache_dir = bg_pictures_source_get_cache_file (); +- needs_download = !g_file_has_parent (file, pictures_dir) && +- !g_file_has_parent (file, cache_dir); +- +- if (!needs_download) +- { +- source_uri = g_strdup (uri); +- flags |= CC_BACKGROUND_ITEM_HAS_URI; +- } +- else +- { +- source_uri = g_steal_pointer (&uri); +- } +- +- item = cc_background_item_new (uri); +- flags |= CC_BACKGROUND_ITEM_HAS_SHADING | CC_BACKGROUND_ITEM_HAS_PLACEMENT; +- g_object_set (G_OBJECT (item), +- "flags", flags, +- "shading", G_DESKTOP_BACKGROUND_SHADING_SOLID, +- "placement", G_DESKTOP_BACKGROUND_STYLE_ZOOM, +- "modified", mtime, +- "needs-download", needs_download, +- "source-url", source_uri, +- NULL); +- +- media = g_object_get_data (G_OBJECT (file), "grl-media"); +- if (media == NULL) +- { +- g_object_set_data_full (G_OBJECT (file), "item", g_object_ref (item), g_object_unref); +- g_file_read_async (file, G_PRIORITY_DEFAULT, +- bg_source->cancellable, +- picture_opened_for_read, bg_source); +- } +- else +- { +- g_autoptr(GFile) native_file = NULL; +- g_autoptr(GFile) thumbnail_file = NULL; +- g_autofree gchar *native_dir = NULL; +- g_autofree gchar *native_path = NULL; +- const gchar *title; +- const gchar *thumbnail_uri; +- +- title = grl_media_get_title (media); +- g_object_set (G_OBJECT (item), "name", title, NULL); +- +- thumbnail_uri = grl_media_get_thumbnail (media); +- thumbnail_file = g_file_new_for_uri (thumbnail_uri); +- +- native_path = gnome_desktop_thumbnail_path_for_uri (source_uri, GNOME_DESKTOP_THUMBNAIL_SIZE_LARGE); +- native_file = g_file_new_for_path (native_path); +- +- native_dir = g_path_get_dirname (native_path); +- g_mkdir_with_parents (native_dir, USER_DIR_MODE); +- +- g_object_set_data_full (G_OBJECT (thumbnail_file), "item", g_object_ref (item), g_object_unref); +- g_object_set_data_full (G_OBJECT (thumbnail_file), +- "native-file", +- g_object_ref (native_file), +- g_object_unref); +- g_file_copy_async (thumbnail_file, +- native_file, +- G_FILE_COPY_ALL_METADATA, +- G_PRIORITY_DEFAULT, +- bg_source->cancellable, +- NULL, +- NULL, +- picture_copied_for_read, +- bg_source); +- } +- +- retval = TRUE; +- +- out: +- return retval; +-} +- +-static gboolean +-add_single_file_from_info (BgPicturesSource *bg_source, +- GFile *file, +- GFileInfo *info) +-{ +- const gchar *content_type; +- guint64 mtime; +- +- content_type = g_file_info_get_content_type (info); +- mtime = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED); +- return add_single_file (bg_source, file, content_type, mtime); +-} +- +-static gboolean +-add_single_file_from_media (BgPicturesSource *bg_source, +- GFile *file, +- GrlMedia *media) +-{ +- GDateTime *mtime; +- const gchar *content_type; +- gint64 mtime_unix; +- +- content_type = grl_media_get_mime (media); +- +- /* only GRL_METADATA_KEY_CREATION_DATE is implemented in the Flickr +- * plugin, GRL_METADATA_KEY_MODIFICATION_DATE is not +- */ +- mtime = grl_media_get_creation_date (media); +- if (!mtime) +- mtime = grl_media_get_modification_date (media); +- if (mtime) +- mtime_unix = g_date_time_to_unix (mtime); +- else +- mtime_unix = g_get_real_time () / G_USEC_PER_SEC; +- +- return add_single_file (bg_source, file, content_type, (guint64) mtime_unix); +-} +- +-gboolean +-bg_pictures_source_add (BgPicturesSource *bg_source, +- const char *uri, +- GtkTreeRowReference **ret_row_ref) +-{ +- g_autoptr(GFile) file = NULL; +- GFileInfo *info; +- gboolean retval; +- +- file = g_file_new_for_uri (uri); +- info = g_file_query_info (file, ATTRIBUTES, G_FILE_QUERY_INFO_NONE, NULL, NULL); +- if (info == NULL) +- return FALSE; +- +- retval = add_single_file_from_info (bg_source, file, info); +- +- return retval; +-} +- +-gboolean +-bg_pictures_source_remove (BgPicturesSource *bg_source, +- const char *uri) +-{ +- GListStore *store; +- gboolean retval; +- guint i; +- +- retval = FALSE; +- store = bg_source_get_liststore (BG_SOURCE (bg_source)); +- +- for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (store)); i++) +- { +- g_autoptr(CcBackgroundItem) tmp_item = NULL; +- const char *tmp_uri; +- +- tmp_item = g_list_model_get_item (G_LIST_MODEL (store), i); +- tmp_uri = cc_background_item_get_uri (tmp_item); +- if (g_str_equal (tmp_uri, uri)) +- { +- char *uuid; +- uuid = bg_pictures_source_get_unique_filename (uri); +- g_hash_table_insert (bg_source->known_items, +- uuid, NULL); +- +- g_list_store_remove (store, i); +- retval = TRUE; +- break; +- } +- } +- return retval; +-} +- +-static int +-file_sort_func (gconstpointer a, +- gconstpointer b) +-{ +- GFileInfo *file_a = G_FILE_INFO (a); +- GFileInfo *file_b = G_FILE_INFO (b); +- guint64 modified_a, modified_b; +- +- modified_a = g_file_info_get_attribute_uint64 (file_a, G_FILE_ATTRIBUTE_TIME_MODIFIED); +- +- modified_b = g_file_info_get_attribute_uint64 (file_b, G_FILE_ATTRIBUTE_TIME_MODIFIED); +- +- return modified_b - modified_a; +-} +- +-static void +-file_info_async_ready (GObject *source, +- GAsyncResult *res, +- gpointer user_data) +-{ +- BgPicturesSource *bg_source; +- GList *files, *l; +- g_autoptr(GError) err = NULL; +- GFile *parent; +- +- files = g_file_enumerator_next_files_finish (G_FILE_ENUMERATOR (source), +- res, +- &err); +- if (err) +- { +- if (!g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- g_warning ("Could not get pictures file information: %s", err->message); +- +- g_list_foreach (files, (GFunc) g_object_unref, NULL); +- g_list_free (files); +- return; +- } +- +- bg_source = BG_PICTURES_SOURCE (user_data); +- +- parent = g_file_enumerator_get_container (G_FILE_ENUMERATOR (source)); +- +- files = g_list_sort (files, file_sort_func); +- +- /* iterate over the available files */ +- for (l = files; l; l = g_list_next (l)) +- { +- GFileInfo *info = l->data; +- g_autoptr(GFile) file = NULL; +- +- file = g_file_get_child (parent, g_file_info_get_name (info)); +- +- add_single_file_from_info (bg_source, file, info); +- } +- +- g_list_foreach (files, (GFunc) g_object_unref, NULL); +- g_list_free (files); +-} +- +-static void +-dir_enum_async_ready (GObject *s, +- GAsyncResult *res, +- gpointer user_data) +-{ +- BgPicturesSource *source = (BgPicturesSource *) user_data; +- g_autoptr(GFileEnumerator) enumerator = NULL; +- g_autoptr(GError) err = NULL; +- +- enumerator = g_file_enumerate_children_finish (G_FILE (s), res, &err); +- +- if (err) +- { +- if (!g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- g_warning ("Could not fill pictures source: %s", err->message); +- return; +- } +- +- /* get the files */ +- g_file_enumerator_next_files_async (enumerator, +- G_MAXINT, +- G_PRIORITY_LOW, +- source->cancellable, +- file_info_async_ready, +- user_data); +-} +- +-char * +-bg_pictures_source_get_cache_path (void) +-{ +- return g_build_filename (g_get_user_cache_dir (), +- "gnome-control-center", +- "backgrounds", +- NULL); +-} +- +-static char * +-bg_pictures_source_get_unique_filename (const char *uri) +-{ +- g_autoptr(GChecksum) csum = NULL; +- char *ret; +- +- csum = g_checksum_new (G_CHECKSUM_SHA256); +- g_checksum_update (csum, (guchar *) uri, -1); +- ret = g_strdup (g_checksum_get_string (csum)); +- +- return ret; +-} +- +-char * +-bg_pictures_source_get_unique_path (const char *uri) +-{ +- g_autoptr(GFile) parent = NULL; +- g_autoptr(GFile) file = NULL; +- g_autofree gchar *cache_path = NULL; +- g_autofree gchar *filename = NULL; +- +- cache_path = bg_pictures_source_get_cache_path (); +- parent = g_file_new_for_path (cache_path); +- +- filename = bg_pictures_source_get_unique_filename (uri); +- file = g_file_get_child (parent, filename); +- +- return g_file_get_path (file); +-} +- +-gboolean +-bg_pictures_source_is_known (BgPicturesSource *bg_source, +- const char *uri) +-{ +- g_autofree gchar *uuid = NULL; +- +- uuid = bg_pictures_source_get_unique_filename (uri); +- +- return GPOINTER_TO_INT (g_hash_table_lookup (bg_source->known_items, uuid)); +-} +- +-static void +-file_info_ready (GObject *object, +- GAsyncResult *res, +- gpointer user_data) +-{ +- GFileInfo *info; +- GError *error = NULL; +- GFile *file = G_FILE (object); +- +- info = g_file_query_info_finish (file, res, &error); +- +- if (!info) +- { +- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- g_warning ("Problem looking up file info: %s", error->message); +- g_clear_error (&error); +- return; +- } +- +- add_single_file_from_info (BG_PICTURES_SOURCE (user_data), file, info); +-} +- +-static void +-file_added (GFile *file, +- BgPicturesSource *self) +-{ +- g_autofree gchar *uri = NULL; +- uri = g_file_get_uri (file); +- +- if (!bg_pictures_source_is_known (self, uri)) +- { +- g_file_query_info_async (file, +- ATTRIBUTES, +- G_FILE_QUERY_INFO_NONE, +- G_PRIORITY_LOW, +- NULL, +- file_info_ready, +- self); +- } +-} +- +-static void +-files_changed_cb (BgPicturesSource *self, +- GFile *file, +- GFile *other_file, +- GFileMonitorEvent event_type) +-{ +- g_autofree gchar *uri = NULL; +- +- switch (event_type) +- { +- case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT: +- file_added (file, self); +- break; +- +- case G_FILE_MONITOR_EVENT_DELETED: +- uri = g_file_get_uri (file); +- bg_pictures_source_remove (self, uri); +- break; +- +- default: +- return; +- } +-} +- +-static GFileMonitor * +-monitor_path (BgPicturesSource *self, +- const char *path) +-{ +- GFileMonitor *monitor; +- g_autoptr(GFile) dir = NULL; +- +- g_mkdir_with_parents (path, USER_DIR_MODE); +- +- dir = g_file_new_for_path (path); +- g_file_enumerate_children_async (dir, +- ATTRIBUTES, +- G_FILE_QUERY_INFO_NONE, +- G_PRIORITY_LOW, self->cancellable, +- dir_enum_async_ready, self); +- +- monitor = g_file_monitor_directory (dir, +- G_FILE_MONITOR_NONE, +- self->cancellable, +- NULL); +- +- if (monitor) +- g_signal_connect_object (monitor, +- "changed", +- G_CALLBACK (files_changed_cb), +- self, G_CONNECT_SWAPPED); +- +- return monitor; +-} +- +-static void +-media_found_cb (BgPicturesSource *self, GrlMedia *media) +-{ +- g_autoptr(GFile) file = NULL; +- const gchar *uri; +- +- uri = grl_media_get_url (media); +- file = g_file_new_for_uri (uri); +- g_object_set_data_full (G_OBJECT (file), "grl-media", g_object_ref (media), g_object_unref); +- add_single_file_from_media (self, file, media); +-} +- +-static void +-bg_pictures_source_init (BgPicturesSource *self) +-{ +- const gchar *pictures_path; +- g_autofree gchar *cache_path = NULL; +- +- self->cancellable = g_cancellable_new (); +- self->known_items = g_hash_table_new_full (g_str_hash, +- g_str_equal, +- (GDestroyNotify) g_free, +- NULL); +- +- pictures_path = g_get_user_special_dir (G_USER_DIRECTORY_PICTURES); +- if (pictures_path == NULL) +- pictures_path = g_get_home_dir (); +- +- self->picture_dir_monitor = monitor_path (self, pictures_path); +- +- cache_path = bg_pictures_source_get_cache_path (); +- self->cache_dir_monitor = monitor_path (self, cache_path); +- +- self->grl_miner = cc_background_grilo_miner_new (); +- g_signal_connect_object (self->grl_miner, "media-found", G_CALLBACK (media_found_cb), self, G_CONNECT_SWAPPED); +- cc_background_grilo_miner_start (self->grl_miner); +-} +- +-BgPicturesSource * +-bg_pictures_source_new (GtkWidget *widget) +-{ +- return g_object_new (BG_TYPE_PICTURES_SOURCE, "widget", widget, NULL); +-} +- +-const char * const * +-bg_pictures_get_support_content_types (void) +-{ +- return content_types; +-} +diff --git a/panels/background/bg-pictures-source.h b/panels/background/bg-pictures-source.h +deleted file mode 100644 +index f62cbe532e26..000000000000 +--- a/panels/background/bg-pictures-source.h ++++ /dev/null +@@ -1,46 +0,0 @@ +-/* bg-pictures-source.h */ +-/* +- * Copyright (C) 2010 Intel, Inc +- * +- * 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, see . +- * +- * Author: Thomas Wood +- * +- */ +- +-#pragma once +- +-#include +-#include "bg-source.h" +-#include "cc-background-item.h" +- +-G_BEGIN_DECLS +- +-#define BG_TYPE_PICTURES_SOURCE (bg_pictures_source_get_type ()) +-G_DECLARE_FINAL_TYPE (BgPicturesSource, bg_pictures_source, BG, PICTURES_SOURCE, BgSource) +- +-BgPicturesSource *bg_pictures_source_new (GtkWidget *widget); +-char *bg_pictures_source_get_cache_path (void); +-char *bg_pictures_source_get_unique_path(const char *uri); +-gboolean bg_pictures_source_add (BgPicturesSource *bg_source, +- const char *uri, +- GtkTreeRowReference **ret_row_ref); +-gboolean bg_pictures_source_remove (BgPicturesSource *bg_source, +- const char *uri); +-gboolean bg_pictures_source_is_known (BgPicturesSource *bg_source, +- const char *uri); +- +-const char * const * bg_pictures_get_support_content_types (void); +- +-G_END_DECLS +diff --git a/panels/background/cc-background-chooser.c b/panels/background/cc-background-chooser.c +index 6c8f56136271..04fd85c477aa 100644 +--- a/panels/background/cc-background-chooser.c ++++ b/panels/background/cc-background-chooser.c +@@ -25,7 +25,6 @@ + #include + + #include "bg-colors-source.h" +-#include "bg-pictures-source.h" + #include "bg-recent-source.h" + #include "bg-wallpapers-source.h" + #include "cc-background-chooser.h" +diff --git a/panels/background/cc-background-grilo-miner.c b/panels/background/cc-background-grilo-miner.c +deleted file mode 100644 +index 85c09daf6928..000000000000 +--- a/panels/background/cc-background-grilo-miner.c ++++ /dev/null +@@ -1,315 +0,0 @@ +-/* +- * Copyright (C) 2014 Red Hat, Inc. +- * +- * 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, see . +- */ +- +-#include +- +-#include +-#include +- +-#define GOA_API_IS_SUBJECT_TO_CHANGE +-#include +- +-#include "bg-pictures-source.h" +-#include "cc-background-grilo-miner.h" +- +-struct _CcBackgroundGriloMiner +-{ +- GObject parent_instance; +- +- GCancellable *cancellable; +- GList *accounts; +-}; +- +-G_DEFINE_TYPE (CcBackgroundGriloMiner, cc_background_grilo_miner, G_TYPE_OBJECT) +- +-enum +-{ +- MEDIA_FOUND, +- LAST_SIGNAL +-}; +- +-static guint signals[LAST_SIGNAL] = { 0 }; +- +-#define REMOTE_ITEM_COUNT 50 +- +-static gchar * +-get_grilo_id (GoaObject *goa_object) +-{ +- GoaAccount *account; +- +- account = goa_object_peek_account (goa_object); +- return g_strdup_printf ("grl-flickr-%s", goa_account_get_id (account)); +-} +- +-static void +-is_online_data_cached (GObject *object, +- GAsyncResult *res, +- gpointer user_data) +-{ +- CcBackgroundGriloMiner *self; +- GError *error = NULL; +- GFileInfo *info = NULL; +- GFile *cache_file = G_FILE (object); +- GrlMedia *media; +- const gchar *uri; +- +- info = g_file_query_info_finish (cache_file, res, &error); +- if (info == NULL) +- { +- if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- goto out; +- } +- +- self = CC_BACKGROUND_GRILO_MINER (user_data); +- +- media = g_object_get_data (G_OBJECT (cache_file), "grl-media"); +- uri = grl_media_get_url (media); +- +- if (info != NULL) +- { +- g_debug ("Ignored URL '%s' as it is already in the cache", uri); +- goto out; +- } +- +- g_signal_emit (self, signals[MEDIA_FOUND], 0, media); +- +- out: +- g_clear_object (&info); +- g_clear_error (&error); +-} +- +-static void +-searched_online_source (GrlSource *source, +- guint operation_id, +- GrlMedia *media, +- guint remaining, +- gpointer user_data, +- const GError *error) +-{ +- CcBackgroundGriloMiner *self = CC_BACKGROUND_GRILO_MINER (user_data); +- g_autoptr(GFile) cache_file = NULL; +- const gchar *uri; +- g_autofree gchar *cache_path = NULL; +- +- if (error != NULL) +- { +- const gchar *source_id; +- +- source_id = grl_source_get_id (source); +- g_warning ("Error searching %s: %s", source_id, error->message); +- grl_operation_cancel (operation_id); +- remaining = 0; +- goto out; +- } +- +- uri = grl_media_get_url (media); +- cache_path = bg_pictures_source_get_unique_path (uri); +- cache_file = g_file_new_for_path (cache_path); +- g_object_set_data_full (G_OBJECT (cache_file), "grl-media", media, g_object_unref); +- g_file_query_info_async (cache_file, +- G_FILE_ATTRIBUTE_STANDARD_TYPE, +- G_FILE_QUERY_INFO_NONE, +- G_PRIORITY_DEFAULT, +- self->cancellable, +- is_online_data_cached, +- self); +- +- out: +- if (remaining == 0) +- g_object_unref (self); +-} +- +-static void +-query_online_source (CcBackgroundGriloMiner *self, GrlSource *source) +-{ +- const GList *keys; +- GrlCaps *caps; +- GrlOperationOptions *options; +- +- keys = grl_source_supported_keys (source); +- caps = grl_source_get_caps (source, GRL_OP_BROWSE); +- options = grl_operation_options_new (caps); +- grl_operation_options_set_count (options, REMOTE_ITEM_COUNT); +- grl_operation_options_set_resolution_flags (options, GRL_RESOLVE_FAST_ONLY); +- grl_operation_options_set_type_filter (options, GRL_TYPE_FILTER_IMAGE); +- +- grl_source_search (source, NULL, keys, options, searched_online_source, g_object_ref (self)); +- g_object_unref (options); +-} +- +-static void +-add_online_source_cb (CcBackgroundGriloMiner *self, +- GrlSource *source) +-{ +- GList *l; +- gboolean found = FALSE; +- const gchar *source_id; +- +- source_id = grl_source_get_id (source); +- for (l = self->accounts; l != NULL && !found; l = l->next) +- { +- GoaObject *goa_object = GOA_OBJECT (l->data); +- g_autofree gchar *account_id = NULL; +- +- account_id = get_grilo_id (goa_object); +- if (g_strcmp0 (source_id, account_id) == 0) +- { +- query_online_source (self, source); +- found = TRUE; +- } +- } +-} +- +-static void +-client_async_ready (GObject *source, +- GAsyncResult *res, +- gpointer user_data) +-{ +- CcBackgroundGriloMiner *self; +- g_autoptr(GError) error = NULL; +- GList *accounts = NULL; +- GList *photo_accounts = NULL; +- GList *l; +- GoaClient *client = NULL; +- GrlRegistry *registry; +- +- client = goa_client_new_finish (res, &error); +- if (client == NULL) +- { +- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- g_warning ("Failed to create GoaClient: %s", error->message); +- goto out; +- } +- +- self = CC_BACKGROUND_GRILO_MINER (user_data); +- +- accounts = goa_client_get_accounts (client); +- for (l = accounts; l != NULL; l = l->next) +- { +- GoaObject *goa_object = GOA_OBJECT (l->data); +- GoaAccount *account; +- GoaPhotos *photos; +- const gchar *provider_type; +- +- account = goa_object_peek_account (goa_object); +- provider_type = goa_account_get_provider_type (account); +- +- photos = goa_object_peek_photos (goa_object); +- if (photos != NULL && g_strcmp0 (provider_type, "flickr") == 0) +- photo_accounts = g_list_prepend (photo_accounts, g_object_ref (goa_object)); +- } +- +- if (photo_accounts == NULL) +- goto out; +- +- registry = grl_registry_get_default (); +- +- for (l = photo_accounts; l != NULL; l = l->next) +- { +- GoaObject *goa_object = GOA_OBJECT (l->data); +- GrlSource *source; +- g_autofree gchar *account_id = NULL; +- +- account_id = get_grilo_id (goa_object); +- source = grl_registry_lookup_source (registry, account_id); +- if (source != NULL) +- query_online_source (self, source); +- } +- +- self->accounts = photo_accounts; +- photo_accounts = NULL; +- +- g_signal_connect_object (registry, "source-added", G_CALLBACK (add_online_source_cb), self, G_CONNECT_SWAPPED); +- +- out: +- g_list_free_full (photo_accounts, g_object_unref); +- g_list_free_full (accounts, g_object_unref); +- g_clear_object (&client); +-} +- +-static void +-setup_online_accounts (CcBackgroundGriloMiner *self) +-{ +- goa_client_new (self->cancellable, client_async_ready, self); +-} +- +-static void +-cc_background_grilo_miner_dispose (GObject *object) +-{ +- CcBackgroundGriloMiner *self = CC_BACKGROUND_GRILO_MINER (object); +- +- if (self->cancellable) +- { +- g_cancellable_cancel (self->cancellable); +- g_clear_object (&self->cancellable); +- } +- +- if (self->accounts) +- { +- g_list_free_full (self->accounts, g_object_unref); +- self->accounts = NULL; +- } +- +- G_OBJECT_CLASS (cc_background_grilo_miner_parent_class)->dispose (object); +-} +- +-static void +-cc_background_grilo_miner_init (CcBackgroundGriloMiner *self) +-{ +- self->cancellable = g_cancellable_new (); +-} +- +-static void +-cc_background_grilo_miner_class_init (CcBackgroundGriloMinerClass *klass) +-{ +- g_autoptr(GError) error = NULL; +- GObjectClass *object_class = G_OBJECT_CLASS (klass); +- GrlRegistry *registry; +- +- object_class->dispose = cc_background_grilo_miner_dispose; +- +- signals[MEDIA_FOUND] = g_signal_new ("media-found", +- G_TYPE_FROM_CLASS (klass), +- G_SIGNAL_RUN_LAST, +- 0, /* class_offset */ +- NULL, /* accumulator */ +- NULL, /* accu_data */ +- g_cclosure_marshal_VOID__OBJECT, +- G_TYPE_NONE, +- 1, +- GRL_TYPE_MEDIA); +- +- grl_init (NULL, NULL); +- registry = grl_registry_get_default (); +- +- error = NULL; +- if (!grl_registry_load_all_plugins (registry, FALSE, &error) || +- !grl_registry_activate_plugin_by_id (registry, "grl-flickr", &error)) +- g_warning ("%s", error->message); +-} +- +-CcBackgroundGriloMiner * +-cc_background_grilo_miner_new (void) +-{ +- return g_object_new (CC_TYPE_BACKGROUND_GRILO_MINER, NULL); +-} +- +-void +-cc_background_grilo_miner_start (CcBackgroundGriloMiner *self) +-{ +- setup_online_accounts (self); +-} +diff --git a/panels/background/cc-background-grilo-miner.h b/panels/background/cc-background-grilo-miner.h +deleted file mode 100644 +index b018129aeba5..000000000000 +--- a/panels/background/cc-background-grilo-miner.h ++++ /dev/null +@@ -1,31 +0,0 @@ +-/* +- * Copyright (C) 2014 Red Hat, Inc. +- * +- * 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, see . +- */ +- +-#pragma once +- +-#include +- +-G_BEGIN_DECLS +- +-#define CC_TYPE_BACKGROUND_GRILO_MINER (cc_background_grilo_miner_get_type ()) +-G_DECLARE_FINAL_TYPE (CcBackgroundGriloMiner, cc_background_grilo_miner, CC, BACKGROUND_GRILO_MINER, GObject); +- +-CcBackgroundGriloMiner *cc_background_grilo_miner_new (void); +- +-void cc_background_grilo_miner_start (CcBackgroundGriloMiner *self); +- +-G_END_DECLS +diff --git a/panels/background/cc-background-panel.c b/panels/background/cc-background-panel.c +index 29dedf1653ad..3e50f506b514 100644 +--- a/panels/background/cc-background-panel.c ++++ b/panels/background/cc-background-panel.c +@@ -35,8 +35,6 @@ + #include "cc-background-resources.h" + #include "cc-background-xml.h" + +-#include "bg-pictures-source.h" +- + #define WP_PATH_ID "org.gnome.desktop.background" + #define WP_LOCK_PATH_ID "org.gnome.desktop.screensaver" + #define WP_URI_KEY "picture-uri" +diff --git a/panels/background/meson.build b/panels/background/meson.build +index e9fa398d4ceb..eb5e9ec84625 100644 +--- a/panels/background/meson.build ++++ b/panels/background/meson.build +@@ -76,12 +76,10 @@ common_sources += gnome.compile_resources( + + sources = common_sources + files( + 'bg-colors-source.c', +- 'bg-pictures-source.c', + 'bg-recent-source.c', + 'bg-source.c', + 'bg-wallpapers-source.c', + 'cc-background-chooser.c', +- 'cc-background-grilo-miner.c', + 'cc-background-item.c', + 'cc-background-panel.c', + 'cc-background-preview.c', +@@ -91,10 +89,8 @@ sources = common_sources + files( + deps = common_deps + [ + gdk_pixbuf_dep, + gnome_desktop_dep, +- goa_dep, + libxml_dep, + dependency('cairo-gobject'), +- dependency('grilo-0.3', version: '>= 0.3.0') + ] + + cflags += [ +-- +2.30.2 + diff --git a/0001-timezone-use-blank-map.patch b/gnome-control-center-timezones.patch similarity index 92% rename from 0001-timezone-use-blank-map.patch rename to gnome-control-center-timezones.patch index 848f169..ed05278 100644 --- a/0001-timezone-use-blank-map.patch +++ b/gnome-control-center-timezones.patch @@ -1,4 +1,4 @@ -From a5d54996d4397e3fb69b0f64ef9083b1207e4b84 Mon Sep 17 00:00:00 2001 +From 84d87faeeceb5a133b9c1e9ac1b5141802d6f33d Mon Sep 17 00:00:00 2001 From: Jakub Steiner Date: Fri, 17 Jun 2022 23:41:22 +1000 Subject: [PATCH] timezone: use blank map @@ -20,10 +20,8 @@ Subject: [PATCH] timezone: use blank map panels/datetime/data/timezone_-3.5_dim.png | Bin 995 -> 206 bytes panels/datetime/data/timezone_-3.png | Bin 13615 -> 206 bytes panels/datetime/data/timezone_-3_dim.png | Bin 8773 -> 206 bytes - panels/datetime/data/timezone_-4.5.png | Bin 1900 -> 206 bytes - panels/datetime/data/timezone_-4.5_dim.png | Bin 1527 -> 206 bytes - panels/datetime/data/timezone_-4.png | Bin 15084 -> 206 bytes - panels/datetime/data/timezone_-4_dim.png | Bin 9836 -> 206 bytes + panels/datetime/data/timezone_-4.png | Bin 16851 -> 206 bytes + panels/datetime/data/timezone_-4_dim.png | Bin 9785 -> 206 bytes panels/datetime/data/timezone_-5.5.png | Bin 437 -> 206 bytes panels/datetime/data/timezone_-5.5_dim.png | Bin 859 -> 206 bytes panels/datetime/data/timezone_-5.png | Bin 19166 -> 206 bytes @@ -68,29 +66,27 @@ Subject: [PATCH] timezone: use blank map panels/datetime/data/timezone_4.5_dim.png | Bin 1385 -> 206 bytes panels/datetime/data/timezone_4.png | Bin 4954 -> 206 bytes panels/datetime/data/timezone_4_dim.png | Bin 2754 -> 206 bytes - panels/datetime/data/timezone_5.5.png | Bin 6099 -> 206 bytes - panels/datetime/data/timezone_5.5_dim.png | Bin 3405 -> 206 bytes + panels/datetime/data/timezone_5.5.png | Bin 5692 -> 206 bytes + panels/datetime/data/timezone_5.5_dim.png | Bin 3471 -> 206 bytes panels/datetime/data/timezone_5.75.png | Bin 2885 -> 206 bytes panels/datetime/data/timezone_5.75_dim.png | Bin 1596 -> 206 bytes panels/datetime/data/timezone_5.png | Bin 14539 -> 206 bytes panels/datetime/data/timezone_5_dim.png | Bin 8117 -> 206 bytes panels/datetime/data/timezone_6.5.png | Bin 1609 -> 206 bytes panels/datetime/data/timezone_6.5_dim.png | Bin 1675 -> 206 bytes - panels/datetime/data/timezone_6.png | Bin 8441 -> 206 bytes - panels/datetime/data/timezone_6_dim.png | Bin 4678 -> 206 bytes + panels/datetime/data/timezone_6.png | Bin 7654 -> 206 bytes + panels/datetime/data/timezone_6_dim.png | Bin 4584 -> 206 bytes panels/datetime/data/timezone_7.png | Bin 14412 -> 206 bytes panels/datetime/data/timezone_7_dim.png | Bin 7972 -> 206 bytes - panels/datetime/data/timezone_8.5.png | Bin 2069 -> 206 bytes - panels/datetime/data/timezone_8.5_dim.png | Bin 1177 -> 206 bytes panels/datetime/data/timezone_8.75.png | Bin 13993 -> 206 bytes panels/datetime/data/timezone_8.75_dim.png | Bin 7064 -> 206 bytes panels/datetime/data/timezone_8.png | Bin 16050 -> 206 bytes panels/datetime/data/timezone_8_dim.png | Bin 9378 -> 206 bytes panels/datetime/data/timezone_9.5.png | Bin 1959 -> 206 bytes panels/datetime/data/timezone_9.5_dim.png | Bin 1611 -> 206 bytes - panels/datetime/data/timezone_9.png | Bin 14381 -> 206 bytes - panels/datetime/data/timezone_9_dim.png | Bin 8377 -> 206 bytes - 85 files changed, 0 insertions(+), 0 deletions(-) + panels/datetime/data/timezone_9.png | Bin 14366 -> 206 bytes + panels/datetime/data/timezone_9_dim.png | Bin 8362 -> 206 bytes + 81 files changed, 0 insertions(+), 0 deletions(-) diff --git a/panels/datetime/data/bg.png b/panels/datetime/data/bg.png index 4180ee871b7b7d65529799d51db612b32830bf5a..5281bc4c5a29613a84f1093503d771da4eb78eeb 100644 @@ -10101,343 +10097,326 @@ z3Nt>NM~2%zCydu;;4Jp*(GR(Iqrt-bM7Y51&5%M^LKdIk8(-N_XPMpQX zd5oydw-@GkPtwbx18h(k6|?Ry=?;M{^J^h$j^H(v?PGj>YS6#d7XKQt|M$`V4+x3X Y3r4&QO{HxGe)IuSkWrN`e`6Z_AAcYn)c^nh -diff --git a/panels/datetime/data/timezone_-4.5.png b/panels/datetime/data/timezone_-4.5.png -index 9e3c1345915ed9ba7ed74c9a2d449f1b75499923..5b5bf77bd88b5f8a6b88fbaff2d32e049762cbbf 100644 -GIT binary patch -delta 154 -zcmaFEcaCv_gd8I?0|SHiljHk=6lZ})WHAE+-(e7DJf6QIWumKkAp>)OPl)UP|NoaC -zkv;)b#aI&L7tG-B>_!@pWAEwW7$PD0_FyBB!*F=P@8I(fSgwND#DIAW3u74=r#Blc -P1F80O^>bP0l+XkKC*LLU - -literal 1900 -zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV4TUp3>0zuvh*B~VlH;_4B_D5xc$)o0g%gC -z;1OBOz`(W$gc)7$8Uh&%k|nMYCBgY=CFO}lsSM@i<$9TU*~Q6;1*v-ZMd`EO*+>CR -z-4oyw;>vHq|NsAgAc=;|(p7;X>Y*}@#oAu=20l%Oo^|><(emaQYSEJ|!~4x6Ct8Gb -zn}zn6MNF`Wnq(P0*(!Fb6;LE$mTk;btGMabvD2($rdTD-u}fRvkh#P$ah5HRkucLH -zd9Gd39NX0S_CR*}LWi6c&Uvd`a+W)1Ep-C2b62|Lt#-*=;#9E4HGj1$P`r49d)6|i -zl8x@An?2GOIRF`Dn>~uwyOnP8DBI#$vCXS;hj;l_5Ch1q-0oGg+oyUL2!R+oy@6!i -zUfgpLAo0(f$Ie2+{`$R;? -z#V01Ersm}rl$KT2H8%E5oHBLVj2Sa$&7D7g;i4tWSFK*VZo`HxTek1mwRhjagNF_u -zIey~QsnZuPUb=GY_U$`&?%cco=<$>1FJ8TR_4f0Zuit$9stu`%t-FGgs>gT%}W$#Vgj3+`0 -zSQG>VI5=2Xn3xzF8yp-I6a+w+kPt*AiYg2t2B>*RsxX8Y;I_h5VG*)mg3H2e!EmAg -z2Zj(mJ<{MH!-x`!AQxk}8jBEyt4Z+4340zXt3)p5eeF_z7T=MJ2<+2w)`X!QUtk?azxJG!f)TBvX0v;TzZ#|Z;zW&~-tiVG< -zCvWGkH9y~_R4Y#?u)0>YrTY1DiN~u&d%w9U*v>!x>(={xx%|RUawpoh&3L(neg6~N -z35l!gQ@>u^R^lZ;d-CV%332Ae>lN0nRgZN(QK^vV{jGe>`D~lls_z@$oZr`^bAf#) -zf69-w{rBUxT+w|Ja`G9_fC(mFbLadrnS1y#n5;a3?{wBDjrlXPLGov&dr3`S -zzyEh-=3Soi6@n-3cghhOR6ojyaVamg3^n00^let1-4ALOE- -zd3V-o^B32Jl9eY+c{|mv?8`P&CeP@IKEr)?EDl`ZSkm|C)b-zeJZ2_LCwK8`{@~|8 -zOR*S{&hm%@BjLePEs|mkA&k7y;D8~7C2wE~A!TJ)0>l(5q)ER2zx@88T`yTLO*mZ* -QEG-#4UHx3vIVCg!0As{}FaQ7m - -diff --git a/panels/datetime/data/timezone_-4.5_dim.png b/panels/datetime/data/timezone_-4.5_dim.png -index 02d0f3bb63c4db806805bd9d0971bbac08d9945a..5b5bf77bd88b5f8a6b88fbaff2d32e049762cbbf 100644 -GIT binary patch -delta 160 -zcmey)eU5R0L_H%j0|SHiljHk=6lZ})WHAE+-(e7DJf6QI1t=(4;u=vBoS#-wo>-L1 -zP+nfHmzkGcoSayYs+V7sKKq@G6i^X!fKQ0)|NsA&ACW!*H=O_B$M6Ox7YNkKKx8U|{X=ba4!+xb^m~cScO81p9~L -z^hq;kWC+OzH*dWb64m8*mCJ5dMy+m_NfTF>hLTe0W8vKa!GT)})qj{JC~`Pn`n6<6 -zmg|)$(Z#d7c&^;Y$j<6eId<)e&!o<|g~6E%)YJ}bx%ch+?YlFp&Hiux@vi**&hKqN -zhl~PxgunqqT_MLiHbq%hf$`$0*UF!IU1I2)*TV5gNxD_Q$!z17zs2|Ed{d(GtfJK# -zm=5iq-v8wAdb_ecI^GIKV6 -zJowIA{+8*_HPiK1=D*wd{Odn~)}(bBrVfmXTh``PJpHgzDoeXGT(86E=tNn5yPw${ -z`giW!nD~EDQr@GMjg9j8Iq#-PFKCeYZdP_}-K=;2FUlXY*P5D@?;qAGaOj2p?(5sO -zK399frlD|rr}gUD`&Q2~pDno5U{~>ymazP9Y=dq4BW!}9wsZ&|3IzQ88uaqq^Gv|qpCx9Z$h -zP<3E@XmB($?q(d%;plH`YPN)XfsNbv&tFG!w3bXDdT4l}NGrTleW`DWqTlE4nX-B}No&ttsE;NFnCXX7;AtzVY;&;N6};QFqo -zJMC4Or_7Iy*f>r5$^BV1Hdk(yZvDilp>XEFhwA$Ltx~V0EA~{sHLje=;NE6BVaDyd -zlizyBZu{T+aqjKe*K%%}sR=Tq>AapBPLFId@OH=?{>Nl-)OPl)UP|NoaC -zkv;)b#aI&L7tG-B>_!@pWAEwW7$PD0_FyBB!*F=P@8I(fSgwND#DIAW3u74=r#Blc -P1F80O^>bP0l+XkKW#T4T +literal 206 +zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV4TUw3>5Kxa(q9K;wAW~8yjnaZ3Evq<%~*WhSkj~phpt?Nxd#3t -ztqqoYtS8`U9{+5-%!E6K4=cp)aeLWiNkjq{knIZHDfq!R{xk+R_)w?8tRC -zwf>BXjlW~0mAhA!t~c(md=ER}?NB$2wlCvqrD*mL<%f*oyh4wlGrKZ!uRL$|zSb`# -zYL=~-Vt`6(T!J1`1<5Hcz0KH8m@VMTJouL|h}^@M1deRU;i}-e=%G1YR%Aw+mD)&> -z;!=Nr*SoAj=l*-g{gztPc@;#Bxt)n8M*mbHQKt9 -zM77rm7Yks2*MOqD5V?1>Zo2&D6W8j8XWd?-4$F6g;;YxVqj9C;eyeXs)R+Ea*e;Sf -z-D_*B4me{d4+}cn?AI2U=Dv%-Do>*mAFx%5P28I2h3v1>wXG6a>{dlZy2L3qBEu&# -zvLY3hqfZYuxStt}7X8s0!sS=DvF~JNf?r!c%AJ{S%7IFOPx51;SL2*MO&`9Tq~tS# -z-^FyoG)xxV{#(H7G+xD7!TT3*Ai#Ea{%zFmovSo9vO7Utg&?+v;ANe{adVMvP6H1c -zRY(0Kk{iS0QFO0dtj{PtX!G0Pb}pIxPM(5!V`vZq7g02+C$HaFHEoKn0X7F<8kSft -z=dlfrmM=unP7^sOwvLu+T+=e!)*W$^Z1QoX`i`ox#_#;R_deoo)B90bhh-`-$X3K< -zwVv8}-VNFb8=YxNmI18;3kLkYU$^;jIcnb1mxto!wXYrBA*;QMco -z@gY(OVT{i9O{xrYyVx$|R7-R)VcOm2kCdvL8w1{O2kp;1wAit;y7QNgORCp5;Ll5ev4JKE3aswrpsh-6Nlj$M*{gcAc^i -zKYsrph&zXi;c|e}q2YBB8A8Nm%rXzPjd~s=PcgjRdTt(W5fK0H#v*4@gd^_iM?ZZu -zWmp_uH@kC9Uy$7bp-|J>f`R|zroilf}h%L>FC -zOeQW6;VvWT?x|?VgnIIAneDwrwUv#Xi}u$vGIAICbBh>qI;BM(QTa(LoL^CNY5?8#DP -zq=?cFqd6k4t+?MT=O5sF%@kXNl)~nI&=BR$>fH^53HD7H@apo0M|qLOSZf@>6ZPJ! -zNVgeXytVw=^(aT}bkyl^o3%;1$VQoxh!C(D09&X|oK|f=7hd@3>WVh=v#VdNz0}y; -zTDXcUW`Yy7=jm;&v1xfX^%MgR1bBCnU(zTG?1BJhl>vEZ< -zlTYTVv66>Rdx;T`KLI~l{#D22||p?k6xwsIuYLag?xY&j4$_wX!K;kn1L+v{sua583@T~_k5aYU9$9q -zAmu$k)b?J+zLt(Vh}j76Y-GcnO$-A#7Cws1n83b~*UO%ezp1gA@vNL-Wo48pY -z7c8=v!kbZS+bgyK>x={4tS;bA%r77!%$|-7A9|_75=+ucezQvyt;b2QfwgGCj`Htn -za*>U9B=qVB%_00ryf@Ih^L+ZVy@%w7@l1+^u+;LT$H~JPPHx7x-!>VjWo{3s1mX|S -zlM$@4#Qq9@w>)KM#!CWtMFAkk5v#FQq8PwBOh_8ZI0LP3p^9L$qqPN}24P?^pEK$| -zy}=?bc+*Jje2oOPMI_^M?FRq(I!VZKK6R59@uhOa>^x(@UBp(>C*Mjbr?}=^VdM>y -z1oH{{YAVXfwr=bj?xSyaViD3bX`mtPt(8Rbn1IO$xULd&!+!XJc$${aXMo{k1ZY@t*g -zEODH#aXasJ_BVS5009heAoxoOnF*^&P=~0R%b%CNWXynlYE0qE7F!;M^97CYUS%tus#jxrYC~?|7*pBDEUwJo^up8rEs60xM7H{; -z=_F^q<5_MLTh*e;OBc>c`oGL(4qM?tI9dCNcLmRFxT3xQPhZO>hwj0? -z)kT$eq#(Z_?n;upGi0qd*ZXdFf*~(0pSN7mjap+W1Iqm_u%mx4v2#a`=w9eB9p_$9 -zqdy+*!Y)+l|7l{RVzLkFOHu^FvYt)FQ+&!vpPm?m65ycNv)`lr&L0h89mJdqcO&M~ -z!oJTX>yZ;qNvnq2ve{XVIpS=Jr>V=nr8m%1WKz{%P8yzfi9xy1$xZ-T+h$y$TgFnr -zTpbx^+2{aFwV-yQuRR*~gpzsm2tPjb? -z@RF-f(g#ton*`ti=L2Ih3i1z}l9?UInIgn~_qR9HN -zvS$Yd-O5AW`Ecgt+TBvs_s_L54nBie6){_j^MqZ@KzszYZd78Gv -zV(go0j=M=r8^Lz(7UN2&{M^d7P}|4DoOw4DHc4GG3cC;K#y*WDwZek}a+%8PKKQVr -zVQAkt@jnqSn1W$U!YzX@?sCIKzS+;J-X&Qtk&=I^ekX`r6U3$&t4xm3G6 -z_AGZ4bhFWwL_i(lF7}Nw(Td=;v2MQiWkjZ_=W*|-N>q)@so_CS8C^>?wmQp=YZItu -zrbeLd8>q^*VaNdJS{D9>`B&s_1K&)o{`XD>;RdUA@=&EW1g1z2{8JsG^Kszi@-P#fi*X0VlY$2vs;KF!)&IhZU13$8 -z%`jdOZr5lK!n#a+f5~i4tuM>u2ChaIyGzqvpM6M;4b6OQBa0O)30VHFq(3_MC8I)ZE9H)_Qvf)?6aA6 -zy=8eCtWpLUV2pefIc{C?KE;%(uOtYM1=`eFqibj=p_04$2N8CVgB@8Kj}47D@lCLc -zmXTNEKe?5iFq10Ho^Ly8IUYORn)UAm^6tqv*C|1_&lIxtRV?XR^Cnvem*H-wyIqK5 -zjE!R0>+OA5#OSI#d-yA`%6rW7#=U|zjY6zT);Hh1t};3MwGer?W)%5_2u=u1AY%Xj -zu>?Chcb;ck8EQkickkWqB(U5%EKhZdvd(zxU7c~zg8P*2=@iK+uiPb#mDHwep@;RY -zrh=pI1vmo9ONBaxlk_;B-PW5r^qS8{#B6pm5lcl13R#iKr;qcqUkHFeK>hY7TmE2n -zu~hoORofKLW@^@D05Zt{rG*|v^J`Wrou4FN&e62fv6&Nd3hdv;&Cde$_Oeq^G06%5 -zyya^(k2@D)*K?891e)*m_}o_00)13nxD>FnJ&{kc%zMyMMS|26XlyjQSdn!K*Hytq -z0EU+98Gc7l_+N|%xWJ(YvBjo@xB4q6)m>hm*Ys7J -z0DOGtv!d13wq1AusyPBP8g|(rW|;$36Y?XJy=Ej!l-nHlxRqh821$(3=8*^;&E{ -zCu3scZTn1=&dWA8M7xz|!*|xIn>DJtOOY&z0Ti^Vd#Kiu=ciu2+#Gyu4RIEw$A1Rx -z-|P3rZv!X>+}Cwb6gXpOT%+5Tt(88h`CSUGIQ;fhsjkqZK$+QLcZy8%i45dv6g{ZDNov;qNUeAZasEu -zYc76slOa^Kt!BaO(R4L0pP9NOM7{DRGFD?Y=$A@2U+`KwjAgD=$FB3(irON#;_OZN -zHn$_#*UgNSAW$iSAy5e_YbSKB-3YjL?z?T1gPO8sD@T$S&wzj85;-JFj_r|&N7WM3Lnn>%0 -zTrN(!YJX?&#|!Pl%zf*eywYI#1fMgB0fiLZ0!qD-H%nxPgHV|T1&a@Y2;sZaSAHpR -z>x<7#=KtU>cE$%J2v?Z~adp*Sw#zC=88J1>V(|=P>n&jptJb>}`bm3qQwom3pgyFx -zOv3w`@lL#7vL*4Epr2o6-dtdfa9hG&NAKFWXX_;Kvjuvj8v{#x#x1uvtzMB+p!tCV -zweE^N)ms!<2U)oCghziM{a+yTpkcVH(u*9i_NoxMl$-|a;%`dL#+B`N;DR|^N+)e? -zi6WBux3GMc4k9R|B_~r!=F%RLZp4!PiwZQ(g;EN*Hod(8BE(Cqb+?0Ip>DxtF>x-g -zVg13;OE=SFYba+h30PM&t9Cg)Sx%2{a6D`o>!#G3W~FW@cKa;;#e-6$TE46*d*_`P -zDU43K<-&Gp_Sl|fIFo{WBNE(gVKY|+Y!fIuUAiHH=d0hnL}7W=b)mNY@sqn#{lOS{ -zk}MTRYrU*MP6M0;Jqjw!1G$R-*GyWaS}N_Z)|*Z9JYNY1NS(h7BN!TTmD3N4eoN~O -z>ho!b9&2f|{<*`~Wfe9~zT^sPQyNn*P;LQ!fZW$!FXDaQM5Pcr)XbqHx8KxZyrgHz -zM24aV_H#PAEY(C#XVcG1wUoT4y?`Zl!{L^HDiN2XKKs$DF}RS!pI1MwPHs0<<;p{c -zAT&&7e|#&(CW_?1oR++ZEh%;g&DttEJwpi-MS$wh{5tnD3waxt`P2#1DjK~F>C+#n -zIj*;u73njVZ^N)ZVBVaJ(!>Mb#NwS}bIHa+qO-aQ{i5almpGfW*hqv2r@OgNO5m}6 -z4|g8oLm{_h3@YxHQJ8(v;Zd)RDpEJ-CZwr)gf$%+YTFJFtp6MUnrfPk@0O~~O26Cp -z@tQ62qU#_%P>SF%pVVY`LBxEVdnEyWp|U01zG&gNYUCwUK| -z7h9X$UXiXxNpPe}%u+T>^s`JR{ft%ZoV3DORWF%(Sv#2?5SSsg%I%*}dPq36y8R-^ -zvQy%^u0$4Y9p*fA%E>V6xh(q!A*T`zfnziZ6puG0j?1ky=EMG!=-R?1KKwrIg)t9Q -z7zqB@Kl1G?!2vQI*RXQR<+cl{_Uh>S?WCAURb^hbkiH1d%J*?p=falo3u-Z*>t0&d -z>f8t~-d;8lhkmvJAF3NhrOlR<2*c=PPZiI%jeD{$6>MI^mDUn{`6X0R#>vh;%(EDZ -zAiEasXAcI?(0X`?&!iUHY2DgKLtNNQKmKLxZQ#(CRF^N)g~hFk4vgrN7xIuC9Sz6g -z(JFQXw?K(1igf1Zh0qcBn^AV&Yu8CM<>`+wgQ*M4Vxe`z)Hvt62b0A`;ZxN#3%M48 -zr^Ae@5qR9aM-=f? -z^4RnQPU}Xv#LndU2>uQMEJ)OyChpz}Q!KHH*VSQ!_=xZD!t>ETn;4=ymw7~ZWR^qnXqj}dy|2GHHP_MTK-0?rQevq%eU4)tx -zJWz+!{r|oT_v?TNT>M}9Pryc!=v9LyrI9JY^|OFa{oju=vx5!rZjbsucE_9vzy*fLz5EXg{wMrDNgg7s?WuZ2Gl? -zGASCbMNGO#sOa0O6R%lJa>8!K@r%+omAN=8ZYwi4 -ziblB;1B>sF9X4IUn+=wAFEgr5HR;>>aIQSjur@?~D)(RU@k1%DwGHquH2Ls8XLXYt -zUMAOJ3-QW6h{9M{9p@Ru7=)%&t4O9%S4)}g>=GHh#lVZiB2M$fSg!u!efahZbbMEC -zTk%EMph7eEgf04hQuW2%ujQCar%}K146xljIKtefER@G&?PdDHYF_No->y)DE<`;j -zt(tF;1f6k3nbEAydk$HO@@vl+@8rP@Hogy_56}X{fT|%ct4!(nHGfn0z%CLA2MbZ4 -zo#<^}hF^$;ICaM`Z(}F%U))qD^v{}i%wgx-6ztD5N3VCQy# -zcI)9FZMW4Qtnh9jUZf)dn5uc~;#BLN3EoCpmu0NzRdd3rQ#It#$-RK0a{Zrs11{-^ -zynP-#*AgH!ElHD$4u=DPDmFr|NU2BOkSw}+$2~>eN%@G`d318;>?d=FqwVG4U>-TF -z@s?yDR|ZI#3lp^g9+Sy_UTm2!!-v}oO#7>P?38c#obBLiyV@N%b^aPmNI&~0hICwa -za>Mi<43hZ+Aj5m91pt=;_+Q^52G)HiBj2bl--d;l2ABx{#Bcah&uJmP -zeA&~j0y|{x!qP3q;q7IjPh8|}-BaeDv&Zuts9hOM=jYdTKXar{(@9I67;iMh4VhJW -z?*n}hBb@I0fi^mYO>#~u9}&Lj52}PFS-M#@^+YYN0IXx0Ycb%uU9m0>F97BR?jDko -zy)pVT+6F-H0Xlc`c@EHsu$~-hE!#kn4`*9fZDY9Al_%8}BOr0j3^k{U!fjZmqX5vk -zwPQzX&!()8GeHVsOWef5G8g*X*})0IrirhTS?E7C&)GdN`%WXv`sh*}3uTw5_wh|~ -zXO?^tf{lOAu5%3cclK%7PA_-2a~B_N?X<%eeLXgW!oCTn$sKyRW0U03C{Z(624lr8 -z?r1H=g;dX7_$3b|$+=n;)=|7bZ=P;D>)_sd3Iw+6p0Puo=zdPk&-2=o>QUKRrll-) -z{U)3(0`h74zbwwK{c|fr0B}#?$lKrPzjKv$m500GJR++wuBH}?|ED?62?S%Hq~MT0 -zkP^gB>1+NY`QV}9YUJO&ehr+}?W{t~g2J~2=X+^FVqYbwmbVhf}wQq$+3Cl1A(1)R1lQ3sd1PFO(qEjgFuP -zZqa(eMm;aDs47B^X2$^Az9zISKZa%ujQDex3_noKf>LkvZ9j5TvwwFkU%_g0r9L;$ -zxf#^$|#jBM${m4*p -z?hqW~AO`1em*7!wh;P(P{>@@zI6yG##oUmV??u-@AQ`4Uh>z- -zIhReAQX1A%ml1RGsjS-NGQQ@!DM}=}aJN%__a~A|zoI9X-{gc(e^cS-Zvm{~`gw-G -ze)O1K&;jxg3RnO~(-qA&)3SjEf|dP^mDl;JF_+(_3}jgQ%$0V~OYz9{B*QEK|7P3x -zsnahsHVsf@T}009`{#VrlLjV4UW*`Js(UZJuvT@^63#>h;tmZHUny@Mbkiu_VA9zWlVwD#~(cQZ=2l>LxnDN!uk$@SdM -z06fGqbJ6RYtjo1K$w9Hzm4 -zC;A{{Y5jfYphM_E06<>@`on)LN04g@nEi$ro|aE4e|&7bB|5^}gpUVIX-f*`))p{U?o{vplX!$M!2vEV)@{aww3o&+(jK>gCzp=+&*Y(a59 -z>>_u%jbVX_g%Kg$i1P4{NBtE|)ApVqan%B~+lGmy%p&D|Y$Z=pej9g5O_~iI9)!dz -z$r*Wd9O9d`f$LqIOsAOR&Tg-qbeb=qvF~fA4GdHam{skr(dS-?g7(38zihZu#v9vEymx> -zlk&aV$c9sf9)1U;RY$^vfE3ulvTH8rDHwnp!{L;m*K5R_g`_~pl=KipVWkM=nTxpw -z$rj2jo_cFdK>tdP*^*-{cl7#|2{sECopOCBXs! -z1w_UL{6CM86}kGK?0=zzrBjclH``Fc%3eD1X#-7D07+=+`JaBRk9HP%22`r{_ -zm?tyD5u4S3)6{KfI)}mmwV`2r(W3U5r&a(aPqsdZZZQTWb&dik0@V4AlQiOt3%0a( -z&M^121yIkm1BvBga{dZ5Y0v>Xe--5Gwwt)c8^#PcHejLm500`6Y@2HM;|ehusz-iQ -z;A{9AZLvqxfe|NrzeNr24su4VE@Q6W@Hy5vHCi+-XlEP_xS1bv&-&cpvBF8lDFE{` -z^~u)hy1_C}^W&kE6KO$bF^Q5?y7yMM04Qz}X2vGt<%=u0&j2qJVtmcY5zeZ2^PVIv -zx#d=Q+kFr%C-_p)jB>l2`}5Hlm3HN?61XvH!ot^KO>Nf(h-L-IdO(2 -zwn_~m22E{KlwSmj|z(vr&*V~Wz_EzRnLKz7-3po@FnA?_3iGrNNb7PYzVEn -z>+Tv2nS`}xo^5L4kK@+XM_*J#qjsEi)EL@fD8cA>(#N6z#SNg+DBIuq5sYBA;1q(^ -zCjM#LL+w0^Qz=cFiV(MLwpT}NN6e8l@@~e#AaQl_(%;u~I|&uSDxQDl=Y;e)%nsE2 -z5a^I?Zt!;C&7#HkUNj|?;_I>c6>IJbP5${rzxf!UeCCUm&!30YoEJiu -z-W-0_9O#<(W!#^-qV&Md-&`pfkKcI|zi=+Da`Pr6yNmC(AMTr0pHAZcT4TgW&Sdm= -zu$4THp$tAdm6D^u9x@?f{6KV{Pt1K#Q+{HF1LiS?=m_$A)>C-^!*#Eyi9690K3UD1 -zqJ-7Hb#!pL#OlYZes5Y?4S}vHRkZeyMQPU2Rm`-h-yDkH2WY#~-lX-Go&4E_yfm); -zZ|?LfzEpZLuOIrR;B48!yNBob<(3&rSgE*kxaCb@xPwYUFcdNejFC=%4pWLUt8-~Q -z9;}iX5^)kFb=56UsCB3S;Tbn#lGr08_XKQMNVr|ed#7Xs)0}vH`98zLIGBa<@mvt; -zKWxhM><8Uih_R0t19zQ*5jXQU&kAU3hd=WNyGE}SL=z0Fe{yBkAm&Iwy#7lViWMVt -z;Y&Z0InK9+x`x6YoGVJV+pB4q2vwlG5M7IXOX8F?d)^E1$<;g4SjzK$|~> -zB1RNjFhiOa7fGRfDC>GU$`;SACx`$~zeNK6TDsib3t?Cm>&TrDoDwdK<{6~kKf&%y -zAMee;5LeAnYc0Kbsk_rXAAnKjO4W0y^S&$s+KnIfUZXtgGF9U`I#r7Q=YN!UDQZT^ -z;q-`KdPL*97i$5+Srxzd3{ziKQjz|f%b9hqGn4)fHSnS|X58t(wRpRz4`+`Z7@iCY -zZ`aw70gix%vBQQg2LEOrJR2FM^@7n)#c(4Tm@aIdDAsnS*ioHi6Fk;00=)l;MV{>`1PQoBUm6b5h7fI;F=#)0X7Qesn|fmm_l -zEB#QP>ng1N{tfQ~kpAq~b1}BVUM+UYVdKxA48tg2IzFj|jBwORQgfV7#P%P3KtAOm -zA~KXE7T-NCcX_xWXNvmVEgn(=pg8S{o;Sbsh=fErnw8SfrTE?7FTub500Tt%j^kC> -zY!pkz+8EfSmuZb&By&{V|8I!}X*dnScw)Ai9rI7aM4bk`myh;xFaCmJ#FJ21!C)94 -zu-IpfjRC`SIOq1mTQ)t4wfh8QwjiQLb=1!Tr&I$T6&%f -z2XZ}z=I#S=Hws{WdG0$s5f$=|46hR$jzS*B%Y0LJu~a(2-K3Rx6>3)NPYmtITVh@V -zFSc9XT+VOZ?tus%XNbm)&(K`djaGh)=P_F|Ley*Sv|&e)_QQa?`<;05ax~3R6-Y~0 -zy-$-&CRuBdEKDXL1z`A%=ib#EYKpG_i@_DA0|%zi4gLd1K{p -zW*zSy)=^Z&H*vUSZyN%0=IA36f-1P4VLOY#;T1 -z4eG2eoj}bm14HK9pd3yrXA_^`q|K^YBcW`rA^jG-i!{%BNK#YMQ<xQQS0e5SzdPr3@ycoXgzEb%#9+8uOb3tr-#zpmq*+xGEfeX!km!O16z -zPCUHw)!*c?mtHGH$BrkFV<2w>Q9=4_q;h-Tc0YuhjDvFcsLngP8h*8=b=$mE=G5Qn -zb0b5C^)Y`Oc&Zh>RJBYo^xOVFF?R5R`T7W22`F0Fy?!MXbDRbbW&H>yKR}~5{M`t! -zLR)@rQJ>m~qD;I?UrU_0KT_z%kSnmyUrXh|@#3*$*Z9-D-;``-Kudq>lez!t$41>*|6x#Q&@6#b<2EVyO@Sdf -zIV`*jsp!d%v82^~G~>LgP>B;wAfuJ|2=ph1k3-~>Wn75W-g3^M9EO}5_!KGvzgsDI -zffPs289)7k)ph#t+^k*d{y}tv=5Oqf>zt>ntGkQbg35^|&(b3;(cbLO=b<@Cgf|0i -z8OW~~bS7ZSm~&LbqT~Qc9gp%n(eBGa4*G01FN9^gkLxoeQQ(=FZ$>Z2lgMlxiP$Lo -z@l*Exag+{f2PVz808;R)ru1<6@}JN&tvD;BppS!!c7F~oWTYrH=sB26s64f*1C$!w -zz}ulIfx>c@zLPTXe(Hh}H9b7gIId7)SmU;#JB_DI@`*%Y*7~`rLtAg7zw?_x^~e0i -z>K>6L^p5k5wTi&+V-C|&pY%`c1smOt4^7X!HW -zu$b=qLH>=90KbW7^IX7oc-jaAYhaW1i{Z<>oS6-7`pxi|-~lD?ixPw6UAN9)Kexlq -z1Gsa{$n3NCH)c>-2sU+B8m{)aVw@m7;DDM$N9u|aPzd!t>~N|`Zb_v3=>pF`#VMt!RZG++{g(QM -zw(7V=)~STuvj_!Y?gOVsSKMw+bJ9&Gi|af#G-b$@QmT6^s!*KZO -zZ3g_++g5UfFQ{mo3@y9vJ<|9f&#B($dmrZ{YTjquQ7f1t -zgqt0nX6I#~M{ZwJ&ambWW^%Qf@B*`}HD`eR<)szyuyIYfg+^GC_Su2BCc)*v+(n<8 -zwDJ=>9#h@XW*9KHlPh)q>H*VUUa573b*IC}2{|XJ19OBk;X#`zJ~6IiYnNz{S~B&o -z%Kdd8!du<%mIa07i_|f!+1FQ*3)@CN)|^uDu>EKNYz$hC)@k(qS0mtPZ+m*=TY)-s -z>(AC1*0&-TnE%o>DsUR+3Oe^Ugp|rGy4GO7c|niCn>$XhS99v$K=jQq`Ok3Sx-M(Z -zRVU@*{p%QvbZq2t#vbdQm6;*xIh|Be67l_cQqAXChY81q*G)fb#+T3?g|mCk%O78c -zU$hz38a3?v^Q)YtBv_Rt_Ead0!w04p!;tO|Jr0iqpNEIBw#hnBx>{7v=EqgN=iL;g -zM?~Ig0kLF7eD>kHHkW#EA<3aKF4dy|5chWNAH3NiOYLT1WuRRd_eYsj&uJBB{kA3e -zC8+q}8%8;rhXkbWqcRII>Y|FdcGWuiXXw6`p6fTW(~aaUjWFrsAb8F)?h3SMW){pb -ze@fv?@oy^Al7(uN19>z5^)g#r<^#jpMSloOMn|b4n_pjSCa&EGfQD~Z@7S^?xJGa3T +zTSm20EUaf((qgYwT}Ia?oL%$=V$f&q>z-A?X{nQeG&&o#UtSJp_!2*R_1LhFHd6XS +z7)miQ#+9S(ML2KF59t_O>5pHz?j$$AqHp>59jC&1BnsBHvc9|rN4s6H)8dmBz3ytA +z>T$Gf77!S9KdLMBL^%)YLz(i+u}D3?M~@emxHVvBge;Jzc(N3*peGNg^BseNv9Lb& +z8Yo={3&gs4|NpknK4Sj9YO$`}#Qfubws)Rko?NxBu&#l>LE9~uEj9IO^AmS%E%xBo +zeAUiJgl#VxB`l}2o>Qfi=Vv{@!urF5FM}0?$3%f6ae~i8xFGLaeUP5=#n9xZlK{{C +zy=cXRCzNLEJM$Wy*|E-nffiuq>vujn($-aQCW2vFK!B^|293}!3l?%uZ +zQ9U&oVhnGSP?c+PeNwG{@iE4lC-+wS+HIEQsOHN!?}jUYO@XS3KL?$?wd)7BwNFHa8( +z6-m9=3S18`Xl-anB_Eq@IQZ%RqI@t)S*C0-B|^Zp7D^b}LIkOpgm4rmd#+kL?^Ej6 +zt3&1Q0BNOuCcAIo;e)3lR^~7DZq6t2*1qgwXT^*t(`kD6uI~A4guk)xsIzA1#tliM +z8~GF|u#N>bR%!9$-T1m!Mnc1NDo|L0&}16{ss7p2kO=IrIwJ#B)y3BF{#ODlEcTrG +zP4*ktgTDVh7I$U!wvCywamPcV2HkYP}4i;#uNWazrNzFt42Xn^NaWFGx^{&Z!yHfjq<>CUrXM-JPS9$x~K +z&?~{~1pD9oBjoFIcrq(&-=OBz!p{~|E+U9Ow)W38n(2 +zN~S@*=|%bzH^z_taE`W%?dC2;+_qTkEau2o-8?ryPGDYF@*7MLbQ+Y!Fmo +zFWYgCj@dR)N`Qjg;r1B3CAHQMU1n9~+{mCPK|tKk!beZVN+_+&eQC2>!6pw3C0m32 +z@LP|yozQFE$HM{5^XStN_uC=09Iw(rC-~*O5%SgVlTmwO0?s0C)BP-tV8ud +z+Ac*MN6zf2cUDc(Tj}!jPnFaay3Fp#`0-BV=R2rbPMb+)*-z;+-n#S`liZoS|Ku!A +z3Q0m`(^GCJSMR0Hwlmnl^UfwmCl{CW`?X6Kfd$`xg@sFLB2f0g?_gfTpRWE*8C<11 +zp6a;=5Rava(shF;w;sG3MYS;32~&tTH+ +z+Oy{CB2j5{gS&3>M$dscQ#fHGyOAeLt2XbM#|=TCypMV3p8gQ0kG*%Fx^jnkcU;tN +zpz$~pI*!K%60N89s++Y}Zw`PR0}r{m@taZEb(Uyp9|7?)A88sVzsJ7ezd@PesFKm +zP09M-+|Pco$GD!YnTId&iL7?@J|%SIh^j%I*xS(*ZI#>=Rh7}} +z4*z=%(-r3O$xvCe^t~1rRjny!wx+OFVa0h;;W17QHWpSl$@u46xT!g}+R=&iHQV*V +z{1SR5smvNOxl&U5izHH&hB-(DzndrNXBroKeVvVQAq2{=FL7Zr7(1CdE?>%8Us(@( +z#tKOisO^96ZF|>u%C6R-M`@Ns<+i&ZxUBS +z;NdmF0}LN6ExE_K1^YUwDYE`lQ9|j)2g@#R6(l-}4^(nezb)wh`*$5XVX{nX>afWq +z0Xx`pbK6>Ymt74+osl5%7f17mA{z&?$#jxSu`47_%!?~*^fDSzY9s@Z-AX-sYlDQ0cL89D0AQtbH6KPSm0ozA +zwT#lXTKYBqa8NdVqF_4=Cx$WT#Ekx>3X>rMRuTQX!Z6B|GX^-v^IXMY=_pfBs +zAG29l)T|&mHwR=!&V`_M(&?qD*@*KPRb{%NQ}{(y<^{A%MHK{7fa3Tw@r(%jW>dC9 +zJ1?zgQ4fDCJPmoLqKnF*&*sQgM4un?y-2OPj)i+s{R&TFDIYsHAE0?mEQpWT +zm||+|a>gLDL3>=SmQ3M^Wh=6+oY_)BeV)^=tanFQ83C5NxjR2%rCPScd6`=`CC=4@xPf7+fgJRvWyT3-wxecgX +z1+3;(Y5Lg+_gNsGU&FwYJqvuKSk)Ax^YY9W(1GXa{e@+NcXI&$X?ghJ)ko&JgJ@$r +zrVNrH=Bo9munZzc)vNUeJ;`tGei2^xyNW73NbAvm9;P>;+MLrKz8ys|{V^2=?;usw +zym8(5Ipm#ZyG=!q%~0I~@;TZqwBFb3RI&dV>KZL^903By`#VO +zBb@{>mef`l%hG0}n2OrconguHVij=_k~RSg*96hL^G!U#Jlo}jZA~yO_8K4LG$Wz9d{i!%n1p{P)t9*X$?WrBX*RY +zU%lV53`RpO+@*+q>H-&s!icz8q4Ze^q8&2_Btv?K#frt8#6W`bGEjM)hMyAV*QUBwIlTW9L%M?NxZ$!K0vN;%yV)CeLj0S|0huRd$-8!~<=5{J-QCwn +zbniVxJr%e160YN#o#}%ag9`V0^Yqzweq%#|{dM-}U!n5r4j4rfTQyv7`86ImL0L8Z +zjZVa1tnFR(?Q&RpNX=oYWJv8El9JMUL4#mao%Y?!-D3iV^cu{t`v8^1-(`x5UT~FL +z&5pXJI(9oy8JojM0{xTAgArCWOGkBIpp=A!PQQRMQ++|~AmyuhyUy>lT(sY<1>~PXn +zZxPL@Kh@}}Zl+JN?NUW9lma2M&Zx^>0-z)=QZ>7w;V9q8(F=SfCYGlffuUm(MD-q6 +zM*o!2s)Z#X@@XH6u5C{4HW_4jW(toQN#QzH{GPz(pn8uayqZOGqHH)UfD=+vnQ92oOC(ckN18`gf3~{76vP!!O@7 +z8_>4L!Po;g25TzM-ce~oQR_}+G>sE%PqonXJ&x=8XEh3x9TWxjX{l%3!v;_U>OkWW +zk1o3;gNd>$P_6b)Fp_NSL2iw*Mu+kR9c}*45~msW%!x&&36bYRXw{KY^e_ZXG@ubJ +zSDB~8Fh`L;VYBck^WF+E&xZy` +z^N*E6W}|BR!(e=Q;X2RVJ;>@`@X3p`qNhM7!FfI3KKNPu|^~1Vf(1auB?uVs$^b-C-&+^}3 +z9U~@D;zLmyJUz~DOexK*2&X{*7jsVSDD{HnADK)~^H&^?X}|i;otkhKIGHNA@}b&c0hv2t+j@b*A}SFNP(q7S6oEuf +zMBQAvd3sxlgxUW(xUoQbzdm3hlJ%`dW7hU7%aB~(0C%29V24&=wJtAb@yI8$Zqm^M +zHMwyRrt$kV6C>3uf#wl5dVI^0mOEQC-0BHw_sd7T`Vq|L+FA@$`T_v+5;z!I|4znu +zWoHX)$#src}h2>+^=n1G@ukfdunwf=w*mT4Ic7# +z6fYMAL`$XK3Dq_f$x-%PB(WFx1rV8hqm`*DeFUb~xgrO75MtmVh2*ng9S{1lJ8)Y-2hzAD6849n``)Wp;r +zUt;kdv|2X?|J{tzhHWA5!jO}%PVrU8Y7I@Y0$DoG;{6`4t?tDH@g9k{jK*4UO|sso +zNKS{fWxSs6!w1!%vynd_-!GNa!_9M&N;XQq2nte)RGfSXp%|y|D#>$mHWD8=r%C>F +zYSnvNaS8O-3IMq|E`5607cg4i) +z&97s9Tx-I;!yf!%ZXlVuYXC|lXaLeF=H}Ksu;I%*yM1*^KY?UeOC0DNnB=db-V~bf +zJN(Fi=cWQ8^Kz|Ux>d`DI6b?o$njD|HNJ8$gT0>=VY2^*L6+*d8?9C4a9A-czuZJe +zT~5&~FNVu|1Rf%cs5%^jbC<@+TtUK_rN3B^nQCUJ-fNY&0EUErQ%pG9$(hi}IMZeb +z&jw`t2R9}^H+@>Sn_VdGt17ww_3xT*2DZlcEz}*}O996BL`~J~H3n$5D73It*Hn21 +zj7{hYea-C-sG)^uF~=NJxiq6ER^ib8k$UOtr9Z +zrRu*tty&EM@rXh3*?t#@Z>KMmme+O~*{qL`uCI+<0ZRn7V>nk}L%z>>n#3LSFb;oo^*?eVjNOZML9SQw}YFxb$X> +z$uc42?c9Tjl^8CCYNI|*WVP#1NLL*mkPrP#8RBcQ)jwp9<1q7kK~Pj(v&8$eSsY#3 +z72)N)^VGyDGq-7>3MHGnQ9VsfA}2E8ew}7g96z&S>W~6<^WIoSm(~t)4CkA^#olqO +zY!*Eh79R;8{WW%;MaWCjolc?!QAbxfqm`7EE+9zvO^b;kw4fhyhL}+6q8cwwQ4Y@^GuJQPCHB-NAeFTSEJmNftW@&mj?mYs+_o +zd`nNjO|PdtvALoTEk +zdd7Tzm_Y)e9kqxvDJVrMH5Qfumkkav`)yqx)<}qjemu!v6K!a(wip9VM&o^?&^F{B +zO~&pQ9-2}4jc*x;Z95(RG4Vc^y-{o8KA!lTKn+mSIYNZNHKWkeT3_Y%qKNJ8!5@-u +zEdDGZb{k)7m_nipX$YNLEFNQ6|BQs{f3dT>LirxL# +z8*QdI?1#YftX--Y-Bs|KTqvn+@ESmvLXj3pkQ3UT6}?cBA{jiD0F$wl7aR2}p7n<- +zYvT1)BQwi8_07o@*bf0gWE}j6WwadYUA03^G8N%oXd4^zLr&Wi_br*P>oLK-Fk3+r +zzK9uz97KGZkW-PtL~s{k%DZZ_`1VaOm6DwBh;k9<{qa +zEnQ2K9NqDT#(W6!#cvCMOtC7dSF~O&1R81u0;w24xtZg$)#!{)F+F%o|>> +zqn$!^MZ5Y)auG`&>`fR)6;MyBNQPY<^lwToFF>Ai)$@ +z=I&x%8Raii{YMA;e#e9AeWkWQZ1iLi?Vz)mTby@kx#OHL`Op0;uV6~^6s}XQp3;v> +z`k5$|wVbGtadDuz8#Zx+r3ZiSsmnoj-CMQ;|8e#5u5&jCA-Tqh0pMx69Hr#09RpgI{oIGSN`>0hQP0(^`b#&SrO-dR +z#DWW&r!Z1>1<7oLLr->n`y$mg}+b$Dl$|FIYe;2&C1O4D>vdGaorR@})FCKw3q}PGQ +zlw~b8s^{=fD7u~CuhkshC2XrXH-(}0zu~{YTX+!xBx3&nSaj-gi+A--(!^xvt$?3| +zc6_*vDE0_{|KteO0m(&G#d|D4;yBfc=u)@>xx!NKo8KTF06)w}-6LGF-sWY{c82wx^l@GEF&;1hvhv-B7ws}jA_ +z-5Vl=q49n3!ke|JJ9tw)9i=!-P=O^eKRE7f8G*;a+|~M0w1KJGV=`h*T(wcl6_sm! +z*qh7dY@?OdOZg#VF=@O?oSS&q9r;gfD5qR3*$eG_HORV=BFths<`gUA6Y1q2k_9gp +zJHnXpesu7Chxv!+f$b?Oqai*BpD(V$yHRK7Y)A&`(70&Uv1*eIYqu)4QC`?Vs>b|$ +zGt*qx;)lX&ZYBPumbL}Xf|%puIZdZOTKtVh3`p}_URO=S_gRg_XS_*AiT+K?Aj1bz +z8EI!A6NF_nF(mTd^a~n(m{|l4#}Jj&Naw +z@Jn0mRU&$%zKc^O?*$ +zaOebP+alhxN~oHZWjaUHz%A>L&_jXI>w@`ZYz{V4&E!yvp)UCriqKCYCkARTGbgJ$ +zHC5Hv93(tSwGSWR)Ni?AR_j#ie`f~7%=@4M8JbyFdT?|jPV`_Q=avSqK<7@ykbRj= +z+m4?VQ}(?cRqdv}_vF5$0TqOso84mrUS+n>*6s9@5noV#!;CM#OX7L_ySQjxU_VW?p%byq*fT@*#>L`$RqCtEnCM4wD0PQ&%!Dg~z2l06L8$1BP-r=Kr?fjE7$Ws-ptH +z3`B}~4o>s_+k%aO4`zEd?U+hBCf5L;tDgUl{#Ro$<$y+>noBo@=??bz-xdH1eE!># +z!nDW!O>Z&J|JTGe!6lBdt6=G11-P8~Q$=?smdu$d=5r`7Cd&BhD`T%;0|y=R|J?j_ +zIJ3P!f3&Mi6d-1%1l3_MDN+GN0q`19va>ULouPv66SPa2r9Y;Qf~n+1DEkJB)9owY +z#lrfL4@x`W-5@vkZwr<@t(&S?ipK^XUAqaIe|P@B_TQ~BngQ6v)zJUJhG<#oY|%$b0wMI5+b +z!Y3{wAOsA#%~T$5H>?(qpigf~N@7SXH@kq*5aruf1uKp^oDT0y_}Yy=0)7H)r3Ttj +zsH?uYoBgY;u$)*r^Si36nunYCdT`9G<^<@0<=Ivv6;)mQ7aDxY@koV}ux+W4AEcF? +zKY$LtO8zreCD?*h1r`!T)`J^kB; +zR!F)S|4y?Iih}2-pGj?3>FHS2C*1?f#>_T|$QG_JRhfJXH*za0gl-!W67CM1E&l$3 +z6OwQ|xlUeK-IE>0DjVlSrT4^8hZ$&peb|?T^n*5Zq_obet8Hsry)S#mj9H8Kr<@uA +z!+NoTw~$VN!-A65B{*%gV~n|kbX%3%|57cy%K-uafKXtfAiwjy$yRSeI9)_h=Nb_} +z1Q21Nw1nFiCtB{cA&p>f_WJ=*c<&4^C)tWMo0>_Kd;f=jymft3$0MuALz3b@gYK4Z +z-b1&d>eYZ6S_<;VF<2=(Dqp_r>WC`{r77`O +zd8(3QX8X9S%hC6+-$~;8Jbwg7nVDb4C>GYV?hG)nKmOQb?#S&QDkH7&8QH3@O)7^L +zf)CxR$wR(n8RFoLGJaEmVPV-67yx?r;Zypx^awkx?4N{|6U@;Q$E^f;6{ry2^jSmG +zxw7bjgJZXQ*}$s#ARu|iwLWAQMO$}x9qc^h_WP0?sM0>V$s^y0>atZxs$WCD4XCIb +z3*P8YVRauf(n3|33kXHgiyHzv2Ck31v6TW+yDWL+lNi#eH*lWTxDD0NPqz1IL@85I +z`7CTiQc*P%2}X(T>Y&ja!3(bm31K=i;6lS=u6w5;YI0f??x^F|sJb5|bgg9xgvgol +zgu2gZ9CCx;1Qp=PrtYL)l9THsNNt`rKMt&FzRjPQqTwzbI<^Xm%m +zh7V>tdRJH`P@7u)fphw{I`bilIz8Lkb$FKe_1H+rGj?92pguW<$a~wgge5Y;VJ;Vi +zxX7gBl}j6s&-Cyb+BbDWsEQ|?JSNl;i!ZEo8t@yEyNf4OtpW`Vli9UHa=j@0#jPmz +zf>73Z)4SQNm!yd4x_B}zlE?`fi1A#&k-M5NM4KL}PYiRdPCRLho6ABkN}ZwVmbUpj +zi1jv3jfMI=($E#!>t*;A%F2Z4I~d(IvTFWf*DNbJz_AL^;tX3-l4*)wjaA|uIQk?W +z4XY3e58}(dDr_z#&#}A}MOor`zLqd_tr*nC-&7U!ELhqNOa5Y&0|I( +zz=gmN!dUH0J87!YCauRrhpu3(VRAkYN_nwIt>FA@Um^J6I@A_ciH1{}=NmbI@Niip +zH!L}ZAexoiI;-AQ+Q`#rua?1Nk?EVYo7POwq&VrTaL3m}Pjf5PkripkC(9^oa^w?J +z!Y>Q=E=&2azUOR1n(^uq8GITP!t7hirOmr$9x{#nU!{noFcLe|!P +zuHz1|F?w;)7jE=?sk?Gs;1uCffyT-8RTm|)j264+23k&;$}(E!)dMqJ78ClCb2bUo +z;e+tT?4Ye5sm>SO<{@R=Y{RBiXJoMSNSFyOApjjb0`(UYBiYqm?muV0SLfV;gl3K_ +ztBej1d%+MnY~Il31H;;%3GMd@+q!xpBBC}DPS?;$N3pz0ddV;*-UM6(xi3oDxAEX+ +zPR3G{BGXp1g55pnD}Z58+*LT)w04I@%>>q0pFR%hdFh$fO+=81zt2-B%t$2(xe$gJ +z!W2)Urf%cVF`I7@$!jW@UJbNk4be*J-zvNqghw@2a}ZDt_j_l0?Cfm@;FTrnQkJxa +zLu@t0l>c-3k^vK@(lHWm$=fD)xtY9k;TYH +z&v7wbyp;$zrZfP8v`bg2=#*z(J>3B%_$r0N+~Y!Ha`%j%x0@-o9VCrHv*6AK?)X-* +zR;25-9&Epp3YmaT&6UHi9TU@!LhJwOyVSy~zBW0or}C6GuAKog3}oH=%f88JHTrs5 +z)mc@1#uB&bB8KE`k8~&7rDbTsna*6s?I5Im~2#z +z_C;|t&2^~lHxqF*FA(-fB_QGDVt%TH9n>NS4Lc4pSUH8NBIO9->CB3?$Udnakj%~d +z&txaIJK~bE6PR;xRlXl-D&I{o8-bn8d`il%C~MQf*V~K)MR>3<>hUzn=(+MW3+MtvAF#$3+%6aJfZTJ^bwY<-3lu +z{Kv)pz;u`Qh77rpE2kN6`(5r*(h;dG$7r1H=R`UH_J=u3>x*9FuiD<;infG$pqts@;vYJW{C}3N>#bCivVLq +z4#JS-0$bjKuT7pui+iY!4}-llmtnBvYjx*(2cFcr3wd;F=2@L?^wDp{!Oc|Je}^8& +zlt=2<>j`a~Ut^DW6dAWWZem5CcS%p4$;#<-*v6pPTNd`CAeKXU$A5M@P#~fJENP`= +z{pOX;-sXp^z7eNo>pshoG{%e)h)T(L8Ysveo2JO4?#Ic3IhbbkAB~zgKHuhH?I>B8W||O9etWf#7}Jf(y=H@?pj>Ri$G%}ZzQ1HJdb;!MRTO_! +zGR&aIcbONav%1Yen;yZ{>EPY3Hako9>}qV>fT-JI{TM+<#x_?*%^N+Z2@=*5a_8(g +zZ*a{3^J3bz?zHlg<~lZ-If0k@Eol*9(z`;=5xnXV$mdr=?&Q2U8<+KS(nh!ORTAdb +zt5BSGLrx9*it!``mjU>J#70QpY)l@fpX>AUJZexYn|Q6dXG8%z${3kPyoSg@Dtdz7 +zGhkc8i2wH3pg`mgW7^a(b?w=hvKOCgQ3Xj}N83a|Z=YGOVSSuw$xQe~Y7 +zbWZRwIifXF=v=6+hb?R;#V#AcT>Aa;{Pf$G2Uw~1`P#?3b4AKm!g~#7Z5Ts?ytgxl +zF4BrLS6asSU^*S!XUW(oK$U=Cme>;pV{&Mx9QRf13W}K9`1Iy>M@#zzJWpQ@5eop4 +zC2z;s~#rSRS4&}k~XnfqiFE4e_ZOeACxbT*xngjiP>7_vY +zsES~I#z(75#QnHc6^vVJrZwlh#BV~MZONGQD)UN!*TYGOyhphPDkzf78MA+CR>c1Y +zqd3fX{*5%}+d?gxVpLsmV;jjjS8%xo3)#f>#y`la)$vB;`~0VWE^8j+_EEZrP)Kn- +zb$Q~|;~%$(A-oHsI5O!UYJ%B_dwaXzHe@b?f)J^+kpF#Bnuf$Ck$iix?~UBcGtbEm +z2QJ2n|8bSyB@_UOqQnDG5u^4MxhYd +zu`di|TlzrwaoDGF0^GXIA&8DAHpP_*2Uf^VB<8f8GvOJEqaj_^$5e%nQrlVhX9?i(^X=&PzxC(E~X&bLQ9F6m^bc +zK7E9x($4i@DNtT21xVzk0U5=gYvGp7yeWVtXsC^rk +zz|Bik6K7j)=`DBl9?ijYD{obKbf?pxCk`giUb#i!wh++GFEb^#)3rPIjMIBAcA_Nd +z-kGvR-Zw(Un25QDRsL;x^>+G)bB2)BEgrj;V@T +zCyTb$<$pm|q)9*E$Qq;qWogsQ2noL2xeb2D-HP0n6H)-k0}^HDg7X)cH +zQG;?4W8TELWyDNIvb3-csSWj^iGl;6y#!IOK!A>qz0>~y!q3R;tPqNjdY0dHoIb&J +zFg0@^@VM5sn=x~YIo>w;qyt-D`ogj&Fkf`T0)=0{Y0XxFa4KQeuyAP|oMMo465-vd +zGhsT!p6dM*9){2c-U@(=Z2j$MZN(Q7!{( +z(TUZz#CdY3RBbfUu{yCLcj0&H$=;}Q=?mk3B!kyIHkLIWVA#SHF2&)(wVs(AWxEbj +zfxeD=f1?VL61%o}&Q=x{DZOVx(QDdC=T=MaMu-FdXmuHw>Bx3;H%%0tIza_7&@}o4 +zE}z_qt+H%4_In$XSr;X<+|;l>$Odse{p-EvVYxI@D*Pdbmxv^^9vruvCX0th=|j-F +zITBj$Nv-SO2#3Shm%Qq>>2?r%zz2a~{Z4~ty`2HyS)p5sqCTZfNXV?aB+KZbwg&Wqn-oHx_v;Jk`t+2z>%eh`EjXSi3 +zrTF6PNUR*H)2>L-Z3f4QY$tkjIm9-)tQ^Frj<fh*N +z$A?TDs^=L_80J=9iYuYN2*l46SnvEGU~U?`vEq?f0F3?moga~9kD~UtYtIK(XnR;T +zlo9;nrq#!rg%$9MK9Tje1b(;EpdGPIQp)%#W9)#G!Mvk7u^P}7mu86xCtzfH7SMwh=`NkUpalx{X?|2FSU +zbHKhZ5jih!W%yAeU-3;nC`*^l`c%!wZ~yjx`1GDbp#R~n!**nn_K^r9Sd-0l#W&cKVpbb1cO&=x +zOw&}_1?!={>wBA +z$8}s3%?0^Z{NblCM*A2*2!T40)WRPih7%FPzlzTsK;*i-Ls@gzgl|vDM%^#@)ch^~ +zdg;-~%3W-dx>(UB%Ay>Z)s7Acw;GyoR#vWr#L{D>WXn+^`$%Q|DsVD|DWrC;x6Q|& +zmbT{BFj>W&M23oFHiipQ_aQx&<)$Fqn~Pe_@=WUf{wYTPabcah8wWz(`gsTQLoy7# +z@W-U6U2T-h?*%rIRQ7i-SF6nTNxa^h2t1_%^$3uof-3}_Ije}Sy+yN&wn9$x1hTbn +z))d>*b8OrFki)jPNM%rWx#*hAjIbl()~)D_RI%)30a0l5=d}h``9NZrsjnmPGhR_m +zua%*7$^I%wD6a^6pLeubPlNE0TB&L0#h=%gMjA>UWbB%vILRgsBbP`cO}7W683P{l5OL)t%tO +zDU%{c*?Q%bf><9)ZDoFR#u0a*CM{$;Slam6(=AG}|YB%NwQ +zStek|uOMT8S9+iL4GK^Q)vdp(uxFD8+XPgCys~3_BbK2qgnmDBe@!pH1uiJMz5JWR +zyXyRpS;*4zagvZQxKyPeaK-H5J|W5oEzwe|*W$JMb}Or>uTP~8UNjoL1RUS)`1*na +z_EnOFA%f>{@3^Cy#-pX^a1&|EycSiUb_`CK{$=M{w1l!Z^MlA-&sOm>+bILLBjoh8 +z-tnV7Nd$#mh0H+N02rDj5`N_3ZLCD$cDDNIz3_nE%E9+Ruv_r!nVp>9cV*S*AMx(Q +z1CX<`Za=wiKx&qrQ0U#YUWyZ4fALw3YG;`J7H+S0{W*6g;vb$uhxT-2rrrf5Ugd%c +z&cu1x<-JiLg+ND2X;H0rbMZ8VR-YpkR`$Z3ohK@`lcOo4H}PZ-Z4~QPI4NOOvxTE; +zWri`VNkcOSOFdo}1fEvj0YeEIiRz$gY6qYB5(Dxn;A*-nvFy0^@@n(8HgR{wuD7Mp +z)PlK&XxzgN*b}Hs=uJ!BA8?1m1ef-oQ}0`q;7tJGrUro6Sv}9_6vG|9E8@Z7;qU)s +zG}P_a*fJjelB=>Uw?iz3>SJc7V-hJ@8*Rhs8dLDfFOM?&Gf6(q?s3!z;mFR)vK_gZ +zb7i!y1r-9;b>`^2QK|phUUh$kB;xQey +zoLv~Bu-<$8eQYQ3E)$W8D-m)R%pn)Zqt9i(_|CN +z8rc(`Jug8nGar3dft~P;L5EDUml0XcTskjZEbSFJ`Xj;5#~7@N?vbJu@QS-NOp?5ezNY1x-YA@DV}y4nuKK}DEtgf{Lm=V+C}(Or03ct +z(x-L9)}%*4W@VGbYex5;A=M;W$Yxq;H_AEUc3Ci`+kqgOa%`*Ar2|LQ#bf#KVE7I} +zk|W6Hfh&j)r0vetQ5u=fD`g>b;nmrS;?lEw4Ss>-;oX*Iky-ys)&#r)Q?!lXUCd|4 +zeJf+p*`e;?)O_k}hnpVJp7uV$w=uz@;&7MKPBvp$6`X9`e}#2Qrjaa56e-B6B=e&F +zPYyyk`5E#7ohgfo1>>RmiDAQ8>07j-GRZ>R{lKR*^U`9 +z^OZ4^_XkfmVL@P(%ODe(D&#>7 +z&TN3g{c`7%bJoG3gTO=oEZ^M{o8fJpON*aUwGf}B1q`zVe)N-o>poq~p+zv`73C`~Pt +zMlX5gx!NP0#pkzlC{mraVS!6t%LO#&eYE+we#C>uAfy7R4B2Z`bluuaa+iIl*1hAR +znV4;ESIdU@6-rH&0%IYkBsiZdXmzSJIi!#CGSOR~9g9A^w>oTbb*NcW*{s1xdwYLwMs7wj`n^f5zdD~=4wu*_lr=S +zj$1?h6B~96OKqER89(ud#vt12j8P@|5r#im-vFw^XI*rMf=|{2ua0d^AFNa{ZgQ+Q +zMZX|%+0ub;02)C3l>1GnfgO5`Vrken3AQ%AEfp83@Kcot3oD)tWLDjMU#2`3=SBwy +zk53l7N%T34T_0A%htk_t2MUg{W|VZ27{|A9^6)8ww7VlwY_;OD=6{Q=W~EV0;t? +zo18lr2xseJn5yfO)}EMR;qK;WzPe^}3S`;~nE5EP&nt%7za7c}#H!g3uB%1dv+XVT +z>N0&xv#G$z=fH>e>wR8ZLPk|7AC^94Ge((eY1uci#Aac%{S1}-0qfJl0qfhHTguPN +z-lXi6m?1Zp%%3hU2c1jqZXu`66^qT}@EtNmpN2#SyEaC?HjPP9b9wS9P-`_idE;GI +z2JV()u!QS(*dg(voMBntCBhoS2cG-sIhyvRkAyb7Noq7NEw{3U5x*(Z%dcfAeIZ}^ +zA|)``DwxMuV?W{BQyW)KZk+cqQF{@whdWYTf$4pp$rM1*4mecTl#J)oJK_mw6I$`j +zBhG-g8y{;$yxiO%yT`HEgKKwc&|9m51gEFxmfE83mXM+9xh2{J-@4?pkaM^+XN6#sIFF?jO<@Tl<@I#{6wig61SXGJK?>!ZrWvl?u2H4p4%8Ct5XJL;mCKef4%=6{DL@y +z&B>msVy|2Nym|FBr#5K25(|qtFDV)T;WOs{1;EH`KXI%Z=|Ea` +zfpm0v)QK?sj07>`&ND2pz>QiuKUUpy6kHF%deK8iu>=>Xu=RV#m5_?GQ|8lQ#GI)E +zA5$?KTsz@){Ch!X=Qc`{cnqGI(`!!eAOLEY++R08V%6VRh34`_=dWs{B@otJf&|zY +p#*zKE1+#$9|7?K`f+xRDx2Pe4hQ-6reHJl2q{S7)3f>re{y+2$5Yqqv diff --git a/panels/datetime/data/timezone_-4_dim.png b/panels/datetime/data/timezone_-4_dim.png -index 809ddf0e0d6493d65f420c1fcdaac8b53c21c92d..5b5bf77bd88b5f8a6b88fbaff2d32e049762cbbf 100644 +index d3186c85781ce190cf14b9538e97283ab542f1da..5b5bf77bd88b5f8a6b88fbaff2d32e049762cbbf 100644 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV4TUw3>5Kxa(q9K;wPp1f;u5W`L1Wx`!URI|hqJQo0ls>FydzIuxb5rDmk1?-{@E -z-uvIn^UTBSbM`)a?X})j@0rMF8p?!t5AZ-B5Fu0rtOWwyVg!M(((m2|uFSGz`vU*4 -zEmf7lpqucxAtW%m=cZ!l2?E{8!+fwH^8&yZ5Uv+g9fCV|ml9iwEsc5x4gxWPpkM_Z -zznQ&x|14VX?3;Z}-9;H+&C|KlWGR{_*i6e|Zg^4HkMa7pR#wWmnu>W#Cbt7FCn%mJ -z;9%j9W9hG_u&{c(VU2&IHj)mt6%CCMd4Y`u -zdd3I>;oSzwzXbjLaKsC5p4Ji6#6Z-TEyjzZsPWQ4;(9~i_<_7O1qiLxEVfk<{cnm9 -zYSgfcQ%xd1uvVGmf$PoepES~7^qxnhp9?8ii9ao>(gvhP{zDb -z`Z(d%>!&+8PEjd5(NTOsUszH7!#EGQBLx~@x@U_Sk;x! -zW`oUfv9VYS^5Y)ix)zmReQ_X~IZCVky$uTu_IvrUv69aC&%yH6dJu$nf6Nnz062&e -zQtMb};P|T%_k_Vcf+J^< -zyQB&#Y`%p@w<;bBo`<~K0a+oZCpUVl*ayH38(v1&Db((q4X0r00B~ocQ|juR#KC??fso?b{y|` -zG5}!g?zN6cV3Du{3%)rAxpD7$1J*Ua3fAj$^W6^mG8&_GnB2Z4gf({4fU4Z=sy5`Q3m -zZ_+fvFP}=paec=MA{T!v#x^85F2{dnP`ObOa*lll`orONmkToFZWdVovFgAJLi4bX -zM=LpakpO+R-}1JL^)?3j*|wP>5Z|SDvj<$NPay=)A>Fg|)Z5cOz2l!SuJMVt#I9wg -zUcr4+*h_R=lro3*!Td?UeoLiF!&lqKrV9a+ -z1A5MQ?V(8OIwj{=?X)GmonYW&P1-%0NFF0IIj$~2l5cr%AIPgKDWgCrK45QJbHk1~ -zn@}o>pI$BmsJczAr*6O7v!_2^C@RipPM(L;!~vWC#`==o>Nc{RdbjAcgQn-u>4|Ze -zk{Kv5QqkZ?mLlKepdv!;G#RDZ!Hq_<|~Wn;<)1$K!iQM6oc39^y>X8_sVh+iJEcywFdgC93h -z$%Hg%X0tMfiK`zQv$DI)_VF@y4zE$dsQsZiuqC+<+ogo|(39Slq?HpM1@D -z16E?thXulUb=&S~v>?A_y5SNtKHyhm)5}U99Nt|7ywS#zq~qXI=*!4S$)KYrfVrvO{f><3ce3 -zPOUvvtk`K;XM(^!%vgt|!9{lm#`ZK3l>bU1p1jU^FsC$SNyoOM`e)N)o??W7k?$^} -zGH?`H6}*d)Bz(Db^y0}cm06vMg#zFDrjI8F$sxi|tna-bRWb7S)vZyVtl_*qch!N9 -zRyio@5m{k&)L<1{a2MV&7D>2!jAb76=QyD=N+$L|exq*LCAi3#y7HtK%nk*St7H@! -zYxzPf=A+|U&erJHGX&Ngei0k+iHMfO%T(>25bfGnuiw|`1w}zunXrKT};eYHBV-ei8I!+%r*C~k%ZD>J!7<2A@z+^(Fkd|L45q -ztL|I8(^VY#m!HH;xgJaH_h=W5HaEHH^|KXc`Vc$}ml01U<-19B;r6?7SJ7Fo()F8(vY|n~2423PU*76HyF)3{QuQ8`lps9TJ@D}e -zT{f3P>eh^0*7Jn3q&n`@BJphIj)Kzj`-cuYLN#6Gi>SRR>R~cn;i}t!EELgDI(#qZ -zvn~}EmxZ&zu;5sNVs+MhoL5&5=TlQ+GvoN{B5eN%(Y4+Il>b!xI=gd5tT#-s+7c0X -zy6IYe$O=##acA-O>zKvTt)K_@-U -z8|CFn!Uos#lm8V3WkCO8j5bUS9a3&3BOm-h=mAH2VkOxU+7TF`(I978f2Kv -z#^eA#l_8$jnM#w&RRe-SMAt~_q@4KA&os=;k8D~7a|%7F@quW-a;T$(?TDV+ANW)7 -zDC0xiQCrc0mjbAl0B-TQVkN9;eK^EEFkliNr#6R;C72ca1u5X@)S^3CTo1}c9TjJN -z7wu$#ZO28Js%9hJ^#}XkQubQtZcOTN}5Tc@ix=MkT{_@)1nIhCC+Nsg9&Sv`E -zZ<2IO7zv+$4X<5ul*$n#pI^(!PMAF?>136BVHGA3|8CiF;*A -z^MHI~^Ph8xx0zbqBKxzyIb>bn1NQMHzC^_))wgD>mq?|4d4*AY{MWL9I|9<4_*98F -zK<>Yn7HDJ9Dx@0yF5A{R=?-wkJ@C&+EmD|u($t{!kJ4Ki;5iB{=f{B|BtIa+ER?k# -z&zXQ(`^_GWPzr(Kug9uw8{90!n3JvO!4Xi31Qlz$PhSjI@%~=>X!w^TmnF$*#nt?YNN)D-PpX -zLw4X(slXmiWM%PNM`SQ;Fv&KvPsp(?FlD&$)Htc|`jh!5I~OmfNqm;?3F`UOkytA9 -z^z;d1ZCCS#upu6D0WcM5!uOmK>}vZewvS_rRr~bE@9}7=WCP+z8KD^8cp7_fCFFre -zNc!A5Pvjtq*zBngHp|CgE5%Agv5csO10a5c`tzEu;e@z2anGKBJ3gV<6!=l_0!vSn -zAB2!gvL8$34v_r~kZtSXt;R%GtzQMC8`cfKcy1U@;}qF3rw=0KF7QMSZ{fQW+;1lr -zz)f6f3mOhZ&Y$YbbLSUrBSOgEFx!p?wR2Qo9XrRN1AA%j0?4)>2wsWRwfY!{d%rkj -z>UiXOai$b^BAlsBL+e&N!O+W34OEC4MSt_nZb#E0&qD`dyZa)IiBtMJ3SuC@n} -zh?&>fqJzsR$KJ@G(E(heW+)+$@%ti}x|j#i2hPa}?zm>qUDrGzyHj&0XN0@H+!latHx+fhJC=`Rm^C*P+r$e=-cVBmKM&XJBvcIHok) -z#^byorV6jfpM~9S@|`rmmjD5k|7{MfwA{(}9`?k5y2Z1!t0-Zj3o_E;r-F;WqNu{| -z6m6R5Ec>i?`_Mf2(PAThM@bhbH9?f_u4U~yvfkKxnkCOR -zO;81|Jv!?D0(-T9%=Q*6iK#zXi} -z&N0H&fYL6Xn0DrYh@5}wZ#6HV00b>;ERkr(f%UQS4IyX?gGapU-=GolR@ -z1n(L7a%#*Lv?SUYBMZd!Ep|_*-fDc=&k-&h0}b^^iDF@-EYgg05k*6F5!h5;@L`Ym -z*mX1K5yti3%Xl2#q~zH7o;XFltwZYiJ@E@__-w79hd_L0N~nBUd&?10fC(~>+!u?6 -zVU8uWw|UA!^{GbgfA`iU#0k%6nml#g6gC595ZP~4;jC}Om)h-@8cs7KTzj{d%uj8# -z(+;bF8bh2r$v`+^#SplY@GXDw%qKD}0tZn0pBOKK-74E%zs~w-Oo8sCMr?d;OE4bxgX;3U&KYF-_?TnPqVirq)MP> -z$GK+~M!9$80Hwr!s)p}>&3UZYgKM0Np0azJcoz`Ky}v%)i8;!;aTB)ZvJ3msY&Z_Z -zX;%&h@@-|yKmr%DrHZhY@R$9b^wg+`Dd`cdV&m%gzb^TvbpCt0pXTIaRohwPs6TSL^PW!~@tSS5J`TMz|GI>VcrVrT}K)nybE40Fx -zcJv9*(!aHb8R#aIPO?+kEI9)1*aIsoa{COVRXM}9*|`AGPlN<^NEx(Wvc+`+5FjBX -zMeg)&wo_lLD3b*5hqatr@a5WtEOOEKj_j -z5QLL>aw#j*p{&9gM!j}tsjI!ULMzIZ(e56Y+?~B5mXuWtldG~U-xitnJREJgs%NZs -z#Rb~leW}euHhP#2^KkaaB;81!;X3YKYe9d>ei{a)L`(C+)PcUmq@)S8%n)>zk9Q;# -ztWR#0C+rjM)2i*ORAxw3y&O?66bwXNev7Nw3*-)+af=1Vq}+ph1+igC(ivq$=b01X -zz2~iMb}lHI+=iu${KZVGPj`UStuRr#a8cv{w`eVDIZk03V@}*Ekt{`+xxAi!M1J=L -z@!L-KSo=of&v_+Y3ignG(i?f|fAX#Xa27y;VJfL!B16M47b^nnCB;trmLCQqb2;t& -z>^4|HbOyIxrE#$HIZIDdvi_w7L{qCoj%RlmV!1mowbckA%Z -zkqEb^0nYJTp|~achMn0`G&ReK)`9np1R0hClbvOH9Ig5sq%FY+IhV!hNt>TDmvZc4}&Na|fpTcE>9bn_q;sGovme -zCMVo#X2Cbi>0&TU>huQD0Oy{nvFUnE#>@rM?r5#Z|Lm`|((+5$MjyV0y0RV$bo6I9 -zZNZKQ1FK~}TQn_q^o{%uYopLzJfG>U+M$iTLJ|@xiwOQ@KhB?A+sNptF6Qq(g^#>k -zq&XP5Dqp;Q!oZ19zm(vGXrpXnks5TMvQKyh9(In2TWM!*_#nX6}K@Pef40 -z@7^d%<@o=>Lmd*C7pW~Wy(SmZH1dtb-Op+)?^ld#6 -zuRou*9JAs9eR76dBYM%Qo?hJFMs2HYm#)~=>}ej*@I#N@{fM{MB3f|PZf-1tFQ~(l -zIDllT{%2NyE~P}sjV@g^WO)PNwQ&;ZGuDFMTP)G5$#b5b`*Y%AK7HbsOckNiN)v{q! -zk+pNF)!s0B66cG;B@(@XMlW|;_k+3(SN7+amfp{9J+?QgmPdV|H5ZK8Z#51^gHoSB -zm9Lo@00JFVE?kVn9e+|Y;}kq>k}ksr3ad|X;V6_rQWnoT`NEMdl^hN*&r6`7w2_DW -z=?JwoDz!LDg&a_WD1DIUEKC2C#?46i&vNu5O<=e?%{vb=gn{yu>E}*m52^0R7$Bc`4)(pqQFIFnx8*3E)MMoMy -zeq@QaAF*lN$p4{L|kd`{irS -z!dW5c_!efIezFnCCe&z55aa3>VS+iAyyn5loqE~&XdTSXIlV~;f@tByQ}eQ_K^12So+sAT3ZQSe1FGNZU;(ZDt%SPwa`v-PD8HCa(&464@?_&MW_m(5@F+&Dra1zM);qK`(t3*b8yq=_6V-(f2eXFW7g}{k*FVuwWXJ5lS7aGqNu=R -zqYpY!=Mkk5yw)sNI=~9xQky_fMZi~1Hv}qJ505Bs-uYbXEBzf>2lUHojtlv$H-t?7 -zY=>o~$eh1wpYwA)sJB;fi~l<^@v*O}FBr^_VrYu{*D4w(l(@e0$HU8a|LR_1(cD8b -zh~N6cwMD@LAbr#V^$uU^e<1ehK5Dgj4^<=MO3UFvUUL>=tI&?#f=cA1GXyQ3Y-I4w -zI#xd|ErY;jkJ>W=edB_+>P5cv1{Nn>*Nxx&di&Q^39WU}H)WnztyC_w$;Zshi$y_4 -z51V@-CREpMHsdQSuAKSxt%w^obZp{3UKMqw7L2;QT2$^8YlDH1ZT2e@5ew}D50zHM -zdFr?77v-Y=F-?}y1+I(r%4`F=_Vh}qklyk9s%j!RJQts4=4ylPO8Op9P9^f{IcxD; -zESz0sB81L7LhRdC^XfwuYMI<3NW++B>4O4@{jt*|QK89}WfD6=T#t<8XlKrUaorpr -zjCApZ7+#$riw!(}FWw`)+M$pF-fAhogdW9B4W-w`fK$p#ri{4-fCGk(^AwI~Sf3S0ka>xN!QAfjh$E$S-pO(~1WE$whW5Qq -z@nvC01JKaQ%J}xYd*-W8Z#P#6?9$PnWx(@L6b)lE4Po~ODWAd%41?1cu -z!7@Ugq+!C+N@3Lu7%XhHSI@9Wb`x-O#>dR;PZMS2p!s`>3Mk=zD0Halk_uQKT7{VH -zn|C@AUqIgUdxD^y0HOLldDnb779Wrw9>4AlJvg=)40ji(v8*`)5=nq(f>SvPvb#`nO6UIgI|LbO8%f -zw8qfb*iU2=DmyL^Pz*oDYTcsAIv9Ms&I;V>z}g)bNquL^8t$iLVK+pg%PEnW1)?Qx -zNbYxM`?f$u|B%G_z)Xw)0*=z~HY5wlFkcw5Kq2v8koE~L(1jt5-xi&(EvE2NlJ@iR -z@Tqw<*YXZBUF)Rzzgl7R1(Ej&!v_I!Mv527@?B)l6W56SqQxCCZkavQ$#! -zb>KPh+AOi@NW2$h2)Tc==NCMFKl1wFYvZRIX2+079_Q_OOAcFY$J5>IXwA~9XoYLQ -zUgYEFdT=G_!D;C)d?bKbCaogno>zFPG@`rN4mC}rt*q;yx}O9x;6B}$W>5uhmVUFp -zRxXg6OCJnQjaAn^^NlHJ@lkqi^*r`bhDw-9%q|u!hH>jGM2&eqGE4uo+g<3aSlNIN -zs2V5HHpL`ikCIg26I}VUT6;E(biVpyDhCFe-8RL|wwC#=fnCng433%GJ_`Z%4&g|k -zpMwsc^ADTp)LE~1PwmiUo~Mw1H3a8iQ2YIv_iRz?rlj4=kJDpwXWn1e?g7&uD&&f` -zoz}9!w`U9aazetg@o_O5tj>Q(I7M3}iw&-44TzF|uB+MR7MlzPsW6w_g5spK^3j%Q -zX0d4YKBq>*SPBe0svmBcm}vhRh#|w|$YHP6XOb{5E7{d5du|BoCCg;^-rUZ}R*bz~ -zxX7jlJd8!Eh}xsz+*}7B;nLeAVTPCGMG@V3qe#^FssU48*ya%biJsEh-PaVLG_no( -z*ucj8nNiK%{8G(#=PSnS!j^9Bcz}XXWewKX<3J4_Nr1*@WpL%1PFmVD==TRJvMcdP -zR^$n?zIZom{o5cUId9hq9<>Y9O#7JM0-R5a9P-j#yz8>6^XOm%*cQJ{q_PsM8QH9? -zv(CR76?`EYYR+plZuL6!S;|$PxLNh5aXLJB_A&pq*r+$~)+v5# -zpg1sCG2q$!HF!`eeCy@XK=0%oScr>eUcIq(9S~~;vxkj!o)-oZhmh%AjcwCv8iu{D -z0iuE*Y}~MjoDaFdPh740P9;vlW7{N7!w7KB7Ix)*Ze7;$#~FdYY$%81?4ejmo51y5 -zA!LU&sbaS!r@i!%mjCD2sdu8Itdbx+>!z8XL3-J2%0ImAT|EtnYv0L^2f_p*iOi!K -z;(s^PRWQ!3Wh}e=VsMX@^ehhuLf!H>v>qIO>{!Ci1B#LV-FAEhQ9Y-CyC4vHC_D6a -zAgawfk?D<9f4VWAxGB>$Q!41&IDM3T -zM+>*Ff_l2M!_7ea@%O+Oko_$c+VF~4C$^;Q^P5>c_l2ZQ0B%<7xQptB)|8 -zPi&8f_~Ncv7o*Yi-d^cLFSFX`TR?$~#UDd*~|y&uG_ -zqSJzn$u6jT{3Vu7)^qnkGTvMndOIVVLH`Tfq)A)=VQFA%^TTRWS90kI5=->D(0p;U^Sff_FmfV-h$qEsYL5*<^iw;UKEm=iJ&r6e(z`Hjg7UN@0^^B!%bm& -zXQ#F_vYpgmeTem^^yqP{AZl^^orXHbO)fdTSIuGt2Zd+~D%Z2&CDi2gk96;@0mro{>!6Sf; -z)qax>}T2egMO7JCWLst2GgfX@Es7ghiMs_I{k@rBp^4c5uU -V57XSk@G%hZ2Zd;W%bu9O`Y*9^A2|R3 +literal 9785 +zcmZX4byQSwxAp)cosvp93`m0@%}5O;CEcJfbazRq)KCJ_2uk+|NVljoNOzYqgml9_ +zqxZhw{nllz`Qw~l?!BK~&mr=;ngS92eS8oIM5Lq$(*%LAm_Q(mG~7GDn_1=$-XIVY +zNC_sb?K878@0&^I`Qdh7U1t&Mtv(cx-H`YYLQ0McA!TA>bK6E>B7&nzOC^U*JS|&H +zJcCg9Io+>=@p~IMh27qM13kopJUpfAQL$nbNEG$+i*0QxIf;9S)1xv1wZ(*9`(6Bz +zX4FaQS~WRLJ$;2T3OC11m=x{X91?5bCe&wao&A#t2|g=^fj}RnKp+ZSP%tJ2=s9p# +z^bh|INGb#bVj~5CurdGsK1yk34vo%DN{|ahzSWN7FlU2fE@?l$C(R$_b4lqMy?qc@ +z)VOHG=lJh9vl$%YrH3?jMqJb +z6H5562)@nnx>4k{uDsWvV39{Bby_wt2* +zkrEN1s|=e_;1t)3JK_*{-=)M1CR4) +zHW6}j52gGrqMfm`0fT=`-4cB|P}#yqm2RS_#6T_h<{-TV%fUj0cb0qKLb%wa5+GB;YrBHN>3Yh +zncufvx|%Y7$IT5{@flMy)|wk{@g`!P9JZRn^tyKsLHH1s0XAI2nG2ZJ`%PU+bl9xND0lqEr3D!@;v= +z!>?G*^NEIC;iuHvWH?a)pweA)ZspwJYq4a&r)`})jo +zl-f|fPWb-ZF+PZy^xGq-iD$oVX}IBKX%xLsIs9{}^`l|{b}ll+mZon$ovjhN8ctL= +z8QAlkVgzGKJE(-w7$mUBi>MZnfC|agA(stLS}uR~Pu_dM|+h*sY7!{c36RoM8U2pIE1o&UI>d^ZGDN{YgAYFbS4BlhVuY +z{RUwYhZO +z$G2|F=!jkoEZt-eO!F(s0FI&Zi*9zVwCT!vKG{ga7;GNF0nQS-l{&4MMKaR^uK1&- +zs(D##&+7XJoyE%Xf=^5ROMfaRqc)=7$_@x=^&pbPgD$E0FB>3gMJsE +z*ESoZJD+w|y;#`%z+)YjgLBsnLBMHeW=qS$0*aR6tB|>DYt<1P;#w~HUKUl5p)LEB +zc{oC#4?c6%Ugr#X2pr7nB0u2SrgwB?i+$d!vG`V2-7IiX8FD8Wv*TM+zuWcX;T5g& +zjwQBSXnwfl-t_g*p+D9d7BKpDq`K|+PuZcv;G0}hSs2A*_$spPGJi{^bGT9cZ4?2< +ztDmVbb(!1+0;eQrU9)(TBE?Ows0QZ@QRK?e^6sZ!uPHqRMz{h3x!p{yMSjjsjmR3J +zp~t3tV9m>34{2+(P=1jO)ziSdR@m!zny04wHPhN5-0gD*z~HH<_4$=Sml^ouN$I?* +z#@?(m?R{SiMF{arRafE`72eVlBP`~sq$eNpV4O8Q7yGHU}YeGz5U8ckEilXa)Ew$xrHzsgfk?{*hUqWdh +z%%;9I?weDlBoGC#Ns6Ott9uc~HF{_QN1rAkKF9VvhTmDe{TUU2m~YZ#r3?(QMa(9M +za*hlMU~xp+xT1UQb>;&?Or2+R)x#IGI$7D>6?3iDIS_erI}<=Q&xsKidb%G{HCN%T(jI4#uMg?_rAM?QlMvgl}FuQ*EQ!Aiu;NVDpGIkL~i +zOfSxb0UHS2*xuR2uWpd(4h9`$<9;s^xvT9H*<-OZV?Je-vxc*+;Ra(WNh9i`nL$bvRw +zB}pu;H;uo*f1(ttXJ9$$l0Tci2l)0Bo!_yDQcUNaAGUbT2x1LgT~sP_^!H$bGH+FT +z2W*H7n(??8If6Sr+ui?-cal$(q3$EIr(&dP@-afm18`5x*lHCm1qm>#?1?--mi3HW +ze8o=4;NU=|37yTbvG4M8US?ACG*vIF9mG|r1@hACq!qe-uczD2Ux)E0w9@gDn6@65 +zL_8?~k+IzFBjw8sa6k#q^2Da0-he(Z$eeYoim#W01(ZGsqYX#)^bZtp8ihG>$rsM^ +zQh#BgJ7M@dA|6dNOxKQlDx8)C~|@5y!kaas%S#^f6JeK9F85Gt8i5ihF;8ylC!s)at=FCOZK +z+l!@vUfg+2L%2u3-Ot5t$~V_^iVVT(ye{boAOk=h(Sao?QCQRb(IbT0sK1slgZw_z +zJ+x4tkwFIT6%%J)KK){y?EkX8u}Q%?3>@Ac0ujtsfWaR34~LX@XdHmraqqYika$;Y +zfYF*p7m;d|Mz)4{>}Xl<$-Ykh$npYD|J8|Y_IpBd43{mykH^I7NErA$I)8c&u$5#4 +ztuEeZE&F+(SC;w1JtB-?%uW%d#*jV+N*ym#G;Q)uknNXlZ|v>PJ=ylLFz +zCM}p@jDRX_&b9nULmL2lZSPw~CrS57d)mPn0v`@sAfLM${3xzibFDJG?^;^V^{Hp-y +znmyiy9Blg}jZwL8ybO-c283bJ*{^2&rC>0f15Wj}4ioF1hm?T$tV=@lfjfAu`@V}y +zQz)*<*AJ>o2`irANQErv^C-t2PlQ*bdz~fD3G~-?`U|^nls(|LEAxe5Gws)Z@YghY +zx>L3|Jsw81*iv_nSFO4>eY|L9<<4+50WT3}CgsVbr=7lBc@DQJWq)Q4A`cH&fYj^- +z2K}I}B7hMN%faCF;>?Q<_nmtpj)a^WjGzTFcgsi?9nX~hhR=ljt3PvPm_S;mwU5cn +zu}B#qy#4tnBtFCjInF@OA_!dnTLIh5{zkV#c%}jKe1QL(n*(3DQSD062WC352sJkl +zd5F>xWTJHMOlc@KvaL?!?xnZHriYqYavBoBn$WruE`Zb>U92PR;=@oO2db^zzDeZO +z^>Q0#j)sm-+*vLYjZo=Eu6&v!a?fx3kNAcZkgJq5c1IsfMiVm9sgzwRZHg-d+Sf6d +zFoyYvD-ub80j#Z=UfJfl-DXuzHl|u{j?o3354*s`OEiE^M@bIVSlDpds^e;PJDA{$ +zC_X+uPoWPw_po2yE~q=LvH4Vasv-L|5BCLsDpne16@^wUVbFfKj$XiOCXSdx@+voK +z$8UXi{It#^{yxwOyn85nS59~C_dL5SMqK%eW=oI#W4Tv2=~-vz8Kp!q{lIlQG#Gs9 +zY<4TxD=*pA-GfeBZwgXQj^2?0t7*c6+URtc(id859mj*8IM39_R^k8{zW1l*f!o^n +z?}v-A3bS=}zUihjv&v%V0@7wy`KG96ty_tA_}WlJWNpU*Ww%i8+R{O!0@MZ~SsKpm +zjK3t@>`DW=!aUb70hEvjAlUnj4vx=-Ehm3VM3MrS^=YmR=rrlL*`lnlg<~we`Tnr1 +z_=GxScUpWzg%}-Dh!GTP8)K!$Gg!f7xUrjM(V=?LUPLEDtzX5Px4wt8mKdbGZ!$5^ +zV4wlYsSelj=7444Cnglt=H1OhFy`eOC~x;C>ns#8Ua>Y_FbOG87mqpK+8NOS#O^`2|D=mK}jBpFe$5@JM}8%xs)4wqIF*hs)e +zVNY@kyI#!D18tWf5O_%99=aELJ2LD#*0YeS@J^jac+tY-omOI&rme3#ykn+oDzk_EWTkIo +z7vv*`0mDI#^WvU772bO$=OL>h4{cGUWohti@I?5Wsy2;H&ezBi?FN4K7CwCfq<|$h +z$7Q3NrZtbIYJYo=`knIEqcXW~2EHHiySZ}`;>8^~{+eZy`KKQLNrziM*%+1=t^;iq +zFJdDqO6~agK9}2T?K!EfVoQa*kcmp^=M=zk3?*oLAJ4vW_ytLDb#FaQ7xgw-Xe3OZx{hf(-n6M(_7)hDJvxcJX5 +z|KS>zAT9!O|Nn^Ahrw2$N@LOue>BW3s(jP1tBFn`sgW=2K3f-1hu$TUTW&^Y%azA- +zH+78I;XtbSW<>aOZM;21K?=yCi`IpHMi)kTYEXY<#J;h9qfz>crp1sJ&@68s+!_wqf05(;AGDZX}A6@l}fq_RU +z7$KCR>s;pzcP>shA)4hOi;Vu(T4wHLmH6KW#N|qj{jq6^_{65>2CT@F$kvNHB-2DZ +zyxV|r#^l0VmbbD)pr1pPsJZkx&wtju^e(fM6A-rYzK9~sV~Rdh9cXb@5bBrk)--nC +z0ceQK`ll+3%|QcMFGL))xNWP|9^gAN3YK+oQ9e!+WJn}N3wgZ1(^QQ#yULkPZ|N_K +zSmUMcF}s-iK#Yv2VEdtOn;Nx|U9;s}Vn$uPOIX~G_DUc`S3B$G{aIm_tZo<*Vg8ws +zW#1DKrq`AwT2^XHyL+f>WjN2;w0O9cNWe35^2q)DHehph?w!?D`c#hVsSdpq^;0Lo +zygxFD@F8kEIv;OGFAcAjX;uJU_>iRewX3PQRo>+?4_$`9O*WBJt04PR_m`zfkKTaJ +z+Fhu0$wf9fYpc#Co1>i8KB?P7R~63~OcM6BSgdD> +zb1=Vjlnpw;x7DG>U2#lE_BbPI=m~41)CYn| +z43!fSqZ^Pam3zN=N!6FIiVV}+_bnW)o+KWIIkUIhsHZ0nfIJT9Voi86>1nAa=d-+d +zO($feWlWKiuEIrnmffOdlpUe~kt&!d9Rd=eHC9Z0+gg9Ia&`TZEPl^9(p9(=OzSH; +z%5diD6`w^mgEZ8E+UrWIWrd0Y-l_P^cbFG^FdHXo^}Tw+Mp-%I3;nB<(WYr5gB`)Tw>HJqh27ZyMAi^00N!r$q3>ZSeJPSsu21w70FLWNN7 +zlA4z0L*X{xFfMe{x~_*D%M3b@?Rx%se_GPCB}N28CE>R}{2hElu`g>_YKQib{{xe1 +z(Yl2Z_hnXc>~>s;T>aeXPMuL4LkLY`Bd`BuqY+giTX4@ya_H}|!i@J8-m_~zn0?)y +zOx1GG9s9Dqk*874V7q4?Z)@Mc5Rd{Of)0t23#c8Hv55ne +zUfz~DwG*w&$pSqT?P$&ZHg4r>VRJP)tchm>t{^8--?(21b5u_B-ecAPjNa>WRQd)Q +zIde@pM?e4^Cnn^(aGsX+u7^{uAc!Zt6phy6)ef^7q(hu&(6SJ!YN(0fP^CFB|Z2skiQ!q4coHF5FTXO6qUmCE%h7YNp8?c-9d~@XF^x>vf6^oh|ym +z#I;stpWF37r@u^y+1zG{;+T-9t#1MxfQ(iqRe5Xk37FeXX=x!!{-jy93bfMkunh79 +z-h9B)Hkt7AVDd{0Ljq81sQ9YaZ3nVd8hx2Uxpz|nSI3;0w8NXv0t@Qop%s8pc>RX` +z)2x8fx~Ase`R?BmvZlB%6oe%eE70Ki_{hiqT0DDExdeD(=jG+)?jQ*f`*Zg%VA?|^ +zhq#s3PF}UvrYKTMy{do5$4<1(4^x_&ke9fvSsKvQMB^3vtr1r1TSv~3Gu&fbcKj`7QC*-9~EMcWnOGF{56d(VxqG+;bPavqt8w!Yw2=f(BrRtm&i*<^2F +zU-STNkLd4*2x=B9{1#MFK<*kI+K!wz+yiN;-0S@hRnZVRs}t`X0-)@+X)2irL%Ugy +zc_cHZ#%wQ##O0^GTLnw8V$6ta^LNq-=i{TEDJ*XOVLnY_W(zKttMqV!V6yJ_8`H^4 +zZ4V)ZK7&M_!U*^;ktAW;Hy<8Jp_R!#WcT!fu#k>Kr3B`QVD7c +zN2hJh0q)l+JA$+*~6CJQDlKIesYAsmaMMUm8IA5x-zI@SE1US6{PM?BjZwfDnpmshpU?BIk~T=?=4%}bgpREYIS;-lc6Ra1SXjSI`5 +zHoLN8*^Un+Z5MmUZPA+py)l!c@B_K7n-8QDZ5j)TK-R!h$qDK%P_N7XUj0h$yrXyV +zWXapt4xyEOjm;-r^`S)UKCGItcH6gL+Y8QPU@ +zPQb6%%=zh?VSL`E5~zUvnTw?GMcSO0cPs$>YQmyV-XJel{CE^Q^#&B8g*t~#?7Pt+ +zK+|oDq_w2=hb6-I$`xP?QyBgH7tT^n=HYltklT+eui@l^*4oi6b|$AY0}R{~$Hsj| +z+1^x^lf@f~E=8B2ZI{ZULwNUqot_pxY|3`tt0>F*KCn+6F|5kp~gXi5Ym?ho;c6FtNG9@gx?s6ocn+dj)lC8dHyzzKh +z8Z>l|VLFJE#CySUm`;`l@hi^ar1yW{bG$MYCX|EW4|y4^1f{{?gSFO&kI(#xNM!{Jp)#_!l!Gf{*<-a@M7{umH-ixWXou*#ri;zcWj**JyiE +zU7=f*bi^#FRhDF3=&Ei8ik3=9VOXVM%5~Xp+d(3IB^H8mgB13+?c11!zt8%4(IBSB +zMg*(3Myfe?%-=}@m{6)|9*?K$bE|F6KZF5hxm3JTr`V=>z6%W)o*SiBdysCcNogCg +zmP)SyTmc&(#k+jmc6b?jx~a&9^8--u8+vB2{SdbUTmJ~`p3=R@1ZZ$#C!M0E$gGLm +z%@k+i`>dx8j%-xk7)t1*+@Dh_Fb@WYc?f$!g&Q1c;;&<%Fm%jg;W64dwh-7c$#6D0 +zQ$)e*4k!8&#jgOwD7sCA+itubk+VR`G7NRE)#b4b%KVF*7rnC+bP|)&huQtfRzv07 +zV0Co3#Pz8eeuLyTNL*Ai8J=_BF&06S-Sm6Jg!GMZI)j8M?)lW +zI=wnJ2lpcEbi)Nv9MQCa-KLPUl-7uNJx{Rho?*_gRFwpSFS3VU_TtjMQn+ +zpAZZ3Yi6g6tBKQvimC_6ktv7XNjg9`dW8O8fGD=mG*5xjP2;C-`OHHO>#wB&^!ynN +zA|^t%AWMz3*F{zlCkyfK6f1PsxitRvxv;gKLg(_S3jsl!%4|LN=1TY&#pB~*GOf&v +zO>}eGt-U@BUBG~T+zo6#|FC)__2Ss#0VYziO>$wDo8JiFBGY;|xY&?CpW^J`dX0hS{fk>dCN-L=q;x4U$+cxqzmh+%s%D)p^PAL&-gltz7DFGkR}b +zbl060D46J0giHcemq&*6N|3$J?mdQ&*O`izJhjs1(qCKo2E=mQ1?TT8No}?I3@A5h +zHgJw@tp%}2qy1k^$GUaCX7R4CA~bM)GY$p=5#1kOSEQ_%mE%r(_-m!3xUvJJLw%jU +z_2rM=`_%?82%p54>tB{a%{ArByR(llrDWLpTLQHk${Ja#Refct(0_eBleq)$V@=sw3oOii%%&YP_6F%fY5l;E6wz_RX*cmlo|r;K)i8|s&05|3!qizfQh +z`>zTfnFuh)s|IZcOny5Ds$EEx(QzSVipBE8Fq(FH!9R +z&Y=SDTM7!ub#{a;)|McLPzFaVdf)HyHbyl~5P3zW(&z)(-9^G=;ddXk8FY#cVO3w# +zUD)a}xp?WnV~m5jB-=&Ttzf#^u6i0Sx!mh8@BMMK$-kp8ym>suK(&!Atov86g6BRP +zJK$wMPPd^qI6M{A+85i0x1Vg4Pv!=Yl#>+iY16wmyg7+g+CKhpT&6%fWbF98_aB?x +z^ZRdV<;Y;*8%%=JC6Ss2FN XRP%bVd2Bm);{+V-UG2(j1C##^CBMrc diff --git a/panels/datetime/data/timezone_5.5.png b/panels/datetime/data/timezone_5.5.png -index f904cc29887cb83d0c02d0af7c9aecc13de64ac5..5b5bf77bd88b5f8a6b88fbaff2d32e049762cbbf 100644 +index 9b8f09427697ef96b344c10aeff76221d7791476..5b5bf77bd88b5f8a6b88fbaff2d32e049762cbbf 100644 GIT binary patch -delta 154 -zcmcbte~xj2gd8I?0|SHiljHk=6lZ})WHAE+-(e7DJf6QIWulvUAp>)OPl)UP|NoaC -zkv;)b#aI&L7tG-B>_!@pWAEwW7$PD0_FyBB!*F=P@8I(fSgwND#DIAW3u74=r#Blc -P1F80O^>bP0l+XkKEdnL_ +literal 206 +zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV4TUw3>5Kxa(q9K;w&OqnxnzLmKz -zr9-ZWib#Y=Wol`P8!nhyxnSasfQZ0*ocC||{_wr7xGt{q9IkVo^E~(GzVFX{`0F=k -zd#%lTHv<5mb?)pbR{+pF000`9n>K>KTtDo-3Le%+*`B+&3H-!wy7DJ@{@t~+-cbOs -zv0&}1aeBxM8~}TwPkTkX;ew+Hmm`A!0)b!>7J-QhynHRl1Q!{SJ$rmF0BHYq?$pVP -zu{kqCVK4k+5+)bay6yjY{P>FgfBs&-D;C&u%er$|H-hr?#?FLO7%H>2tMtc?-JQOs -zzcmi`mTGGl-u&~=KXz%ZbX;q+K6qi{@0zzxp7|XJ_`%lpHl0@|j6px;9JJlouOJ+d -z$L9&_1~4-Wvam5OPYD-sds~9M)4*l^YpjR}9xgQ>JOKbVep$C305<7;8-By#8wvh@ -zh@r7W7XbQI`<80`6?g%uFL!Hf!!%PWBS33hOOH!my~|9`jczFPPGdYLA}&phRU2hb -z?E!Agyi?R)9~&mkS}7s^964umlC4QPX+?5|YF;&6&uAvkX!emY;ri>JKl;fFI59XD -z$@=)mh9Padi{Z4tkxIRM)_@W~sK>R>IjP^3c*2y8AJJo*b+|NH@$jr=etbtB$6kWB -z=Y9V+a^rd+w2YI|E~&$QzCdP)SL=DvvfcQhSYM97&l2IGlyqcG#pv-@EE8jRJ6yE( -z)yw4cU|Bu2KUbt{;0aT4(d0?3l%bjc|De;2uEzaazuN{p)pLINWxfzUP#AsM^WX^g -zYwelBCvaB$Qr1`H5Ts2|65{-9eyQM|kz-gujo_tp%3j+~!BX_zf@($Q-0je~@gS6P -zwZPhkT>1;0jm#$#jXlyRJ)uW+0vi}?bgiOX&zI^E-s}67sqv_l(sQ*o?Jl%GaqYn~ -zyHU~om|1VczKN*+JZfDFHB|TyJm6Uo2X-|;?{1^^6Xwd -zOJ5wj^Ds$!A7N&us(anTj~liCp={jh{L9EH8)O;(Jj-}4*OfjTzB>N~J)8KNMB~(T -z(>2^2ZveoIrE!ql&t&APMKUv37GL!niT`lRaHnDsHR5#1Mwqe>oM}4QJ7&C4M->}7 -zH0I(7YNN??BsBLDjUt-p80y?&9?;|Pw@3wPBZ;JBvsTJ=RR!s9T -z+^H*p<1hK6LjK-1^pcD>`B%>NKlM)lHy#*3)94aR6ZxnWiYsO1!9Av1c)Gf!s|ruG -zWCHnebvYZRrMrF8&;MMjmAYs;QWh=GiA#XBkLM|gOSWdn1nI|mLMo&+FMg{Hps@~! -zzG#vz8ty_QbhC$vEwU8Vsj#Ot?u52=sF#tv80($DrzGnIn`Ed_KepF>2%g096)^cN -zUH#W2q;bjPkUVh(CgNTO^nc4crpiv<|DqWYmDtPo?~f}Rp3kQJn-Lxu6lXX7agc_- -zu5#hMAQarxTj%!b2P3fNh}ief*lmLpb)dh$?;e-|C6%;N#AYs6@1YYBl?p@@e&*w? -zR~Of+>icA)L)hzxBS>FCoIp`KYc>BDu~z9J -zV;_3tSoesv?15wJ%^-BvQ>{C0Z~&-GIHZ-@^~UAVp%} -z4q@f@N3kAZPcO#HzN5kC`I=jt=kf=lt~eN&>rgKqn&@6l=dHdWlSU)dnXY^9WI<{} -z+CeU17oIteEN2bLGNUk6hTO)%*$C&}7FSA_mz9+VcRI@uw$g*uHYsCZnnI#Fu9GDD -zlt?N2O4IZ(_k)m3V7ODeyv!|p*s)iNBO53oBlT}Hx5Zuti8WuB6WzEydG}^{y&??} -zCq_Z0>*h>o8F45yS#}buxM4)8>YPex5gBR^C5U%;s;A2pwO=22!F=P#E^re3lTq_u -zvk?ndTUj8Y70gw>YKv4r7Dff95mN@bB!@=}84y#%Xm1}vrPMbZl->n&b{qg+S&-)B -z>V$M9%2F-0J%}`Jt+uVo$j>CD(IGRxTA|3HHGZtCO1B-JJ*90c_q^fa-MNHj>iFwO -z@qpA6q^nviPTo2pW_gDwX&C4sXqry;RnxrrlAGGRyg^xQz;&@~?0t1=IKOGx-x6Lm -zw+qIN3DO}O_a9_!*$q@Wfs6ez3~5)QTyWPijydVWI>_&QrK@3U@XF&OT2z^tK?Y6_`esYq -zvn=7PfUyF01o6u=dzhD}i-EbD12su~Y@W~BvV!y~IXX*q-^)CzLwz#DY3yTW4Y;x5 -z1qSJnZS|@Or14I1w_CMCU<62A!l&iV~(H^{$u;Tv>(>`ZA@ii>0)FQ`b~?V@0lRimcv -zKkG2&{D~v*wlgAbnkzO!<1AI+#~?OND)L0@2%nNbvA+^8&XdcFX{-GC0wUGwS3doC -z_WQq98bHSxnVB*fYq>ct$hEA9m$Wpu;M8rr3ogeIt3ns*UInw}+&vJfouw -zlfs^+BELo@$A@+c$rlapV=OpW(+-3QI8&_yDDq>UYi{zUW(?b@9@)@ng0|{VKCkWT -zSHsypzI(%%HtoexZ}*)cB!N?;62>u -z8q~`j7*br>=s%Ps=f7{V17)i?noXTx6)EFsOm&+E#7{0E>9Uqzlw|yf|Gq*)1E`(+ -z0v)a_MqyFC-EJA21(B&VX=isxv|5rlmw3AGXH!cZNpETA=P62q&S5mDn^ec7mQx(n -zlRz40fJ%5q2d$;jy*}Z!Khu_>1{N?viJw{0R -zGALkrkcJAO28r{EI9RCyLVs?Sq<>Y^XZHnp&g1@-ZvLC5xzu8<4R@|QS -zJcd)iW*(C<2kAzRAh~MzIV(Fhf!&T2a8|#>qF3m2?PKO;zB^ -z`g|Lb0_rDg+1nb-K@xdn=M-y0)pSqPktqC}Xi*+Aj0lgctDml?lxfeZSLA3Bs0SPL -zid~TR^-#N@b7h$l$yxr6Mz8cfy|j)Uc!*;Y-^1BD!&+V`O&LgI}YO$~N_Aq1eZFXy}^50K~*0PcZXc&Jz*niwH -z?CJ}mWYPZi@Df9Y=9UNMYewJ0fK;mW0lnD;pEY7B;QMEEwvU1vyWQt$;=L+ir;tAl -zwu)wsTWo9I1BOj%;x)M@1|<6(ye{1%?06MuKUG3yH!lT*scS7h)gFeX`AUdlZ7h7^ -zc8hn&e(@+62*y2ZQntLMuV0IcK9o35hp%wcu^*`(y?b>^Oy2tp(E4b5xCKsy8g6Th -z!Fr;Q^6r7CBL0@7_`ceD%U0LY^F1)#J*7tSDd9#WNPSBiGreET|A{NJi{iOD%#~u| -zXK~!zTd$ehls;p111&LP{?vlT;6Fh7$5rO^f={U7f2fsb-ETRiEG=_p2lh*JD-(VI -zGm^buqAJ%hxz{O&MV)IEM%ly!=zeNE2`**-1zn>MM=*h%;q;bAv?>;pR&$)&)}M!K -zKhp&E)0bY3+d*JeiboZ*Z+vT|aF(Bddh|C3kgxjojc2kw@4g_u(&r@AQ)yi1INhSoTkAUB|R)H8!7I#LD-!6ZGjcXox2lkrOM{M+Kd<$5hPa71=gcQ`Vgy75S -z`{**h52M>u^%>djVZSJ=3sg|UMhwOoX*5>7YDZ7V8SqdkZ3GoY#f(6!rgbG0+9*Vw+F@O6Mm -zrqv}bI{FG|KGMI3pjTRCfX!D7z_^CaL09ZHQ)=( -zfwzwgVJI6blzL%8YJlG*JzJmu3f~4h2F(9qK1F>`WSCbkxD@v89f-{b(bA&kFE2(7 -zZN~(ZTP*kNDAfPkc_dLg!*#96pelJeD@v}D*h1bsQJq>Hn=Izbp1HQ_qZY25 -z@mXIFxT`f=>~aF~JZ+GXwrhiv14!5=tq?+9qnTT2E?L)v`GvapMD{T@d!&TXeE -z1K$N@ia5ZH{Vpcytwl&De=hy(#n)vQd7gm7BfvUM=dupD-(Ck6@{kMY)s84H&im0 +zQd3+;%mt{dTyQBxam7+`-w**6f&0bZJUx%kbpM-s|G4)r&U4-uIOlUdpYxvgeQ?pr +zOlm85D+mOVGCz0v5(p%|4+IiRliUn={14l%fj~RO%}@XKduZS6Ao7WGkn03=Gc&;p~9R<>oxpoeu1zAjQ$>N6166ck+N>v*#ran@RfO=+{1hhfNXVy3lS9n-H +zZx&r&t~Xe8>Q?-2sVx&-g*|@1+gKzLUVWM4pX?*rvZd8w^PqV6(`x!8myb +z@QOVDjj`#6zn3-`qDVm^&j#b)i2YkO8)9G2?;o*$%jRE+T?0z@i)-_4XnQp@&5+a-{*L&GQcVkvVL!x6gGjbzPx~(e|y1ARmpfPwW=zU-f_tb +zW_r-1x_o>Q+Xi1cou2aT-Qd2l3Xrq +z?tax1-X^64UslQa0q>H3RSa}W71MNG)#`|gqhb;^qg`kp5hY_vO7#Zw)mm|+iIPrI +z+R8=Msu3Reh5pW=$hUu)$9F2kot53bfL3!769dI`jCN{E&1Y)y@gJ>jts=^_LKYJ6 +zU5A+j0jYVuR?mKJu7FAs*523m@-PWo?8@l_4`CrU|2$!RgDvFK-F(rD^q~Ic>E?XI +zAAsO{j*Sn6FD~6nI5_Cgc*8LmRqO)mctPW|dHNi(QaG0HdRvow-(21U{O+Xhfh&GA +zIk{a<<<}~#qr?->On}}%lcH`v>u~IU?5RPxUXkW5p5u}@9XZ&=xUUGEqV6|0b+UM; +zBlfr{N~WR7fhh)%>S{{sYeBAlLYBespH9j;+2j{B)pqgvH_Ed!K2FAd92=&}wyqSU +zc}Z4#=}`;K4@y%{x!FLMLhM%w##aPaLtkk90Fb9N4q@FxJ$lGQE1|Qw@lt)1%)6*e +zy|Cc2Fwy29ds8&b2^H?#{?N0{W#Nu&lz2+52>Ur+2z?JDuGiXJQM_ZJ$k|=()Ke`A^v}FJWhi +z_dT-Z;}ijdmE3LG`J0?sn=wNNqXs@9YD~4W=@mOQu{x}`FfU|{P-!#IlN^~nd-xuk +z-LJ=n+ZH#FJv`)lua1heHk0&H<-CzTR~S)BCVYuTA&Ut&95YMy*?WRCX_MB%!ke`-Dq6iq(&-LPS%~@gL#g_QNJpDE1lU#=ad?F#m9a`!)*hQ|JNfJ}pBC*q^6m&G+gkAo@G(-J&{ +zerxS)8HA3WO`jqS%zL;i_4@U}_XdqL5c2`tavq +zjY_xsc$OittiW&h7`&RxYS+&!qPiTe8^Cslq%R}1|9vD7fwZf0L^M{#%{U47J^>Jt> +zaxvFKvg|BYnBEiFV>Ea7N6<_%KuVL99)A<>TP?7bUFF`<*L-jv%_Nl{ +z-qN&`M=vx&U}5~_r+6d_XB@ulX*PtU+tZ=7RF`Jr7jrAU&h)0JWTr%-SI_%;4=j!dXH1`Ah +zdSscFaBRO-)%9{$OV#Vc`N{8ajK$uuOcSFLwXV66#SlA<{_@tkqjK%yu$xyARfNCv>d1MOp%I$6K}Ic_ +z!?jaduG%(_iu-Z==#u5zO`u>$s_X~z4328kf`Li)20wno8rBlLc{GHg|&0XD-i=aidlpdIx&d=|j4j9o#em7`>QYHv*vWZumh&7e7J7FNrn +zZDgVKA=>zCM8C_`iOW&jK{E)y(Kh1pvN{;MICA)D=#8>eq@x~Ie(=*1lfsLQ@q2xE +zj`#!j`m2_NI6O|kLJzJ~$`6?^d&(p#BM?ikWyf!7r#*V_QEV5N +z9MIVtz}T%e!v+uBUDl>mhPYJ?ih=#yy{L%p-h|^b>fHc>5RY!Povj77!&oplz}pCF +zGN5)zH}Qy|)!KcpL(k;oYZnVWPO$yW5MKyd1sDrdN1Mef`$F0sN_&b!L{zGOlZd~< +zdDGWWOCO}!Trv3M82K_VP$=#BbhZ0yUAt8LiW?7E*q+9e4LUuUZdR4mRb4IYXS`i4 +z)HOfV&RGmOC24CW4;&IlErEi?8d9VM!^yVpuY}HAcktOA+cosY8cwjn)AO?(9w0HH +zLikCbH7BcjG&0JgL(sRTax>vLmUJA=g{4n+2x>^&OC;M_)C8`0(Y-^yGF+u3L8X+< +z5{MOyaIKQ%&<`GZ(hB8rtncwFj{#&%_g})Q4See8JL*B6yOlmxOGp`4^Y5d6N>$*R +zV!ek9FHXldSJ4Waw9R&jVr*$4ei6(nWreNr5)6ITyf0{c@Gv4~{NBvIP>JZkz4vGw +z(}wT_2h7vAFWHWBZ`-1%{myhd`~l?@$}3d%Y)-<#Ey`=fD%*gAdw0GM&{BgsA*lK# +zj!nWcH@SQG0YEbvW)(O&+^Zvk9c=<#TLiJdsSs-@;aj%~pG$K!{N*ROsBpEjyWr0B +zl}5fo`$V6iAA@j#Z*RQP-)2K%F_4f{(Rj>CRWmjw7I}2Y=c6Vc;`_mU6(~0smwg +z)>X*tt4s`uT>U6dMp2bT*NwVx>Si7yP65n9GXo;7gwVbW)Cxx)kl|%Zle4IkGA{D3 +zMB||)RW>h@_|&YP@@SKIWEX?%Sjiti-V_jQB1D6`OCA`!jZvEDd)HR}6<)|sFOhCL +z?(2X3y@+1;YyKyCOWUEwQrY<00GfzqLG=wgOSJkHn%#in9?jK*cJXm;s=Dl*e^w`* +z>f7r9t}&wMxAEzVfp&sW@78nm>KOHXpf`_Jdt243x;>j}ve#M=)g)J-kyMndj>B;p +zP*E>2R-cM}?4TiNeS{k0EdFAj!32gfvnRVyGQ<`_~| +z^O~+XdI%u1UCvgZnqR`sWZoltDd;~>rrg+8%cJW`WgA~~9PG5sLJuC;gG(@c-V^)o +zk9rZbje`;FQsFEDWW +zkom(BwZ&Y~YAMBsw3?mg+`n0KXcmL+?PF +zl=YdoVrj0@xd9ijyau$kEaym=s@!(<$`n(o>}+QwZ!}~mXraekg_KHRbnL;+&rOl1 +zu}Y~zIWuX1^b1?%0O{_UGmJEsbWIW8kEJ{mjvPN9iJNl@?9eMOW@b3eRm+(oDnmUb +zf4lPrdTr}YP$`UkmT|`8@!V>YxgK_l@@w8NiqAxM1y0{MDxmM-SogqZBdC3`YL|uk +z;0i3KJHBRI31Y;|&QBi31~V!E#j=2OjundTUs<$9!n-AauUr$glZV+^rP@x4#j%Cs +zg8_^7+cT+p`dG@S%S>P)W3}6s+#BH$TBQ{&{`Amg;4YxgYnDKPgSMl1d4!_hhYwUa +zzt+{hCi+p%Wq_55C+ZlUY==vzvRUo4PYwtOOb!Jpj4w$|;lmKQ$i)M4``X!)D0Rq={=Mmnjcj!t19kYuIxy+jdh8wdz)_r~5 +zmyhfSv@w-*rKZZ_R^BwgO+Lh~UkTg**+h(6aGhRrm=jd9xuNCmGxjAj=&{O4cdJNG +zO`P|3<){cK)@V7lV?2Jh;^iZz5+II6RFurv>{^7I8x+^NMtfB>mh?e7^ThO?6#7D0 +zw0b;PargRVGak6*BsQ2Y&fr+lUiHflG+rpki_$#h)3vDKI2>NXPcwO84hEW^^nBd> +zpBM+QJ?1=dalq{77iB79JS)`;HaQ^BPYUo1p$QtOxpC2@5|a)5Kxa(q9K;wb?wLFH-kE#v#9CPz3kjYQ -z1OPzD)Wq->034760KRm{K^|pXIy0CzfLzRs4FPU+VpjtX2|P5hLjeH)yFWXh5k-kN -z0l)#K7DnI+h$u+;yj7Ex9{?Ptni}fg4jH3UFi8V};*INTRO*4?hruAhh`E*+>1^+p -zhf^#?tv#=5=H^=4dolr?)MM7Bq8G=GUDCnl-nGXq3dfH`3f^D5VEX)n);ruQkZ~hl -za63glcy~l1IPKa>lfst)Y8`@8o~Y}tGrfXtXrTFpi+w%>TtK9Y0Fsgb1Ok9SI2^!h -ze<%7bf{n!bG^^?>l5mK{K_zqi4ukzb(iG3 -z)3!?Q52IY=WW}|szCJ6^0~nfxOJDIvSicOub=rQOF;4T@Gix`HQ^SPK=@W84J+RyS -z=Gm#{SK(mB<7KgSTIP+wn-ga9r$mL$D2JG+L?uCeMstj*TB~jI(Rp1G*PXVxGE+FQYz=H7*Ted{yoos1I04?0Bs*}94kQ>#Wbs7v_-cs{%c<t4BaQV&8$_XK~87e~rKIj~X6c7A# -zQ2^4Y;4-sw?ip3c>DS!JJIC5UhL-3B>Ap%?CNDzW5@Z_=!F;0s|FZH|p?`3x#askw*JPfEGL -zRnCNVdN#l;+JvL~e@J5q0ZOm~q7n -z0y((!P7Dq>zcN4lPPH@b*;&kp(}DKmTM0w5uiW?Px!_O@vE};p!D(L(2d!1(azgCc -z8I1A12D!e79#7U`K8R*PAy)6ODpRfZ`j#9kYKy9;$6{Z|!~C*_)ALTNd3#>lpiY;T -zEpzN`!YKml0o(hGwJr&EI)h?!<@46Z_u(}?dt90Z6uMwkuvgulfBhw_=#$)5#iv)U -z#*X28aVdz?o6V}_u6>z0{!8Z~ukX#5;n$h3@#W-#J7XM9kDYgq#tvkI2;#dj)T*DO -ztNqY?6pQKZdeWMosi@LrU*mu8k{djTvA?z(YFxX~#;nOpDbF}(Ae|oJaUHx>tC{kk -zetytXz3SIG9PqK8Kh`qSflJz_S*m?-D3||yM=GPplVFQR&~y80J#ba>WNd-K{Kpoa -zuWi@Ovp4k|-HDfP4;{H$uzD&#y{0~Pg -zB?*mY^x5{yOGTAzxJZ-gotqP)Cq#tbM9G^Mre}-={ZW;6w{o+z!{i!?8M&6VyGmM1 -zK%$$TI-s-6h`sjCQy*Iu`y#YsjNsG1;Fo%Jt;WY6(hH2%g`49uS{@6-V_sO))y|W8 -zjI?vMZ=E`02xdHyX46j&M$6dV#>!mzz^;yy0(+4c>G8T5-`;1TiLFnOO3X5o-?MLZ -z-vbw3#ddh5{AtQDrlMnzKc!8zg#(q)7+iCbm$Sj{?{!Ry%jG9_yJ0n#He|aVq2l_| -zj<@UKC}DoSjLEzvCnAiAh|@=2D}T4^{zDyhd?nif4(T)WVjPwICJ6Zg-t!+FC-`Ej -z=(E2eWlzIaUV>Zg$=hMAsA6Q<;%b7r|63L{Nd?8n$BqiQ&)#*NFJKMfTJn!9+DFU4 -z8WrJJavfuAUZVqg_m_vlmg66Vn^mT!X<>-RHTXd@FD~e!f7*{m*Sr2;qe$3k0(&J= -zX*XXN;+0jMOqWVE2FoN#6Sap9E+}XFWd`}K1anC-=qi*!o;F!ROTLV>)h3U!SIaR7 -z7_{`xd{8}5!DF?~F0Aw4tELSlK&4VF_mpZ#?hBli4d2j*Y(uR)wkS_|ME3-Pq2b_5 -zQ*j+!RCm(Gpr(@dM{Pb>=&(=e${Z9tigzTJY+3JaQ5{Vx3phJOq*7ab8}I)7c;bb` -zNE-28zxdjRp<2wKYVpapIAGs84`VubsI8&!5huk~fwpA)7?bQOsi!|hs>0kgsAwo- -zmm&RJVwzPJ(o=Wfu -zUwu+a#8~q-{aJmz#51UB*!A?d*u>YV-=ldk9~oI&F*}FQwS4+2kr&vj_&>{&E)J%1 -zNejXoi%8y;jbnuMSGR3?%%XqrH@w`6pBQ5rz_`v8yEp8*Z(4+Qh4K8-;+>>nWf% -z&_cJ15(5?L`j8x9VVpL89#UL=cez19ZtFPWMrPzfBf@ESHnOJSK@m*obCH8GA!F;e#y%%vdAg8w -zaoC)HC -zmyoUAkmr2UlcBM9dTHV}cLkio-NZyo5~oH-Qai=eYMEAKI|xKCSwH}9{+3$?g#vQI -zZwB1_b9=JPcHA91iLHibSRhWcg#JC(OQF89%Edbu-{F8S+q|dsZ;y5f@8Rav=`}_c=MwW&}@Sh+56Yt_+!2kdN +literal 3471 +zcmcJSSx}Sb9>zZ+mLNq?P(+0!0)iqSYD19eQL{=6Nr^-#q{SJI^y;+BrvC +z?I>#4PR7zxE{=1C^GP=0o_MHRi>}`L%3w!*C)5bGYeZBF4c*t%#)Jf(tpps7 +zv^fP3i2xJ|fWZI=Bs*VJ{R#Pp@P*airvBpn>*^mHf6nX+tN(j3>dkkz0fN?Mad)4K +zNevx}4fDix6<_sK(;VMteiYz8p1Vg)azAdmJB_63%&F_{h)T)-8Uy#06A*@P-NO4k +zH*c`hC8;8#1b5kYOeE)M?2ZaODzgZ6`II{pXm2fFi7q}q6Z-H`jJN$#D4r@Y(;|nB +zizfB-3H0XDc=iL0@X@BOKqEQ1xt{g1;)a8$p=cvYm6w-kz;yW)FiZnQb-K++CTl7~ +zVoNq{$_&MfczJrNBVVRqTW4MzHGY+fy^*TA4@UL2l$Zb6L#Y?iW&m%Dak?6J-nOhd +z@v30j?nbKrx4T{=?b#WI4t5A2VW3si&CBmyXz&eNSJs1(&h6Yv!rG2i?|~O&5`mQk +zUfKF!sk7}wk)!l;_cw5~vc=Y^&3yOlboGD&yg;{rKF4nucaYIcm~kCEmZe +z<9vPUHdSKM^YmWf0->Qw^h?_tGg!s9&l}rIzS~_dD*oMde<$Kl +z%kNsDXB^G>gJDAsU1#ioBy2b!j4#g(6@$GPm$Askbvr_xyXF49+RXJ(U)nj@v( +z!xCw5qFp$#zbNnw2oy=e;ksD1J&PjA*$|P{L^FpZ&Ar=xAmx|+hoDaB6NKLAhQ}RT +z%uwWPN>}o+!O_a)h~VT}j)|K4QtR^58AXi4=FXOSBHbMlEm>V0mhiVBXP0^Ww+V?= +z8Tq^ePu%iInTmap!`>Pjy2lDyc7PA-juIr#l^guTSHg|4i(&YcM@yUm2gR+X}&#$|meZ|!@VqCc>6zOX(OkJo}D9dy3 +z!Yz;NY5nlR<5sblQt&1t@glowy<@#e>!S%2aZR|;9EZ7eXQrfK;Tne(G4W13*WpH~ +zSTMCW(>;Qj&^Bq^h_m^osW{Ir4oxP+ug;OXGElE{N8o2Azd9~UrM>4bARr$aq9G<) +zkUgFkPrQ9r@>>6P+mv@9GdcbP)y#-&tAc-1k>Q$wXVcQtR&F{4kuOxyB$Kzv;f%#; +z#gCZHAoXg`Tn#HX(}!~;%fOFFkv)YuXf#$IV1Ljb8Qc5gqon&feS(V#LGvOiUgv>M +z{!Q{J!vt;0X*gm1p+Kpi=MsX5ME__#TT?A~q?SwxvupA%%<(!2_a1MoT;NwKJ!sdK +z8*b%gRK!v=wiebCE%lD%-+B6NPsDkHirrBOs}rutx-CmZT>4s?gNE)%!iKfi^oi35 +zBJ4v}Xl!!)VKk9I_qIco;W`#Hy&jI^0glAW76&K#4{}p>RcA^m*zK>Mz +zgTA1K1oKMb(Tgp0(c#R=cJ;3;`mT-tvTfsC$zzx7LVL?ynr^WXyz-|BV=GUEm|k%R +z^GVwWzdB7qjIO^+MOjG>oDsSN&uIe5Z9#E@YLk*zAHC@kL+CR{1F8DS~2bI +z=j&a@BS{-Kj-GLvM_t!dnA`))cQv+754txNy|Kn&FmTHTfdqT4dyS-!!dC=%9x%D}j5wm?gY<9`j +zYfT=G@{bN@7kC`w+Fzd=d^UJ|=#zQ>PE{Yfe8$x9e7~eB1O?8=ikKy$*S5tk;oM&X +zo>0TeccT_J$q8xxQl&f&1J5m~(MV?hI!xeL9nWIjq`mGsH6kTQdBK`$va`D +z;oLJ~DSoKo5Ot+NQR$^q)GG_}Z151aYflBI4jtG3=9B@n^V3fuUg(4uoyCJRVIC_Y +z>#gFymv!UZ$ei11?mM9Jq?@V!_Az2YHXVO^E4|eS9T7N*Q+|B;{fbEzUcjE$NxF2)KD*IJd#4&Z>BcH{ojQNePwJ~JDb`p00D{I#->3uL1ou1)%4%Jc%fiE!^W8Q +zT@&vKZWn=y#l{(vGL>S`f??Wi3nYzya==Bpa0mB1Oje)h_1aN} +zfyQu?Wi)ypO?sqv#>;1)W0B(58IUB#$I1-r{uAktUTI#Rj*ZJrys`dK6XC%U*<0?@ +zw=Z)N%$M7{HKU>wi?_Eq9Q@w@z~r*3igT6*F!d@xJJ b-2KPsyX$*zK*OX2kUKqH{an^LB{Ts5EkgQb diff --git a/panels/datetime/data/timezone_6.png b/panels/datetime/data/timezone_6.png -index 460f9cf116c4e949770c213d9734e86db0170fb2..5b5bf77bd88b5f8a6b88fbaff2d32e049762cbbf 100644 +index 41504fcbbb2dd40f33387839eb03e752d4124d2e..5b5bf77bd88b5f8a6b88fbaff2d32e049762cbbf 100644 GIT binary patch -delta 154 -zcmezAc#d&`gd8I?0|SHiljHk=6lZ})WHAE+-(e7DJf6QIWulvUAp>)OPl)UP|NoaC -zkv;)b#aI&L7tG-B>_!@pWAEwW7$PD0_FyBB!*F=P@8I(fSgwND#DIAW3u74=r#Blc -P1F80O^>bP0l+XkKPM{_- +literal 206 +zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV4TUw3>5Kxa(q9K;wWfYkJ~rY0)l+9nEEmhbQpqP`2AW~ -z_WWq%6PFv&3yVIv!PD8#I=#Hlv|BKxL=|`4RoX7P{aUiq_Q_+u#g)D)j_Q@R8+Lww -zy!Z9X@GB$W{cIUFPwd~koGRIoc7H@Y2o4eBoS3_aZr)wl=Y1N`+jl4#nR(-2!PCnQ -zVs_J=&+5_KBgikSbM!$yI7JJB#JxQW8vGfZ6g3^f*8#_NU+m|SFU=x^wUvA)dv&MO -zUU6%QAO{IxkhsFO?U3|}ZzajGPZJ|)Z1zqb!Wsx|gP;pXjG)-x)dOdQ7+6RM!eX?% -zA}6v(=~Bj}4ckQ_NHP(8y0bwE^S62|CK+p8%-Q?s%Yp`Gmn3k3446SYqSDu`uir2> -z=3hn-#Cf>$ug$~YMeI%Rw8oF4?d}6{dsjrjz|sug==zhQoK(St^^TR_In~z6U{E6! -zen)+WFehHHJk+peQZIQJYW$j9aB@4tNO4vOie1l8f}facz43Q?nPviCr;7xqSkJ2r -zWA<*qW5F4pgs1R6By2IFzvM~W8pyr3U&hpKJ@C}wBLbUm!aZl#ye8L7&Ja_3HLKm~ -z)GU$3s~biLRd{il9AD#CaU>Y_8ky#jmFpT#zJc6{ -z=KgfpKi2)@8|dXPhyT67M*K?@N#hju{zkF=;2a?L!#(Q}!Lw+7!z?bE*OKo*-llH_ -zRt+ueE>~^1Gn1BN5KieYF{e~yvh^F6fy=DzBdSWe2&AngJv(aX%se8qz=14W_Y`&* -zG8!EqF~>uib26N(zjv{y#|+$W2kihBie=^2=GA!*+VshT@K}3gfEdLhRBJi6 -zca=}BCyy-7XLW1gZ@?r4R -z<&6R%@<(l9Ic`VTyZ|LiuMnz(YXj=l1lI^|8rUcDD%iq?!1MQ9@q}!r)iJBSw>8Tt -z#kJKXGwl)b?lb^DckAMifOZ0L>tQ^ucB&x;SAaMRw#WYo=;FwZ&m)-|oAkc4hV{)H -z`CEJ0A6!ZS(h(b(@xJ7dn8hUf5k72DDD=|-Fx721rF5o!xYnMA=Gw|;(B2u$2F7k4 -z1%?XQ&kUxssPEo*1W@1m_41K+R6fm~IZzr!HzM!&lu`3)7bISx1iy%tOsS9BxSaLn -zMa)03k@XcoR}cmNDNg?HA@F~6=1k*0VF;Q_jAQ9Xtas)qXEz|&T~26Djx0fyaH9Vm -zZdcfRik4+LP6(3r?&6Lh6tc^nvxTRarROXu$tsxXOICQF<|BF_a4Q*~4*C_c=jNO? -z5?GrI6+ahz<-JEw*IS6K+FKoMRbQ{n?5TG;hqX1&xWz43*ji@yd+||1uCjoBF4!_o -z9xz;Im$METs&+s~K?7IIQz=EldGS&gTNs-@7dD>54yt -zjW{W;c}&u(Cg-eEoL_&9ku(^qbLzu3=%vmwffm9H^hv6#dGT~*_&~yZR!XZj -ztSZ_REhixzRsv#0xJ0X}M}wXGSb<4i6IH}io%U#XpkOdwx~YFmqZ9zKl>E^1VPY^@ -z_ts~X`a&>xAu`v2H;*W9YUf99KAuO=%Y0C-_H(DIIICrM?|SU|4LlOFRqhkz!CT=C -zn|qp5I%YqoNg5x&vp@A!vKCgUXF694#fT>b^`VX(dMckYnPRUuVt}}5aS_uK|3>3l -z*j})z)g_nwX{(skY||_!$~STeJjSIMi<8SjN@Qd>o(x80d4r}f=X+@vE0xi)D@Djn!l`E?fOI*_ak!SmX;-@l<_SmW3`odS4Tj990y19 -ztV}0ljzf;&F8EE~6BeHtyhh|dOO5rM$o(R<^M{Z^q~e|;)7VDI3Aa;FY5zs?A=vmU -zL)hjk8+(KoK$q4zdh5|=Q>LQ5Bx{$|p6TItSx^{W|Gp#?W}9D@{|k$kMInVZW@9yF -zvP?Qkio;T^Ng{b;WHkCW*F4`ZR+fl@13hqWXG`(XzY)NIn95j -zC~=9(^18^DUsAhnDh!7WD3d}tkL7Ya97{?g*`L~~G$N+|8VPqG%NUDtqZ~yQ*Df5u -zih|&3axN-<0us~>uhzEoW(6JQkz5{gkfpjm<@^1|m8ajcE}gAGSG!f#1%-!O64Tj- -z8mVODD&56qML>3lD-W=1kkNlUeco6fi9Z-`|ius!<=1|q2 -zo;MK+`&xRhMggf*bQ+Nz$-6JswZS`xzA|^*yXL5T*jXSAuy>bggKmscV6^M(3qdBU -zU0xt@ien0cu9?9+wBg$wypMG5r!z@E6cD4W-|luKajlM|ZD -zVtU8^);*3{C` -zeaEj)Q;7WYnPZPK^*yG)kbk}Eb`(!#r>ZLKQ_xte*`p5i5Dx}qQ}3)5 -z#YcrP<_b`W2XniQ?@z_P^^v*R>zk>@WmzhmOgzpUDyyWA=kkYB-UA*VuoUe7n@-tj -zRG;Z(?vD?qXJdSOo_a+ATPvv4ud==fcDo2g!8v48f|doejK9E*&-NLt)ix*4G?|P) -zJxiDb3~;)Y)j%lO3bomsWPq9nDPo88PT6lztkiq9DN4A{*^S~N6 -zj-~UbYhO7em@S98r@p@0g*}U<19_`0gzo0xT$QF48F%Y4<`B -z+x+WWElU$8AAf&Gcq;J!2v!PAP$ld%WU$Vr7+$+2p6Eb6lYB0~3`bqRwLbRfOEh_e -z*K{M76ZQL>EO{=$@Dj=h)&i3sf@b>H6>AY!oO&&#a?=IP_Ao*cOc);A}NIbD}>W -zSUS^Rj;O1p8=sza;54tNwKuuN&<@0>_h-y6#ws=fA>{s4XZ9}&mD65KCC%{?sOvf1 -zH8v)qiceb7F5z?XcOYce-{At>@)6xC2JSxu1k4zDd)2#w!|Bl_a|eE*<%GHG=mLt1 -za#&AoWm4DjcNB(fM)to7u{(32>h85-L>t{rf3|?_F%`!mE;TL<1s%;Ri|udp3ln<& -zD6J)9DS-Q_C^rWkHKV>1r?pFQ7d!<65@bSQ=bV1o_1*cB*o#psA%&xcd`{+Sr>-|| -zIP>Cki~lP%o>N;+28_R!VNT&_`rFu6AB#haY%K? -zNM54UD6az`eLeT+b;z0?p}oT7b>+G(J`iEOjtV_~s{K-mQbmZCRa?YfcXyypq>qtS -zxeDm-FZ5JsZ*3{o_<|QBIq4lR1c1hG>nAHiDC-LrZf=fWBD$Q_c2TA)NP4s9WABc` -zL10*{7z{h9CaUt=i|Dzxm%F~etf)&(!wNu|EQ%x|{pB>@Ek4#$h+G;;Qs3;U+b5%b -z{5KN>nw-(sT|rQPwWoRVEP8D4w3>tU+^KVH{~z;I+WFWIe+VeX#?`(AE2*|u5wnon -z5FI`tMqP?SZOxvS(@Z)^YA8EVF*hHGtklA2VVq-DFRxxYj~`h~mCLQ&!kU)oa$#Zy -z{pU}hqbO~@{atusFW1wasgtX^d;*>Rae30 -znu_qfzd^(|CR70Mpm`Yy0a;;25uMaJ^wh*mjs&fYs}OO=?v4cxw%$|H9(PrxK01yN -zJvYP^BwA6${f@iycLf*R@$2w&{>Hz6G6{Df+JN&_CcXmTbPk(-9N(q$Zk8uNQhm4y -z^Fe|EXX1#qA<1(%cJq(B7B$~eMZ`K1Z3|^7j)5wo2Nz5U; -zvX$M8Co15^ZJxb2bCnjp_8^a>1JX}jA#2sPn=!H4ujX`T;*GRd6kW -zt&dex*GCU72eYEak%-#J_Fh7X6Ms>UK-%Cetp}+Vb7Nn$|9T2?Pr}9A9@ZAylXr22 -z9Vf>%uAGfENx5ooAn)HW8Qh;!w>a*nSB{gA&J<`Q*WQD<`s3LqZief$hDCHt+3krV -zvi3eO35^iJjgRo8_EI9k&5=3UGn*mep8NBnmD$hpvVnkJ1N-`a^}=N|igfG2ZH*mO -zmJc1GPixVUaemtNgOKgyu)I}dHZ -ze3D+(T^5HOnZz+k?`36za?+?n=}|z~BUIVmFlBLVK##A@Ckm3zvudhwo2_L1nu*rc -zty?qbw+^Hj^YCb(@tieA!1+8^vpoNbJ%Z3&Zne-UonL68-d<@f;WJW|<0P3K5o*%R -zIdJZb?rMYZFT)D8#Y;4z(wFMQOS+D_GKB~99>OQCT&B_QdHK*1BV=+qqJ`=$32$#$@&8QfB$dER|>nvRG3b -z;5?&Igj^80hO13TlS#Ef80+%2-3k#hxa*F@x8Zi>Yq9qQw=PB(;8u*A -zE9VD1iQ13i<46sj$bpsF_a`%4*lD?&qu}dL@)FpyfaZJh_0(OeUiLf*h!{uq`l|N$ -zB5G!9@#rcZ?hBgTVi?AM=I}+NDGk(I7=8Oz1L`a6hU>>G?aZ5&+^R<%i}PO~yvCo; -zi0K+=(`&v-dBKkS<7Fp_k+mO5$lg)yk@l&SWbG6DJ -zplMFvTL9^`jDQ1LJ=fmO+iO6e$^*c%;uQ|2u9KK7USI3>8C-sJau -zdIxa21|~6QxnQ5Jgh3$n{v*UFoV1YneWDtqQp-#?f8Sg!bvzp;Yg|)}F5K?gCLl$# -zOpUD(;shNBD<&>KcY%|VnXJW!s-B;l)4T4id!8Gc63|`SOlI`wipBVxP-Dd8K>g5d -zQuRfJu#w4vE2)kf%TF5wkN7?<{L# -z8@XHrR6>7EQEIn>ad@f9YGJc;#t5$lS8mwmA!5ju((j&Df4ytqlO|#2EP-&_6+p~Hom+< -ztdD9N+x#(D>&*|?%vOS*@nt-|nsw1q-Y|&wVp(5hJ4YZqAo7U-H~W#Q>AN;2SBEhq -zoFB4PeyQM~Un(dkM6AyOv8E9|u7CsSN`KH06qUoJx!^b&gMlaC0O!`{+0B1phX!Oh-a1Ix_{gFsSbC-? -z?c(G$kpvzYLrpF<53yQIfg({th$>D_SZ!yUfI7ikJ_jDJ9rDFhAE+7kBY|%D!q?`lMK;6p1>Z>u=L4l#uDlq&w;sDgbvUA~Nqt -z@Sa$s1t2+P+o4C9GABiuWEQ~GqoSv?43^U+KYq&CAbu06Cj~IdSbAqLw<$(sQMLdi -zu~OkvPR>V(#=0*(hlFr&(Vqp;ra^O0PjzNlR>1MII~q(s7%WPNKw~?)>%-ejQ^XW8 -zSRsX-jAQ}s^Ft)03~?J>#XHRadisouxHq)l2&)S!%XI_bLr44yCk;hf`8}?&_*Y=h -z!pfOvj|(b?a1G0Ksw&KIeM^c9ANH%b2;lm$IL@CEW+{_zPG7tmp(Hr+DJ#-)3x&q3 -zj!%+a)0`icPnMIFSDB0AJTTqqepvc9fyJ-?mZ5}ve%xy1u(YwY`t-^(@r5(*DI1^l -zmXH}P{5gvDR{srTx(nZHuI#xhP@C>wZ-OitAny>>)K=B~QP?MG(*n@{-IyVo`JbLv -zkw#VcnCF}oKUy94+ib%c-zS4s7ZmIBSFK%J1W5g~n{vI^ZylfZ!Acqr|0qbxStSu^ -zqKf*5P!H)D?zVUQx&p!`u|9nUVe{lFLUfpuC@n#6caI_fOF&XZv)qlPo~iA -zUCt(*BJn}GMVWOTj6nG@ox)f1lT!%&N~T -zP(dt08h2!wm=Ty;<@u2#ZtuQ#nfqU+RH$PJoUIc=_Q2sECdN1V2?S1lR?Kp!qj^(F -zPFlWj*yoH3ZOk=j=Rtb#SPPVLw`RiyF`Am-s}?G*x(N -z0m6SD;Jbi|9d*e+cOEo)L!x18!Bg2~jZYZe_zDu*wXK;>$ribYh=yF{{;$__G*}~p -z(NptI#-gZ|ja{*@OSj%`gLb|TjK>*lJl|(nrsH<#$~?;x72xp9DX{fuKi=U^=;Sc} -zHPjc8Frc8nL2cGbhyhRW%8kxB@#3|*k%CB`pWGGy1`~n -z=M#K}Wm7=~D~oNkC5Tz|Wc5d{ALXK$9%(qgEECaHFPKD+te`9(V_HVc)AiU4C&+5k -zD`r5$g)L|{%ze23=)}xgI9-kT^iGIRU%3%X(A!bZ3;pE@Srm(PRNKnZ+QMvRjnFya6)$^?(> -zJD~}X?0!jfeC93v?u$;rWcA4%+L$PlJc$4g!=JKN&|CY@n@yHK8)q*F(N`jWxKeW@ -z6fwyX2tny>(X8>XK*00wOkRo4jp^}ejXDcYS(syd7FNV)f+CJ|HVEBP+QY=S^haeL -zm(-+;1Bf+>pt1779Jq-8FMR%s-;B*vN!wiS0*g4qZ%q5Pc!e}PPTp8F%_YrpT-Cv9 -zySN=7je&qwxA3hN$&Xg=aKh3&fpYubw$ny-h(Tiqt`+NvDdLazGP;aK5q%Sl$)Gq2 -zxqf)LPn~OIN-w#0a>|;YQw(4(uzG5dfk7MetH*qWu>jh&|wWIygJNxJ9$WETNvP +zh4dB-7U%2BW2!Xq$l~F8N?y-rcmb=juXisGfwDy4~x(YvpzJmf +zC{z33L@VXb{U9b--rlIB(U3Uoz~bB+`BVtS +z*E-d9mwFfH%n~wTjJ6|Y_KE%XPweh`E#;$F`C7e+g?auI3Hw~;<-c}4?Sa+G_1>ny +zeBA3j7s6x=(EIl9KajK+*xRxeCXL8Fx7qT>P_%4Ibct>6bE)INr-1kFotW|PafP9Z +zh3U)YGDo2E<4@Guy`SDBVND9QgX4uz{p$J@sxJX*Zy!x?n_JiH-9q@>q#w +zhlr%|*UYq*=h@Pw>1Y}&qSPvs_h0LAiiRnQqAc1017-S7$~gzlz`z1aHely#QFvNr +zu8P;{yd;d7xDjx*nvWZJ?H?lJ;AiVhjlHMPUuIjgGkXNW@>8kq%)G|BTTV+wBx&Bb +zJPXrV#d6nM59aMdbM7ZqBhbKW>d-@Rlo~tSo1j`TP&ol%1gyOZYy}DZFS7p!;lDtT +z-H?GG`&9s~{-OEL!mfGHqhAHc(p}9j0>t2-hX^oh5MTq&b2pW5Ori9`McwNsRY`Lc|ZQvdS`HItL~X#tI5ypI;Q)~M@Un0x7UZrD->0m +zH|O(ueme~GqzRhD#m1V9R>H+|SvQU%-!J=Lrf4C*SnI(fj}&6vRn-Lb^jxIK$sfs6 +z?fL>&pirLEGZQLGecx+Tnzk$4@ARigrz)MHritQQ87+)?Hk{7$GAxTi>j3DKDWEW +zdB5!grd&6F-<;b}6H>`n7!?cRjtwT%pYs1+U4<3^9rY0Sa)jF1^e1D{x%64Y&{pQ= +zP|SI$_>y86CFxR;sE_un2)WDjZD+uv%5z4*Cnv@{ReD30k-Tz%E=G?$Gm;fbA&wn=!*%=a>xUxTfMxMmAKjfqUhAKn +z5gg466RDSe7uDKVp0cG?aV}Iy@x&#i>RZhdRs%1#k}IT1>Y;EYXa6N35bRnVBi<>N +z0~;IQp>y<1zTlZ&(=Wvl5e0tUqcYg-Bo%)_6noXTo4vve4dw|lD2AF$3o*8Lr +zmwQVnq{a#NlmppNNLzACI-P#$hg&U3liGCdCX`+zgqJ&$I%i6UAWsu?Fr1&Y8Z)H$0OxTPZI(XNmf&Dq@Mf#PS?}}bSa?Q1GxUYL^vQ_r +z*;81h5-^;MB&Jvp2g|f`s_F5>@A3ryt-eX&-mij)WZBE>i4Pte +zs!DA_nYF?av5F#c@O`B8$I$io7>pQROcwTmZ90k7Hmb52V^7_Dh=?2uzMxN_DM{XD +z`C%!z>(jwV^(4EKcP;Y{^8v!gYg~XPdVu9eJ(|e@UM5oq +zT(ZfrLo9}z|2Gx5LZL27W7;9h@qtF{{>E9!mD<5N+QQB@7juTs@EXCd+FVujrScCLJm^I(%I<#r`LXwhD?ScWU8Ts?&jP`NuD$(Sg0vlwEN79o +zYQ`24=j)3qHw5ixt=hi?y1)cf?M>hE5}1uwr$AT!xh$s*_0PzBLLu)EQn+`=5QjTUv$ +zZ?++D>U=xEn3dvFlhMbFr=)%7$|)Hmz}6I?@+c1$zmY#WNoBQuF>#U4n0vH{^YN() +zSNDIvL-lvtbR7DymB%7;vID}Fq8n{rug@B$z*KITW6@{<*?UgS{FCNx)moWc(6)8Y +zgr3#ZC{R}FE|*jl?H!lLn)1@j)(TFM^0uHb-5Gv;Osu8F`ZHVpVS`Ya3x%oot97-q +zl;-@ks}2JPUZsYtqNB~dyXsu!lkT6Vv`7gN4U3#Yb= +z2nYu-R~R&kXFt4tDRAE1(U{+SVIVQ9x1x|vcjdyCShZ24aZPr+#3%p*U*2QO=Z1yz +zR9o+Qnr{8;9(k~^S}4s}r#fwaZnh}+3>oN$P(49XSzXsDvuu%Qwy+fyt>ftE{wurs +zquq78w%ShRb>@_$C)12JGx(+x%Ka;PlcpXM*Xzo1M`lb_#`b?-wxFExp0J0Jm-0Su +zJ;o?m0uTAl0)JkK$M?q2SWV3^ukXanbK6dS)+$0s_RYUHeKGca+M!8Gw=4`pQGfaV +zNI@JfdOC6aMswLkiHr=f91&$1VG#_6Wa3j*KjsM9BF5EtmQoZJq8G{LB5*V1sG8!= +z)?|q{-pIX%;1p|QWODkB;}mO`Kl#2sDtKm^4r@D$hwh))QY{`NE{-~i(AJrVi2I6j +zIR~S|IYKw4=0lWKH?`{ssiN&n=C@#dAA}I${&LdVlR6yp`oFE}+7O7L`fbqon8U*{ +z_2i6>PpWO54U<(=%Gx7X{NikP_e<&%Zsc8j<<-ga0Z^&AKWW0ddE`wapD&)CRrx!t +zQzKOR9Ib?2Sj^kS|LptT-5^89sp5OQDL(Y#v}Uvgkt1BwH)y_3H*VphT^rhfA6(N) +z)rwcfG2yOX`EA~#aCv2^&9e=X$fFMPP+78~P>kPfnO$HGzTC{T;NZHQxtC^1)kqO6 +zay%%cXpRy!@vxYFW&_J+p0C!wTN^^qDJVI=c!^yE*q_nAXo?#l#rxHFkljf_-}p{( +z{8OHv=$*X&NS$Rfe#$V*Z+fYvCV}rLXvO*0$YgoL^}gtYRfYD5dZsfX+M2;w&enf7 +zQk2=1_>g*geW!n>au~yZ77!Q%W1)}2NK^3J$~c*VhwxAGD(52F$Jt)-Z?LCE!vTVB^f)-s51w7QWcnqyn&VVQLSvl +zz+e4FS!3#Btf>`E?J_LmbEc6q^+!D0C>5u53oPFbXzF3Eo!C_sFJS +zXw#!LcA?`gPkT-2IjV~e$6}i53n%QJ3q4ad;DnBLg}00M3_K_kEMT`8x!A##SlH%Q +z+RidrN-w-&=PueY-9K&JB)gW|ialecMQlLxiIFjVbb)%Vl+hcfv(p;iXi}G~lkS-Q +z!Eq?oII=~2GjZW#(*2tcQ1_53(Gjbgu}0C_X~Y*n+!ziagO?;HyX->C^X!llyb>Ue +za51fz-`ftx?tNL{HFXrp9-pr`AuXx_<|_%&vN6iBv(D^PV;gscFweay4|RU0Kv&&%+DNY +zl0Zwz`yV4Jl(A`?yxUYg0ZZ^*7`v$V7~cre!}3!KM`}B&s6xi#f&_$$kHc8<2*0rB$Q}R18NGpGX~s0&f7U3!q9Cv0 +zmi)2ZB?BMTgs5@nPvV=>L(m0W{JreSKT39Ie0fwGj>v*u>I7x#M`_8UgRYsi~9J;(`Hva9^N0KIFplS%%@6D!7;_oO^$T)t&v@Jge- +z;qC5hKkqMkaa|X)zV*vk;mJyFbtRo*FzqzmBzMzx4xT`KovjyJz}2@!-fk7{4HD|Y +zE_4f>gGrfELmg(ND+_8^0a>?er}_Gd(ui8ZGRnMa>`~1^H!6;fzI#!hI->>U-A|<# +zzqiV1i@0{sw6tyP!3-=y*_QsN5uQAlH&i!qgs1DQ|1eXiD64NNpuVyKx>+n+zjRzk +z^*aVD)jtzHP_q5#&iddoiAyy>JcR2WG_Wd@LlLcGZ%`lP!koWUdoKHg&8OW)RIEqB +z?3BmG*2Pi8SK@PlT!)}}Qo5a>de?>USe3gSS<8LKX^FUN?Nc%1p1kKW+=RV*7|8k7 +ze06KW1skF`S+dqh{tm=qtgO}6u~S8&F7zh26c3K*mRe@wNfb}AZOTGAF29P&Hy#u~ +zdNo-m(V&)F;Khw*MeGemsB3Chp=g;H%I16Gphb?K7u;|NmsbyUC|(IgwrS`Gs@ros +z%SXh{_$>Po&`M4Y^Q|&r2&iv34%!?V$0%K{ZP^+Ay!E@@_rVHQNm2cHQAV1G)7Mr{ +zsJr9%XX9ps>Kai`ol1Uaj2OB#9and=23~~-Jq+(>)h>p}+{grcTA(4%5H!ua+djBn +z!xgSff1~m|!s7W7dR>*C_gjHFRmJ~Z6jW9S1G0r-j#3Ajg<^38{$u?-0sGt&f9eeY$kV&qS7K^d7rE)+*q-i!?f&*VAyI}5;-VLf +zR#f3fvSTKh3uJhZkk)Pxh-wnu?)4;(PIeTF$fnpdX4=;ZyDx2&j6^GF^rbeF?jMC>YRlB)OREODJzWODR!Wrtn-{i>G}qg9%g>*a +zbiT&S*kf~Tg)gO!zxFP~uKTQJM{=TxV~GNo2#H;9sh@c=?_BdHcR&O)ho7I3GIAiF+5;apbG%D&{tV{J%@!wR&$s_*WMJpo=B0m|4& +zvz;p``e*rz_``kxdGAJO=S+@Yq3ift>1qK_fgkHQBF$)zqr@|wUELiMKT_RVK#kxn +zUX@F0j5;13Q`j+B51y3kQ>fU;ih?H69DCFV-N9ly0{ngqQh2Yb&ah*+wlsf9yFKaS +zy-~^aow`*Koqjs;$Kr=z0#!3pJ9pv2cvZD+6>_<3qJkQxFu2H97vPrd{eG+AJ9c2b +zKf!{@tmR$Ley^LykOfJy!XKt)kGvSo2@h($kaf{?@$X}dkvrS8b4Dp5CSQdT%Nd=8 +zIsGRN=UbQF~!sruox+qs3g<+=t=+nmr?cc#odK|0=! +z{)6aXKC)vpx#~D3xO_d`4uy5=q~Hy0%^RXc5AR|aEBo66D#issQgI_2uhxw +zh+`!JnEGoF1y?eKmUhkyYC)-Uj7V0gB~s)O<=6cJV}(1`f4ojB@2 +z0?ybzqjx`Yw47)y>@*a?Fi3oZx>Vc5ni50${Xv}`v8D;8i`ai8Lcw; +zS;hSnK$Zc!mEJD`bXsUg0PG4L65v0SPln_4R(MA5L6o)2>XH6>T`xhFe`8%Zvf +z6hb!K=k8JSsND0vu=)wwPXXlK4;X(D{#^s_{wDf4WQQ#Ozx;9Z|FM4m)%O49A$A%0 +zlcPU{UpTtE<`>N_S%2dGQ}_k<-8GQr|A_;pCYh>r5-8@yvNi|MlK|?v_O%?O<>UVW +DO3?yl diff --git a/panels/datetime/data/timezone_6_dim.png b/panels/datetime/data/timezone_6_dim.png -index afcd2b38f6ccd269093b9367e49fdaa72d4575ca..5b5bf77bd88b5f8a6b88fbaff2d32e049762cbbf 100644 +index e99f5fae1d72a9e039728aedde30eb4456923fa7..5b5bf77bd88b5f8a6b88fbaff2d32e049762cbbf 100644 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV4TUw3>5Kxa(q9K;w_0dcS|ZwcdBFbJp3vz1Op!vdi=QPOQ-_T{aee77z%; -zrmv@M0s_$sfk1Q^CI+BqN*Id-K48Ziy4s+Vn4~@efSB*;S^I%NrwV?&bUHIKKm&Bz -zU*ACI^fVI>Se`>nn*I(5#4(|-ebp@J)5c72a*hkOW2>a4WVxr$`7+kICp?AdBFfCb -zDaG8&!I%PPEULIz{^cUeMGu(NYuo&aw+Sm%CNEuJj>M`jSxaUnj!&!g(Fjg4X1%DK -z#Se?QEz}tePA1M&%m*2LBuX9i;%-QBOL;`;8d-IKx<6F|2MO4|Ib|Od>^_yEs_C?K -z?rf#KZ>m^h69-60sDl}XRod=;%vXp85Xj;z6B7swMx#L#nDRUonn1txX9w5ACrCIe -z6X;Kn^Re};HUgBG9oTKmzyMdh^_m-kUJ$u^{w4whfuKLcNeHnZQaC`9ap?kw+T~gE -z!tBY9R>0sz2X#)~FsXFaMc=N(b$V|Oh>#(x2_MOiVcEK^TITk|9Luj6v)+SX@Hb?Z -zg=EMq*LLKim7h8RivaV0=P&#IZv0DcTrDoyU-nm?&T* -zU%tj`sm}14_sw_X;pD2(cQk@7eAp -zRr&nR{A0S%qx3yi!Kq2FKV^!wk83FdO@GAx&>GqrvDwLc2M5Howiaf3LUnoHe-&s$ -zqSFobk}5ws10wez{jnQFdS6=tZAlluE`#mls551DKJGN;b0pv25j_2YkpZN>3#f!mDjv?2zCmbs;B4*{LonTW -z`e>!Y;S;}MM!>F$uoU&3VR_nJ5h0K-b=!OdWimP^uBWQ7TR3y$rntsrCz$i% -z(z(QfM}^ktfe*Hh1VuqK^+Y^<^#UI_l{N3LDW5wBc@Elxx7{0T*}1#a4)ivt)IM&aLw>E329uz5?)1UObc7|g4{s*wx;I};;8G5(X8hN?!kBU@w&Ia -z&ELGn^kOu?-N;oifHG3kMpx!246cMxd6rw}Ui)RW$N?sRjDfVVphas${1JhE{4 -zf~&(-7;P!jXV%)pc&5a2n?qB7l@E{FC^wf$yUrQ7hv&j}s`Y -zOv!0$ol&vpK0Fz=B}A$P&3}niK_*0OrnAv_85nx5wjE-(p-vyv)dyyBbHnSx7SEP! -zX}(sf^XO%3$SW%~5N$ccj0`#1!#$@dYsb=u_7I4W?pT*b=t7f?X?V+F@YHSD)d@k` -zp*-z0FrPzSR><205n>f;HshU=J$B1!XCQp`G?UHH6Kxn@_t!W -zk1msq-B}AkAkIml&=9Y+HD1|nuPNAtK(7eDxp>)(BT)~f(E8wI4I3*XqmW;#+5$Tj -zL)evgy05M+f1u50=~RtK2_a_7qzIG`rUd_84Gy&nf?3<;uKoCXAAy5W=RJV;u@3q? -z^tm@KTJZR$C2$Ck1CsHZ15y5NKJM<`XE%n%$2N4sUZn*6a=(Gd!wD#QZW4?7zMIHx -zD8cOD7F@Qw#C_sV!r;YJ!Yo6$8gz+|XmhW;7udA$@)+;@Z`U;8Mr^C!I@+c2|AJ^X -zk?c(uaN?CgxX=AjZByKp-gUm=n>FI(6_ujayA#a?scPBpO=45$s0C>Z+=W=&$l5y&f3jVOk?v_ -z_w2T7+e=WnWz#ky0LX*Qrb#n+ZHI$IF>>(H5TsLfZrqGA%UY+{7$pyjYJ@bFXerCZ -zyfWXJMNU{NZZ?LyFoL;?rR@Ut2}P$iPukVm)>A0R3Xk*o((i(`WwV`fm8*J#5e?=WURJ;S>5Qhkzx6f2q)%~1X?}*h0Wx2?E(KQT^HFAKCWb65*d|`0up%|3N~Y0kPz~2q%ovVzZU=DFpBG!oKb$jmA(5 -z>M*?S@U!of+eI*V5EB-KJGs%1-;cmD<4{K>CpKgkxGs>)nn%Zk%YCO#z;cTysVbSY -zJLb*|h>2HM_J*@oc>^`Xm8#vZ)*?y!+O@S~W(*9^wH`?m7VB_o^2@X7Q|B)ir;r5b -z>6!-*^7xPE8Z&G|BZ6sU9?Z2WzcUOgnn=4>D+I?_!BRo3GRFW|`b$|(aiHq^-fbB1 -zZBtN8B;MwBBaRIdq&m|W{1ywHne@5*sz(O${QYRO^ob`q5*B4-@?e+GBa+VKWcl7UXPAkj+TXK!CKbr$M@cTy{J+QwJ<( -zMBKdDk(67B864%(Nt)i7PmQXUa>}mP6hp`Prf44IU -zFl|^3d3=M!(>JX;;r}2_QsViIr|;5M>3t2zR&vXPXK#;w6Bh!JMJz^fzWvn)G;6}{ -zWF8-lX4UufLDD9Dx0#FkXV`+rwVUh6WY&zXLYe&TE+3s5*NePCyb$#9wLD9e_U7O2 -zKPK6})jY{4+rmgXcTOtP^fE41b)JtldfFd)n(uFfzFK-0X1tzX4sH>TBxgE5?tO56?XG?-YbvU1p?lL -zM63vFm8Y#rkoWh=NlGqZ3-gx!Lo5vND@F2JwF9~zYuw3ePJ>?r!>Ld3EHz-dm8Z6E -z&tLC7l=uC`eCp&V|1B&>L9$Pdn~rY9NJ4FWbXFLTQwg|-8&77>?_~iBU**D!YJo`Q -zS-GZy0P+FRt_H&Qp1EHJ@+B&zr!_qZ;z-0xPsXD`{&pveJwwGn^>0ne*aYg7TVBAr -zcMt77tHmGz2oE9pgf&{O`kJ9dC=zn>qXbKT%c4^H5Opc8LAKp-4pzxL|@=C$zz-*7od -zz3jvRL08bH`gps`^8f~g^Xu>xvGs}PsiIXzE?{lCpOnW6YbwJxdL3^gU -z5#z48s7;JLp=R97&`Zh%EWoW67q9y-qwt-Q2p;x>k-kERrrS*k`{Q1y!ls-tPzZL_ -z6Jxg_ah#6`*2q1Fec|4&@p_58Ixo!G)Lu5AJS{A!cO$>of17TZq|~bG=79>P6cVg1 -zK`n$34({Kll9QQWT8smV@##cAs7R?dK9%lP-VBZm(1G@3&Ed246hKPnxhlD73~BEH5cgRG)bbn9H;zbPR39&g%=K+AGvAbY>2j7V{vtZ5I<_ -z8FzTpeM7)tNG+=#)6@cMuH9i->5?F@Z|{!_n-p@Vn`k!sK-*Ufg -zWg0@cAn5fm3v8%+pLi<3nvNa068Pj+>2Iy}i_FHd=Lp4(1O!MrhoLnCZkOqKt{)2e_8xn|mpH6q7jMZ0E^RceY<-3t+koA@0dE94S -z*7MJzZuEia=xU8jhCGc_>wOfMXNkaVc&;Fsc^_8|rmNjOl$Dic&o7-*E<_;EUVWeV -zBV1Wpvn3_|=5at~`Pgl3)xlic29Ik9^#(Sl7nVjD{WiYa+HIf-IFS07H`Jw<88`}J -zneZ1{pMI$TIvc(}i*@!ic9Z=%8Tm +z)lOhaK1;AT1{F}`nvQFbwB)|+E@XE}#8SYLhbmdced(;f5hm5}ERUUn9oMizo?*OY +z!$Z)$Q`)9T$*EHq>8&qg4Av7I96_A3P%*_s>qTdKgy+65jLM&9==3l*N6TbE;&xJa +z$IviuEJotj{Ox%BP_b(JBSHAB&_negTbI5!X$a?9u)dfx&NEyqZrVG)-zQQ$ep4l-`K-Y5Cqa|{e;U1 +zEUN;6qspFMqM)y2DdeA8Z{=Ab|);l9EKv*)r}J<{-IssoSblZc~qKCnQ!rd +zim*zV`>1f2{k#5CzzC0De2#nuR^_(Fj|EDM8tPa;5QtImjaTb*dfWD60W?M- +zYJMY?4%loL=ZaqT4Gpr+GCf#MYofH6%>E-u_=nDUnG?^uu|r(u2fL0=@CJ(1PKBR_ +zKnSTD#D_E`M-M*W`+;ncmw%}5j`4v?te2^;xkTtfO>n7RP1w6R!K4@IX7B}(qz(Zr +zg^ba@qX-A}o}t9^{SBi(LHi58|Gf0qvHZEiUlKv}(PNP2S}rAYtwM~hw>L$9Y&TVE +zd+Vor#dt7&AxL#yb(U%F1+c1-6;zZ|P|+mK?%cB)YFcPuEFC7tl{L +zIKX@e>nMhpP^5bObAKu;y!6+|g)EEm+FHr?t#J)|Ob-Y2^P6y_i>YT{`%{Bw7oncw +zo3#9IxM#d7Fgsfa-d;BwqoLu)SkCe#c|L_e1YZ;{@jGiWNq!4j?5oIzU@_oY%9+B& +z;dExJ;m$8sf&#BV>Dp397rOWBtbqgoQFZ;QHj^h;=vudnDTE=?o%Zj0(`C@7IQa))qQ#94Z5EtKI^8X*z4|n2LtnF^XT?Yd +z*P(Y@k-?gjezfRz7)qclB!=FwbX=WN8pB@Btja`B#Obp-?8vIQFOz*;3=BvESU)Y% +zmVqSgy5+S#0~rfhxnz8%Vue)4?sMzX`aAovN~CHapS;Rluhc&xLH1UXD=eCipYib{ +zYESwzjC-`Z8}1wKeNrAP&&tlsjqaI}!aeO%^=Ix57r06*!I4QmzRus@SV#MgQv-W! +zZ>mjoJc}s0kr5zplDjv!znesqHG8);6_^padpN5>-UHCMQh0)V;^sgjlmF5;DgEmG +zEtK#$Q|!Bl0998knt{ic#7em +z-oD4h*=C0t&0yW_?{-`5T%hlvV|RFX*A +zPuW}yR4?&$D32UGPNUK}a@S&FXRm!+CaX@o%m^>(k|zxYL%7YDP(-AN?#G>9o@!(-Zxw +zYI|0fwL6T?=$(CGB5_w(SkU8q$#z)d82_f}!`{48!Da&i=PB~HpYh8Jz?C9iVaz}D +zu^qu>Ch7s-OEPi#ujIMaUSPJN^`JRhg(7*?@J5cPoA2p~kZMYQ&6! +zg6z-7b1zpF$gCZ0pligY;$uKNljC>^a^?JVr{!qKKk!TBai^8F&gKvC_B|4w<2yZo +z(<$>!6~k9p9+Yn;lbZi%{6clMuj>sS0Wd_VO>2w=bfhKk$znUd}oV`{Z9TWHBw%XHJTwLuO+#T!6Ll1zZK7Jwv+o2>vE!wWT*X* +z^0GRuqgNkJBuHD-gftAI#%uNmthGBob92ffnZ|LKDXOg4DCL17!fmrPJ3|#0tuSP +za8CMgn>OM$Z63WluloIjYHkDb%>%C5Phwj#*x*I8fg#7YcgHbGp`W;pmO;SftIczH +z>{;zRC1;;wz%|af;awB_KJ5@EXN*)&js?J^K%AUE=n)8s{I{hx`^X7q-qL4%dEiNe-*<23YF``O+rDk)jME@0jH +zd1bYC%hBKyESktL$+SdH1@daf;bpk{#$z5VB~`pnN1s~ihmy3TddLBkE#D>0d5x-( +zK?-C%@=Fx$ZwpSk2hyEoUQJ|rVHdi`K4`KrJeQ@0f!eYDO1s2i+qujrxF9^#x=1hk +z*oLty7o=B+z1_}FbBr`Buc`-NH&9d@!j6}bHgnsm#D)R%4S~dHGGWPkGbAVk$6PvWM +zZ*KLIy2Mm3i_OS1yo#58Mn1qav*6Zx%J&wd3TtzfY(qbknRuiAmZq55T+ +z_c(5w)U$hj%I#rw{>I|DaX4P;*A2!&gTn +zXj2U1G?q=GHz7(eLOikdh0^Zoc&^-36kw&v=cf4MEt`I3LE%)!qoFm++|zInHc>RH +zFD!MgWPdphF<1xi7?7bt$UMGhEUOk29bs`! +zL^F<0JV1&WF~u+*IMr`AzLZXbMXzP&UMeML0eAY2nGfERlKeVyGGnl{*JY4n_i8ye +z0QT(D^yUTgj-M)vU?`2*y`#;Dms+}=DndZa-cZn8ONnx;EY@|mrBxF6e(m5kLV{{C +zC3RhFw8nLcGW~kC+Uv^%L_Y;|DFf}vleWcACeX4e?X<;9z&!tJcRMw$076`}VYVgV +z%iXHcii~mdLPa!}H;osr+~kvR+FYh=h{2eF1HQ%piPRg(oMHW3vADC_a2033U{TwW +z^79^E@Ce!~f50WKG#=Pztz(vWN3j%$D^lWY%$tyej#^`&GnhGj0S+${cuJRqgB+a_ +z7Okl7vpa18lon#LN9{)+1J-DH8>fUZt`6_1-BytTd{dAOL5!PZ!ywwZ9vW9nj3b(wBd4JEAGiAU~^opdIH-+ +zz+mn#S>HBRidU$;gyzVnbGrf0@<{2x>?NCT^rDF}lhXAj)hj1_!ht5HV%}n(E109p +z00}A&G4$Qb*_Z$EtzH|tCgZ9Xc@6k)W3%zQxtr6I18haIy!Lwg^`}zC9VXIeKL%uK +zIy%#8)M{@Zy9xAEa#x2bs>?=!2j`!Yx$E7yON@;H-SR`a_N_-v|7g3!oWj@Km0LZz +zID!82Tn+7z-ibiN=fEWSC!&rTw|_fm?lun}HYMBsuPxj_5X#j`=5>BF{DNtnvl|90I0O4t9fdi~vr +z|9Thr*Y5w3F=fcV3Mv5A-^%O%hxFf_{(6$luk0>J{p@o_1bD##nO?eLRATtc{eJ?A +C!^af> diff --git a/panels/datetime/data/timezone_7.png b/panels/datetime/data/timezone_7.png index 239115af9bd7e3c508a86102c587276ee58b7961..5b5bf77bd88b5f8a6b88fbaff2d32e049762cbbf 100644 @@ -17079,56 +17054,6 @@ zqQ99vfnNh9?;ix8z~%pJ5`HGSaS~MigV_^a|9kOYs}4T8-UE)*Ke_tbUtRPXG&$yZ@s{r$04-@#}wOyZO&& zTz|s)zcC>6UjKmgFOdH>?dyB({{<4+kKju>bbQ3E+ca-L1 -zP+nfHmzkGcoSayYs+V7sKKq@G6i^X!fKQ0)|NsA&ACW!*An9=pFA&|kqUgGKN%6^|iP}ItbPf^kkD6+`Y#WAGf*4w-B9&<}24t%_C -z`P}xo#sBjcelFi=IW16Q#ndT$i9*x1a*GSP3Bn^6zfczIXT>{X1%M^UO&BMT?DBYp;y2|5f)t -zT~Xzjnp;&`=;JgYAqIwmy*{~WKW}I=ufJRA|LtejE2p<%&&7&V#nYBm`RVFzn>$D1 -z<;>u|`bWGR3=FeN_-wwoROgr2c!`_YZ_sPmuw%kri~q%sukdeXx9@se -zDncu3^4687{rc=~f8w~}J&Wk*ljqVmuf8eZ6sD=8z`*cFdLOT1%dWQK-(0OOb&nTp -zd+2q#@t?8&)bMk5cdc!1>WGR7FfeqP25YQQjlOkG-fQ_|+3Wn;t3H>;?oD=gO5EzF -z1u{nD>7VxXdef)^(I+WIkyBXQFnt@>|$*Zikn0XmCAmZ3p< -z*PdX(BR - -diff --git a/panels/datetime/data/timezone_8.5_dim.png b/panels/datetime/data/timezone_8.5_dim.png -index 7f1fbf4ca53186805df663ac7bac09f792ec65c4..5b5bf77bd88b5f8a6b88fbaff2d32e049762cbbf 100644 -GIT binary patch -delta 160 -zcmbQqd5&>{L_H%j0|SHiljHk=6lZ})WHAE+-(e7DJf6QI1t=(4;u=vBoS#-wo>-L1 -zP+nfHmzkGcoSayYs+V7sKKq@G6i^X!fKQ0)|NsA&ACW!*H=O_WK-yVywyrmsF=PFtBKOx;TbZ+E-#mPC?(u_qgDA3VafR}G#w7KZnt*!z$l(w`?m?6O{ -zw$(#XETePf!l%*A8RbjLw;X%E+4lX9*t+-cpVm47tsRlzpM14(xSsix*8v)n7#8e! -z_2SD;&BSU=Rzfx&CnmD_b&A78u@uqR-*ddvF9#_tdLhw=zC2%VG3e(kAxdzbU~Qs8W=PoE4qI$!-~=_o|^pEoXMpbnxnv=Y8rkmcYS{5o#{73oH#r7`mjpPtW#O(GKr_ne)5VLc5!hDZuG}&e0SZ{o4NOi -aJDRU8p8ddQ?oWP@13X>*T-G@yGywow0Q@)r - diff --git a/panels/datetime/data/timezone_8.75.png b/panels/datetime/data/timezone_8.75.png index 2a2917fb69ef8914367e0ba4b6839426d345fbe6..5b5bf77bd88b5f8a6b88fbaff2d32e049762cbbf 100644 GIT binary patch @@ -18074,7 +17999,7 @@ zMu^N~W=!x{`sj99ZPcF!lfCPg^=)8i3p29RloA#dXi%K`?o>|Sv7b|cVY`v{wb6U= qKi4f8#Py~|#3hQ-tR!ggK6(Gj!B?*K0<%woEb(;pb6Mw<&;$U+s^l~P diff --git a/panels/datetime/data/timezone_9.png b/panels/datetime/data/timezone_9.png -index 44f2a3504ff7095853d4cd236e9499230776fbdc..5b5bf77bd88b5f8a6b88fbaff2d32e049762cbbf 100644 +index 4e2beda610a6d490bf42ace9994f0b1b98916c9b..5b5bf77bd88b5f8a6b88fbaff2d32e049762cbbf 100644 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV4TUw3>5Kxa(q9K;wQ~`!7ljT1ufnfkKfM3X}$y;?Nck))HJ>C{A#<(Bl3A!L4|4cP(1ngM>hF -z5AKo^!uvb({mq$k=g$4(&N;)d2z#%+*0Z1I^Y}{OCk3e|xD>cpSXfVFq{Wr6u&l`VY3gtduww>gMNXV@?$M$|GxO4LkIW^qb#15(p0T2P_ku -zxrc-#0^IBI-0!fkUSi3Je^7Rw-bNUEX)k-6T%jBW4yR__^h_&9@?;;rex3H?b=~*p -zFDUf|-|H_RXJn{XZS)1VW$G7S4{lHXZoJc(?W+&+x&QEyL!qmNsatWmpvOQhlI-Kl -z*Iyldhe$m{t-cr!^d+64jutLg>Wb``3MerM{mr!ZSa<&Ch;{ej&86G%>HC|{|2cYL-9=xy9kK2|y}A9L<4dob -zE4L%oo%=Wc{O9=a<;|7b@jo}c{rvyDwbw}&H1cw)df-o0pcE9HGbQk9pRtLjB*vcq2iLwjAsrCj@F4H6X`k&yG{h!nq<$*;W7D}M=+ -z0VG7lfa<@3k1IBDsZy3~$d5`2YdD5#geTqH53&dD4JQ2rU|1qo`B*$FB;A)r?;l~0 -zBb9C!t}*9isb4$LVK)nq$Ks1QHyv}T9Io5B9OQ<<<#uKhh5dP&5e9Yci<}z~0oYU? -zPl_E*C|&llnxeGo*Kjes1Z}5(Vk%$CbBq0^s3$y^s>36Ke!2V8C-BBD-o~lA&0&P5 -zdEx*@YU~}~REpp9vi4vTq6gz|UjeV{25P6RlhIdWt<6 -zO)%kx6{l->qiu;zuUN5Jp@F^c4OqMaJvnlqbd@H$1M0d_pPRlpI`(g@r$8@l9#N|@ -ze>>)BfWbYMvSKeNs_ch40KwiwXg-^^<<~lg3qJ4)D3#W0>G$obnJ7u!+Db$0dqkr*w(=cf(C2~23+X<2e`1x6(}GaA9)5TFW3F45GOXbhI4R)&hqinvs4)55%K7wm0zc~tUYAc}O5z_k -zC`Q-3IFx{auoyL;2Xk>klL2VG`(o>hPgm&dsq1XGwj&1xPgVyx377Hs>~Xbk_ta?A4AX<*>Xek9^J0yaGPIb9aoo782!3N26{@br^{e%8 -zh>O(3dDO{rr@=*=|1nHtcB(G>ddr})3fhZU4DZ^P{6&dT;OFIQ(oR;ts!JU*CkmcZ -zNSku^z3Tb`>B%iRmXI0{R%H^Cq9cFhtf%fI@E)R4+T_jUKxJ*wcw@AF5=MVWHR -zDYfM@RgnuD4fQ*3Iq+gVm_#P*4^Qz7bDf3QoJ)7U#^ECg@NQ(+@{RMrkDp6)?`T6! -z;)%a&{kt6}fyLRrnc1l){^zOYLZy!WRR(@agihndhtjq4?luf#IT0TG8js(i%Jz{P#W_a5 -z@C@6zMmXU?;^G!sz1A%u%vu+E5Ts(&h@AhnZC!{{(Pl+};WpH{@1d!dhWFJ#Sd>%_ -zcw&&}@afz|p0BeJ^mQp%4KLSZ8my4^R~E9s0RB -z_GPXBM5~EsFk~mto+-t881JD|%c99^!Y^!3YZ-nVE&oE3mR3pWXhq3?@vz&Zke=(L -zD=WFMqdrl=!ugy{fsqWoq(U(X-{Cu;#&X24ag=$;F6>)$9iX>ux9Vd3OigdA{ -zfCB~=gc2?9w~vf)62zW3l8leCgkbZU-owI*YjG5sJC|bVIyxp;{N-0j?MKl;Yv7yVzTda3w4FMS0{bW6KR`8Bi%~F4*G_3_7>?6DE=KIOrnVFdB^Op>KdzgFEg -zf$UpI{U`Iy!V44ATI6UvL0y>+Yn^{NQ(>(z1zJ1AD-J;uW6ErOC<91B#@qV$ddrH# -z8h&XETW4lkvU=64-`wnm9gBIBRNoaYpG#fuwQn^lZV5{B+F-vRL>p+`jUuAfJ`#&(TLF*@}G&$6V1euH%6BsW>chGAMwMX -z76pyT>S^>$7Sd?;2b&^>O)MVcWPwpD$Ib3nIK@;M^k{+18-K@Y#l!5mCt?lbf6r2NF)Ij=kaPyM$z#dI5RtYWxv* -zj00e;-q%=%XxF#fq$<(o8DcpGdvRFp=U`n7~NCWz#bzi5;72~I^ADEz@c;{} -zW`^tw6TSmH6?}TRMG{Z&ymP7U)jw$=K2`PstUqqtJ-bY6*SV<19?gN88@07th53lb -zoh+#B8wp06;a4$4XtK3M0^fgZ-W@X6+X8br%6A?p0*5tdE+AH?gDy1jpyeLNteP?% -z86cC5Va-GO=Q@6dG&h#HcPHG_dX;!|g}hoGb`b9K`gy4I5PL^R$S)B%ED#Ahh0zF~ -zwtLuIp`R-epg3@j+q9>a8;+x1aoI6ujNKptFN~D8|^7p^`G3hBIi#;TNcA^ -zhtDo}Cg+un*6nK@uX2KUYwc!CxhXKveAKe&R7Y&{NO8RT&Ft$oC%D=>A?ci3q!<@j -z#2%cW9Iwiwxk6R^IC!i~H?4#0I`t>iHY^j86}$cg6t9r;mDJ;^!#gzo&9Ust*{H=u+io}PQCgVx>xsO^YD(r>Uc8XpV+ -z5>EYk4qa+*A)EGjOb2u}dez*hiBusqUTgi=@BLr3QrrmT(eLPO+W|ebLnlZ5jZ40Q -zN@**t1?x9Y!-u~n{eF1Eto!o=4ubil(Ab&%sVTN^%d#EHk6z(a(^H?%dxwkOEQFcn -zL%1E(Ng(2snRX_97ze9ONX@3HXt8SQUo!pH*Z}E|NnNF#&Oc+n$ -z1URB!hh|m3zOovoo&N-MK4vLjfr)zjeIDAx$?@Rvjg<>@l%!+nY8%vmjZLwA{q|>V -z+f3y`GrX6$*08qQ{tS0uV(Z?GrtCT63U}5ivZ1ES;7ZMw&&_NhS!?&|3g(88cCj;&){}iLZnYX06h8g{t!#&0mhyF&~%&Y5d>y;S7rz|WoT^p -zyB#%E2pN1<3SvE^@AipX8FN=gM~bBRw{Yj&al7k4Z*@z6ZQaxLXYH)Z^q>! -zW3ZpI4Ks-p4Ek@&){V7NvJ&~oFuKkVw=3NMAmk;+_qVmL?70JYH7u^}7q+v3`mjB2 -z3W-iA#C@?rEb6hJ$aeXu$z}e;dHbSxN2Xq&@a@cV#~}KB-yKAqXtjE_URAJMPEFB8 -z`^XD~3sNd0d6-Y9gM7x1>_)EW`SP$C`)x8I5w4xH9m`926W#afiBH<74wBTl%Rf~# -zQi2&`1}=l5XY0v>YJHqAy@8#G0Qi27!IhrH41B+hj*XgNNCP8+qNgX9o8Y-5r{qoZ -zShvsTpPETdJLbmJQYY;j5?SB-U_=js?OY-H^;lEpFVq$74x^Ks`S(vlIvn(l8JJMZ -zrxt~klaIhwkS3I@4?$8WAtr$Rlf3CDa*CSUm;4;9`Kyu?KBAxC_s5Xp&Le+&=hesF -z1j49fwPuR#g?A0kICL-300Rx}hqLH_KCwQQ5Qi%13$X6Y0E!h|9_L4q1;?->TBd5A -zu%VUUnf=<4ftK5J)`!loWx-%`#2omf;mrQvY8d%Tp7%C-`7x4jH-b2`6cf(`t8M-b -zTNM;F4{y`;nO22$pYJXnv5nJY0{FB&gSE_;T}#OQ8#~%gEElB -zyC}V*UNz9tY~Js^u1~qhiKWR9MdSs(eJU7&>h>C&Bx!0WKT -z?*zQ{9AEKAqK<^&o^^%31DJG*U80g|(*su43F&vzb90Ub -zz?U6XYetO_+|{t?c_n)sV|I)x2d$Y=nuPluq>D7y7*evG8M7RCnoeKBk#>BQgX^TI -zS$PQ*EiFXB|K+U}gAQ|y!FCHTcw=eij8Wm>@VR6^A?m%XZ_-5*Y~5Enwq;+Py6Di$ -zTaz*0BpaR4+xwSOgQB*y!dhfu6a3uy)gKu5sJWrQ=we=Z@+L!vc{^ -z|DnoYVSYYw#FhP{Reekd7kQpRGjsNBoYEoxtM;WF01hL1B+E{!dI!K75#dF7a;{>d -z+9ce@&UWpQ7~azfK~1uugBLeM?1Xl#T1u+Dk;>+Q-L -zW_VY57Dgl3v9j6*9$>2+vo#ZGA%uRI)(;SbaUm -zra7hI>l)T8T$QV{?!vh`I@fg7d}TWD(a>a~vf5a8`Dk;AD{WP|(J4FN>HDJhAzoF=i|C(=%4BG==xHn&Y3Q+n%1xY3<8HJ4f_`*t+~AC|P~u!*`5VM|VV3}P -z84veRX;RN*S_r9-dVW>&u@w7;&bxN2_5Fg^_HAlAmwFB--^kY1X*I<~CXcC01H$Zi -zJM^CSf^BiC@p~FkHt?!Qvx)JHGiMK1bk(Q4d-kjmb+mO9aV&jUpXzyG+S)}Dg0VA? -z^pA|y*nqu9x(L@yw~K=1juS>>zC2)&pxrrjZRy+nSx -z4ph8Vp(r$kj(*3nV;V?Ugcey%)5T}Fir9=Y=cy9jvZn-FG?E?EBq^d)SC+Ngm7{~8?oq3?+)=7OC -z*qQ?10zwRFX>;1TvWz>xZe4a@$oU7Ph=aY`oTy|gk!$fP@gp$J6!mGB{G11v_rJWV -zKy7ty+L8E{7=kQg-plj6-`J_?{KM>G2L$2*vPv9lo;UzP2i_jeD0%1@zSZgQy)_s~ -z(b_60c7u8>vysWgK*ViaWq9juo{zHBz!2jSZvJ9R9|Qmv3ek5Dxf8vdF0dJvee(y -zEL?Wf{=#+#M|5uJlfIP@D@W`_t6&L$enFNKxX#Ray5n8{1s(B(G`~RUUrpBnqMCPP -zV=P8rDdfn;8$ZAor@ZR7fJ(lTm~zvFF;8h&DX1Q -z*J2eHBS-I`4_$A8l`nWV)>f-OojJFKsFW1*9b~4hoCC2;w6XJ{Ar(VKKMDPR~N6T>=U9rw@RJL09ic5O4b3sAga(r#& -z3(G^p7!6w59_#7f^Gn$aJ=f-D8!765X;oU<>|SG+QCx#uU%QZs$Or4H%+Io2Z+rvR -zmocTs8<7VamUVQE_7N_}i!p|s(Mn1>6Rrl^mr_<^0_R1m-X2dJCw{NK$o<>C^b>7C -zu;NT256s*O{C!FL*q3rf|Zj)b}M-XG=MY -zZOS}~VW0D)Z{laH*;u6>9*?#OWM7f)y5LD|L;8gICDR^dM78CQEb)48ea%wW?IO!;i}DJ%3<@H8kKUR6!SW#BANuP4s8!U3VPJ&>>pS;2mHZ}m -zS%vL$ZNs=@xT1*`i5jJLnRAEv<8h6&B@1tl0hsh8!it_UA`Dh{4!sNcEIGB%aNW6` -zZ10b$Xfw6PuRs%<^ej$4k@TXzdFUeKJN(w&8QlY7$n795Vnzdh@#uSk -zI+X282Iu~X7SuM6%i*Q7uma9D9vp?EL_Ay#J`1fcJW>XGyip&^anR%jSeYMHXdG=uMT%v)Rm~nwPR+Lk`S%xj -z4^}&&EBl6Z+4bxUh!$<=s?_0kAk -zDXA;aMPk+Umkii+wmC5YCi;9HE!bSAyHRA*9eA!pz7`Y&2FUb3CH%}ev>ctGRbVbx -z{Z+ST_Z97ebvwfUL|ORVSnBNdo;`z9hVLCh!YoPwKJANRitsO1-WvrFS37u$-u8;r -zabR%hLp1Vsn^Yl|(S7P$gt1-!On2aGxR&eT0%mKW+*CO@FGhk^yI7Bmd3h`*jRgES -zwUO6-t!47PtoD6h4hF<~k5h%m>n=E2yY6@03OJte&|xez61_RFSovb_;)V=;*RkyVI{3|GAWTvF#xZEv-gvvI=#ov#J-rC@_jc=0^1d_ -zzf^6kv$%UYGLy@HApUwcEh(TXx{XAE{~*US=(DDS?Q)bY{+8ShB|Te*db+3*jbm8;EPF+oDZwb_9mZN{QY -zM_uKGlRpK=oHm}%d*1^2Jrl^Gk|kDH%j(%?lI-PBiPjAAr*@I4V*FI&@(!-ly;-BS -zU4}IxjGBYG>TeYFgvAfj;7(!y#SDtFp4Zl>|NugD&6 -z!`O3gt}>_SY$M7y(z0`)q~tk0rVAr5^0A6>~*D -z>W?T}%}Sra$@Ov=ublth3GMy^!ibG{`M{I`ojHmvt)a``BJ#mtU-`B}bn}2``+A9( -zzZV8R4;szwoK@ps_R^Rxui{Bwvp{SQrl20~4Oj#NR^~ -zCgM1ZSNk=!HoVVcBUChV{7vRZ#}2A2l9i4JSMnE`~O(5&ly!16DbsA5KUw6XS|b6JNTl4w8Ir -zTj6;oDZp`tNzkx%WSKw&$7Ju|RWLG7k*~Ua7ukkmWCMD2SEKm;ap+*p*Hmk2SQ;3o -zfJv6EeIJHp;%hxB9U!0qy1Cy$x%uIMnE-_LCW1x*cs1n*RdRrQ*Odfu_m=1co4nRV -zVUI+_<7U;@d=_{?M9J}Pzv5WsJmr3)S=sVyY{0|7do*j-;p%ztbl^}xesyt9QAbUS -zB3!{Z2Qtf}IF}efQV`PB|8vxkzE-;@SEBcDs>{l$w!o@G6t&D7-w -zU2fr(uo~~s15A0j2uqU@+D3j57~mr&Fft2OwtAjzDWqCuZnB$4>}NwtOAW@tA}hK% -z3vg}ed!0$gAFSG7uLsnmRTK~GHK?y34eZ$R8O@?(4Yy^Y*VoWY6^Pt7GCkUL&jD!< -z2lyyb_Q2PU;ImhPke&4(k@9xaiLu*iK_dUfBSC*`ZIAD16?0*Dwf@ryF-VwzU}mK% -zwG}AO1k|NZFGfpCy_0*`T6R7)&ZUU>Yi(9sB_ZiY)tL5G(O3&K@EZm?*gOcT8q7@^ -zuH@t5RW+hl&dkX$b5ctzl_kdqkjml`94T(vyPbOg`M1MjD%~E^U@V#T2PiOzYSwA6 -z7_SZ7d|{JiV2too+w{rPI!$y_8qw!h{Ya0$!{piu>p_|&I#w7Rr!1F~CS6L~PJg-n -z1d%kCR49$Oe=W!nKvjzi>++`JLn$SBKj!O!ZX>VJ>Pi-Hmsdr!bxC~GyX(TID3YADWU1;{6O -zz~1;H%0Thihtc#H8h1#<2He`0H;(9uB-*^M4iXB)FUMzEW7d5QX=4mG+uX>6Uj#z& -z8f(|DQD{=e2xu+D(YD)*;AO-cSM#)*E+QNCjI+7qO#lA+(##k3e&=!wI#d?ljsK0o@m!fw6( -z3;JB5Wd~C%!Rid93XfA25?W!>3S48KD7_6&EzT7z$=3u96XnScrvH4BA|rWy!-~JS -zi^mn&t__9pV)tYf!j39|6uAA7!w -zD1U5HUL|47d$ThD$*1kl3O-X6fJs8}>Lu?UB#;1tI3zEl(Clha9}QAyH+BTHnS$_c -z`Sg|XDdBS2uX`8=b9>??PMdO|>RH|`J*ZnmO4=20CO}|k^K-w?t0ZdO4izbL)P1w_1#&9s`3NGk5Jyzn`aVX@X2K -zw*95pRXof0khH4#w5^mA0ftIz%Yn-|)cidI4=VtvZ3XhQgN}9tnDyvpC$Bi8nemBe -z*Mj2uB8|qbc8HpiYHKu3LV+#R52W_Q**syF;%{A -zd<$RM0rnZkt3;|2qCyefUa^v0*1NfMtd=-ldD -zRw#{Q>z|&@#CRxCZ+`N{Y5%%L+Ja8;+@-fk#hdpIm@K$u@~)o=J?+8~Pj>wb-E7)- -zjcsGmV!WJ2j|2HR2RG~}vsG|Cy|AFtydv_?OD~Kty*OlgiVkDhAl6k~Zp`_=+y`5m -zkUex{0<08FR3VZ;9H)jDRL0U$Rp0Mx{=!y)rw`5FqdCD21TvLd|JJEqQjIn0*V%7n -z4ByhKw)vTpz3tT430(5Q##yNh;GATCia|z*fV=cm84he^tf0S}ZAverJ%ml;Y>hGB -z_{#CY_#KQdh*h4yoYVS8&#BkGZN3V}_3<zelgQ0`_l@VO -z#@1!4CB#4eo_XajmLzu1G?aYm;_a`eoj)Yj(BwHQno8J>0Aoc;e#dGY!zl1s_TqS9 -z6YHh|u73?sbjF3u6GV>66W4=pM?>7gs2bLJrxij2s}yOh11G%N>F!VwJn>n7iXjW+ -zqtv5ew>V)X4@fyV=E;D?B&eQ@okz@P&K~w5vhI02PM8(Z6$(t@ -zozC4hnXHSZ6HzO~Q=@8GsT$vqd&oCoK4g`bMH421mT%g=HkY#to5d(M2~4DN|3i#V -zZ_m6yHPEw}KT~}bC91NKY^pO}si++b8d8Z(p~__saWYz)jDa=kT+``n`(F6rjJk#I -zSX0iTCS#k5E5k<8x`QzY>m9%4)%8N8%=#AZea&gXI}ADLF2aPG5cf&%Z?omYTW0E>rI`M~^? -z#=45Uz3H^?OP!5yv)G!R1J$qUS94lh5f0^oCOv$mQ?f$r6ZT1O*HRA_Q5Vi40`n(O*B4$@up;sNrZ@n(`(tuIx%(5!V#8^^-Nc7bV_L};kky@Nz?aVV#QB -zC)VqLjVRi7u<@c9#YYcW5p=T;F#>%613m*&8$W!t-H4bOt5{s_XPnrwuJaR~IukTs -zVdZzN?k!9*;LjN_s$5OA@~{^{#LwK?;4}V@n`?bqD3O=6J2OO1-1YH#f8*xU5{l5j -ztZmOqnXO97kNk9sMfAp@@uSLHijTgnk~lESDabE{>a+Xk4PbmoTpm$GOH2LTKlIOV -z6*iwFC%^!-w$4_E%ReFuxyoz>-aZD@#nfsqcor**t1*baqrHzd3J)ai>UhL1cvzTE -zuG^-{kr56Py|cr8Hz07~k~O0$)!T!Pf;}#Cd3Cj~3R}E3GR`qpSNm)0z5eY$>6Wt( -zb6tzzKS7eXcWG(kr`+D=8B^DNFyH(^Ty)pl0es;!;L=yc$~TE_?cdrwmBHcA*GK -zX^WRKQnrU$7e1$#UFDp%0_Jq{>j;A@q3U{;<+?=ALlkqv@h**ejNOv`Q`ZaAs4zKC -zOz#(Khlz7+mY52;OYPja5sE&Z^{va1Kx40j&dLbf1f&06?G5Cn&xDR>YV}lITnXx- -zmQK)_Q25b7kGXC=Y*Xdbn7BRG7)W*)b5vKCQKepNR(#vza%-yCC -zln#v7-1GsqLwNp)oc=5+bz9SD{oxVHK}Zfqt>sE92I9K9Cfg-zu%l_LDKBwk6Jx)Oa+CqED6S8D_jN6?IG9# -z1SZFkm;m~3k7370Bj=LBwt3kXqnoy76LU$R@=n3&MdAprN!5@>(cAPw$poxXMZ$|W -zdUnkH>ly^tXVkr(=&FS6l{To+3h|BDS!5&!gwz}u&+Ru&WCyMVP??CfoQKPVc)Y)X -z1_QXB20r2PHy&S*kVjl0+!K%663z+RjS#(n#cPZf^~!c9#z#VR`15Ew5(9eF6tAIVq8jEtIJ^#6GU5yruEV|Ym1IP+9Da^=lA;^LzpbPuV4rg2}goI8& -zXt#c`Zb~RX-$P}!2$O#63!(uAq6`eW2&M*p{~q? -zV52_NjZX(i5*L#3pRqSvT%dZrMZR;QBtZ*+y%r -zrMP)NqjVPhnD{Z>OEf#*tp28lH -z70di5@V-FC{O_t)|K>topA8t%r*{5-`>F=k|JU>nWAXp}eh3D;Sk^X_&>PChWSQt` -zBcYnyyd6=Iu?2Fm^D_N|q5jx@a7UDFDoo%*^llM^OVd0LJ=d!gn}E&=7OG-O|CsFc -zvRto|bL5lJ^-^(k3h&ASpniu#QH_J0=!BGM|M43s)-3#r7W@1C+x$bu6CpoZmR+bB -z9jUiz=d85Qys3_cJzDb~+EYH9E-ewb9uXC$2oJ$i>Hyrvh3r+2rJZawCC`X*0@~+x -z)X_=F6My(Xf%*olDyxEH-wV)tv{O2(e)zEqUEze-DfV{um!_zD0Ttz$KjNSfV3>vn -zN*sVntIj`Bu_~l;i9IZnm|}XMregSPu<)lQh_6NICe77mjbF~Uw}llr#2`5(GOxF- -z)1jX$&jAz8T)5g){+a^6#>P4@jS5zPnyrFR{l>9*Qm#UCfHbo2D2vPTI?>I}NL!C% -ztg6ysP1%@0h1LtbDpstV=AMwE?)K3^)Pb22I%RS-IId9X4m4>7aF$%D&!-E*KEJ}a -zDeLYxZDT-sW3qwzgQBrk{_KE&=m0)wgpM-bszD`xd2wL|5JZeg`>dzPv*D}>Cph%z -zuXqGWTVxtHH*fxl`dyKJ#Ge9fPzQz;OEWo0i!)b+#_2cap!ERjIe~&z-m*-8cwm6D -zQcuPi*N($CD4PR;19Dfw-$JUR2S+qkmB)Z0IzjW++tdVw9oA61^E6lcx%gi8dP{4< -zP*vAFn&qlDNSyoS-jH=z0A&UcBi6r>){KT-J+Tm@G@{Bs(MiNya>mNy?aO~6`|`|5 -z<1Ou~Nh&`oW10zA+C;Mz>5q{iDM=u666VR0PvW{+K+rwRYq5XrXl`Bx&)^+Qdjv-0*-jZ*1&{A4|+gClt@$S#P`G)>_4 -zecB$;vZkUl_2-0pX2{p -jSNd;;<^R>za`Y%N$}od)_Le>jhh-!b#EU+D`SCvheps)` +literal 14366 +zcmdVBbx@ma_dm$P;u1W# +z2MF#V;TJ-8_I+o5-<{o=o!QwxxF!?sT<2UzK1Z%|hpDT|5#N1y7Y`4QSV3MIfQN_w +z2oLX{lsmVu-?*@AU*O?A!c&lbrR6<^oUwXuG#apjzMMi;iCFpW1mq3L=W;)O{8c^a +z<$ZjYe?lfmJng5E)6C;_s)n(r3iUsi)?AcBl@>qpC0mBuy#Du-FYOWk@S*WQFT!f) +zsNvqfj|q~=UTYqr8~*8=w91mWylj|gt{j_EvMIfZB~M-WQN*jaSQoSMwA(py^2zzkepRd=Kc>iEO|L2PL@13iEU$6IGUVZ-0 +z^*!Fd*l(^^yc_qf{{5fpqxV5;X_>`IdT52 +zb+JZ>g!sgm5|CwnE@mv19ZO)|=#0OI{J<)}T6=6HAz#%g^*PIfYzR^HsGdZpkb}d_ +z0X!g;Ru6XwmdU;x06XZIUZAoFXq*-+1$(UcrOQJ)xV|rQDNWUb&U-(9Vf!2}m +zrm+fK=?SSum4O~(@hdk;)P|EIeJ6B!*PSNF)~MECWi +zLibbirfqCX%AQR4O|6SG6_za=UHYon(dP=_ukA +z-8Ew0igvymc``9>eMkp7Q*TYYZ9Jqe_m|%#w52MWoZ>?I)=&d$qy12C$wq>vM3;{_ +zxp;~7;8rOJ0^VGY;5iy|vH?c`AKZR=wS6t%?%F$G>G^>l-FDll{M^!EflR{ND23DA +z8v3gGXs78}C@OnK-!6iL{3Z5z-rvF$05esmsoKnz`^1MSGo2>38{((EN^decZ^;C{ +zS-O^ncU350$y2qlda0<{1z3xkh$#1D@IAf*yL@$J>B+x{U^bECc7#Vlv@>!h;={Y= +zAcrx1xpgYs&re^rwFLERrUjmcWS)pmWQ&ZPf`=cB7_JxTVH@>Kl|8w==uTL7hYyElx+o$87 +zwGZ$K3;IN=r;@6qSg9oLi8hq44n-wud#o`OL-Gx`9Zfh>#gtdBnfxvjT<`l)f|#pS +z!t%@%g_C7BoZ*`tbT5?m7s~J~M3~zVEPx2*cb>H>g`tt{oq6ezoNePZC_OcbTeMaedAGlTM0?o1!PeDEHNUFc=*bJ!|vO_WZ=d` +zyh@`{F-g<7)hZ=@rliMep%~GUvThgGM%wtSdtQI_7w;ZKx5U!~*0r!<*%m#nN20PAh~a#;ndwjqaRhuMN6q@}|-YIt0P`wb(<^!Z&e +z^?AAZ)@n;#M{pi$BMqyMSfW>!|HxCk7PSJ$SfXpn>$wmn{U$pxDHLq92p?C%5UaAY +z!JtvhD>WtIZ?A{G+kI~aum2e|)$#i1#47_2UQwY_taNBq?OEp(Qd!DzgY*ZJ#t5W6 +zvRt`Y44Ij?cCeP9i+(^d#CLtb+C`ft_=tsWH`1L0DC?Pb(c9btcyTny1Rpa?k9#g# +z?+^mWG0e2Kwe5(h$n0+sg?^5if9!xY`K5_|D+5f)*{9jP57T!tg$A=nCc}VFC?e$D +zzYUBFizmmRnku4;3o*)^2A5Xwg^tz_jE7Z9Xz%(L1{}pzw%(Yd&8$ne=o4M4 +znSZZr)0EtM%V6N*95M%)8G&(wJ769j)p^@eKPoqV!#ek0+zL_hL)^zfKwMj~ln+u@ +zu%u&DB~U}=k|~-s{ywo?k2>GMM_QHE-;FG|$0!oU%%Z`Yd_+$zMoT#yIDB442&w)B +z1?h*RH$h{QOmZEt=XKMu>h<$&Ap(_N3B!-C#X|s0bgzNj(i-V_9?|Lyae*!3h1-<^p1j6JY?o&qE=B(PcEun) +z-NMzbG?dMEmw>)*_1F|zwt+vAdS&sk-pZ3RD)fQSuo`p*@4whM&)dX#Ib8uc7+by2 +zv@Kv)+C}7ro%>BBjvqrR~p~>pyh)Lo9?L{u6 +zoPU@7(2Rpy=S>FcE!pGuI5^}ToAz-uM}vU@72nuh(7UE3&qZ2e#8LvKT1PA`W1K#R +zUL-mOU8Nbkw-V=S{Ea;|7Q08%KTVnh%vaahOnQE9Eu@dzJLbHv9+aKE{&S?gkpG9r +z`&Ei72AuN~`s7jeeN3H=iec#~w)re8JB5(Mj@Gdq#`)0B+5TXGl!0Fl0aL<9Lqt}!jUsk04E9zgrY)!qdgGY}vp8+&0*t^N9SDhZRcOxo?MRx&4oJ(zYgb5P%0g9= +zaG`;kb$W8UVMiR2-M1jfs)!esRaBXEdM1>4?wuzux0%|X0x0^z +zs*axs+7lf@LQGVjsolv!xwYJu4U$>M9@m`eWkWxK$I|+bMm5ZC`|T$gWT_!a9e1u! +zpSp{?OHqSjeE~T1{h?~V@&cj#wf$M*DewS0+7uqKA!5-8kP&ns1F2fzSF6RWi?tJu +z0Q|%)^%`{hIZvNq;vP+FvM%Wj{&=$SM3P~d>kZ^jbx+PLE+xJ4*907+JymK=Ub5xW +zDGn(Zx`yUs-3 +zy!ITEKi<4Dk3~MQZ;;0n9{h2g9FoyMe$7#D7--7M}XC4CT2bMP)!s`dq&_Ar=-1D!4g +z?~`Diy$im|+vmIYS!feJJVqRyC<#i)C8>^S+#`!YM36U`VMcwGq?=UMu8j)68FL;t +z=ebsUsnO}-k6r@?ikEY`IK0l$_y$3;6#)oYU^}VvFaTF+fyygHA``8J#R~8eD#;) +zK4Ns^NtQUTeV)K83a%$oUUHhq)9WuOpw`W*bVsC$3-fDW+wV}ooth~Uw-Iejzx>vq +zfZS$Ulx(1wULb3}bo?{f>wJj1+!v0IvbS?p)+8X=T&Qe<0k+U;*8@rqj?x>tWkbFnV}Odn2X +zhWb;k+2Jgj8YF&`!5j%r3_O6s0ZkUvwq}?7`pcuN!ICGZHCbrBjGLN2u+%#qi`mn* +z!vH$Uhr4gv+Zi5yEnC3+c?G?TvnOH5`7G`BvrMM(=)==vmO|Q%A(W=umz!Z-&|hiK +zmdsK$VSMNod=tO@D0v|BOW?IhfD5>lQP8&=Cv=!W{hluL@sa_fl*0tE5lijC!;Z2 +zJXz-xS6j$Px0Jp`9bHa(dc!pxOdzE{;qq-2_C6~ynF9^yaX`;ujcXnKM2u6SRRH06 +zS(gXa(m7UHy|l!eyJO&6I|1t-lD0$LWw2h-nUqpugD17FfXglO$Ny*W54aykqE^X#c +zX|+dfd=(>Eurab^${C#`VJvVmi4wvX?Py%4**zQcx0p%&7ixY)25*?e$dBz>dq)5H6O9 +zM6oa6ubJJzqN^#n>soEb3A(wa!5ACK?MmCLtC9;IyMC5^`T7<8)X~K+`~l2qf|InU +z4-wC73oaHgR~_am>8vDm`IC|5$0tW|h@G(iE+)TQ6iXGJcyH!coi`B=R>sWkr;sIs +zdU&33hiOHGgWb%yg_jek0s*^^qVi> +zP0`{9YCICkUe4S&z)}8pYK%Ohuql?ULa@9o`FY|vIq~LTVbHO80P=%_`>ns`z#l};dP5!>96uMX;61^^O736uOkg0> +zGC3)5w!pk%?=~YE*QjDl$QxGBYrwdZ&WOAJ8PcQ-RkW=}60UE{fp1ODzTO8YT7 +zURBL-$2H8ZY6po>KSCbuvBK4knkx`MgBM|m-&~8lYoFWKA55>F50sq3!u1rgs7kkb +z|CQ)jVVD^yt1?VEDrB6&WHo77ec-R!JckREDPYsm%Ir0FqZW5;j%oP$FD*ko?zJR_ +zS_d!Vu#u?M0D2YI^|LH`gZj%obm{)6-?iITockKlf8u~M~23fft9@<01PitOhahU7|ww6YOEdb*{AhL=n*d#fsP +zUY`P~qwO{U<@NcqvwrWA&~r$Y3Xt_L+Xrtrp*|khzWeX@hHMsxc8TXFtOd#KG(N}5 +zY9AH7rPk~up4JDR^9=A%BjSnx55V17{uW1@?V2NtL;g`?OpWxeMdeQdm#si&Bgk1r +zC&6iI&tP~;sVG4+-BJYu?c%2@03&Tu_n+^s&iLAGz4oFi!JHT!;)0=)@)koKts!I2ee +zq_Bxx?i6|pod)8bqe1)mMW5oEoQ{Uf3A}fQe1GGS2HoD26rPZ?a*@0aQuvjY{f0W~ +zj)tsEt}OnBfjYg_UXrl$wVgGDW~b*N#$1^Bx0kO3!}#$KJq9%Gep&3d&W=OprIEsb +zFGpOgxs2;g)JM0E;^0}cN8KoqPC_Yf8%?$1kw)02Vtha6?lb_>!1TFn(d;_*cZ8R- +z^)#WJs2sbxHQS#AL}OucrXWg?o}oy&-fK&3=(Jbwl-E9xgFvk_r~M?3DI>vIj% +znz&CIE;oruI!@Zn$UW+Kn(*rZOtaFtpZXVbK#bSGv^8@G+|(IpdW>M5W$xmqUv!7Y +z`>4+Uz<*Q3A)GgL(Rlo!>3BZsLDuYku9sh=qoR*lH?fxqsGet1@30;exa}8H)>FTE +znp$3_n+8m*7_R2BnsguNG$dG5+ErMb98Zhd1cG*BLXw8{u208?4F*q`GAE0zs1kes +z)J-l31~lEbdIei(x^044u}jOD8CtJx*fy-OLWCr7)-U9yL_;MOkv8MR^;w%|r-YZ7 +zeX8q}2v72!U30aswky={JnjAl!f(CNipDkP +zBXt!69RQBVV6kCEs^m4ybVYA6K(WZyz_BO=HK?L5H+$^+t!8#x{Lmhsk}iu5cSEqG +z0&s-XST8VwgmV`~PvFLb)rzV|N#UW?!GHvq==i&LmwC_{fzA27pa|^cgoJUbX}T>O +z?D2^m*PeZUk{9o)VszOjR$1h@n|Z14xL`Nhw5(hGhnDm=fXOChXtAnyY;mzDWL&mY +zcHJvYpt&I4wSqbW$8iJj)LB{Y09a!MELWw>pY_)V=&x?aewZCDyD?`9ZO!hDXdGYR +zS58tQe_-!COHK@enn*Kb=UjKzU;DW2!>DFntWgYL)|8~~)C41yh!`zb!pmo3jVih2 +zXjTo@2CLcGrK+qKDu8RnZm+xQZuw?#EqtvX2p4NXazQ-0&YD^dhd6i +z7b-An<9OPgs>Z2{L}w0j+?H7eC*70OIvXA+?q2!un#iH^OJw?NYIR4t0~gqCztS`zbA}!4pLP9j!P}lKf +zP_tZgBXfEhdJ-ey-z6D{i(2nbs`eu|#-?`{dgU6zV%>j^qo6ayX@Qq}opjrIK}?JF +z4OwOR6{|oYQc@N#KZ=lHHTrr~%0V=>^%Uif@adsIMo5-jp1~3=j$Lm#H^(dkK~TV? +zR4J5W=|z&9_yaK(-gn2DqJ|!S!h>5#ykd7;P2RlfQmX6$9~(Z1IKKJuAK*ZtxqiQD +z-LR*j2P0^5t_e&1cIpYqAm3F*hsW{=3x&04p0P`0sY%JXA)u(=7rf*vD#3c}q<851 +zND%ehE0)>+-gs;ZOarl}__5QD)jO^Qk*__#Z7b}uRPD_?zb<~LY>w`k11Z|k=i6O- +zg1XyyIeK?1KgvloUEgRohYGRdB2<;mZZGU(jmh+G3$2TjO5S}ur9%RIcD5y@q8S<6 +zttpf)F4$0PF&^Zh0uRLSNA$5$1(9Q!ocG6kkeQt^Se=`574`5FXLq7Cx^p8QbilZc +zSs0QatV!E$xaH-lx_R64ardAE{h3@pTH_;6qJ_-u>EE-kP6Ebjrv6n-@wD0;ZuP5~ +zJxsRffjjO8z1b$I5t|>&Dfn$q2hPdjubG%8eQx(abe!OH +zyc|5@E70fB{!gD)a)|Mdq+Gr-{?s#*n4TiWyR_Bppw#nwhLDkx&pV#uujjtm{3eor +zJa`KXYcdUx0~94RzU%7|;-GB4IEkCm$;mAU{Zpk!JMP^esv+GL9x*etAt63!0F(8* +zrf!&CAef}*(n|KFNS(9D0q%?X_QouHloy?fv`In*!74qI^70sa)l}dH@d@KVzvDFt +z`ldHxCUqx)t%tf*R{ydZC}IWpKH}%-NUnj2v*hCbX3`3y=xvDAoiD7ochuSq~v8t9PHJ-5X3{{J!l+fwDcToPlYy0+E +z9F#ppWt^8Y8 +zHKgfu)8zorpO$J2K~}TUo$<=3(zk8BWVv>D(Mc +zD*#n4{epgRm--&AvIv#BVSQ$DomQjLFga|tOF^w_gRmB`>c_)-FnKi#uxV_l_5f#2 +zwRf%Qfh1NV98BbQH=GU3%`)C5Ll?Xe+rK~9sXh#bNnT1cwdGC{CN_FIx!Q^YrNes6 +z>#L~3WRbP7d^+xESGK2Sdiq(CsSS;Jw$^1ZwlaC$*Q}&#j>@}}1h+lWLvd&AX_k=Z +zMqV%3&T%#RFKwn}x-GAx^V^zPv<&W~)i1awb3Js_?MlT7zOdz}(0`#K4G;AuR|QkX +zkM)(L2A<1?XtG)xyz~AuL_xRjUiHF~(N;vFhP%eOvn1RmgHXUVCtt_#b3L5n#J&1q +zeZsuY#lt+ty>yUQ%Y%jwqxQP}H}7$qN!yJaq=D +z6%%=$>d>xz@n^QB)4p`8e~hiO$ZFe2)O@y(^l3iHGVyVKO`esUl1xNZdjAC9gvk)q +z7pn6)(Qi6CQV~E0%aKz61^Q=3+h+96JwAf=tIl7=hgm8s<1Se#FG2Pg-Z$ +zi|UgTg;8vki;qe7yMbmeTk}*S(Eh3Hg-5kn%V921@+h8iu(e( +zkuIHtis*xB<5q3s05b%}VUuCY-a*{gdAxh>7QVIw<{ul$`phQ`1M~$II2fJJF#B^; +z%B9Y?Vb6PE@a0^(EC++%Q}8z*+gF957L(_Hnr^Cvw6+Jqg#yl{;`yH+1>K<~!zLN? +z0im6QbGpyAe@fHoOpau>GcloOnka(MmHN{CTRE!v*A``Idet*&)?q`ONt|TC%Cd0L;cbnRlQeMf>T%T3mBA!dt%{!LAA0t-m +zn-EuoyOw%SD($*ZqIc76J3ZidF1XbqA~X=Z6cENLK-b@t_Z#z>Sc?>=iO6t3@Czej +zJL%hY1~M&g%HCe4v$ThsMUsQ~u}o7t=nw5p9CBL-JA~tI-|-~ZZ!qN;QhEGm4MGvo +zI+?0WdCd>yTZ2q$?dyL7S>8|3JTAH(zj;sa1y_hX`mjyGs@A-pdnzBLT_Dix-UW6m +ze0U8m%o%dV)|4@0F?0rkm*#{rpYT2^wcr%@|K42A|0g3s*F?*Hv@Pd~v{Qm~ABoxm +zz7)q@rzVOid`<^QJ)dlwm>)uelh8w6%E#}q(#K;=9t#e47?O`@t|^9ou*DUg?@6@| +z5ZZoeYCXp6E=Oj>R~eY(J^kDCY=tO7NEAoWhe}+_=+|wtvFFjV`i4V|Tfd@?O$5iv +z;XZp`&DiqePspX1@*rbcskn0GkEw}lrBuKV4{P3HR7R8nTXKfPNi^szwhUeQ|_M0^=7xqn}w)(xxckl)kKJMB4hY!|q)NAmRZM+AS>AKFqy;EoDCcau=DQ!s)@kFKO_ +zszqMO?r)*AlZH?b&eYSb_6l?Ywhu+nKOjgVl5Tm5FJ{t*@&N$sI$q9|P`#zU^9gsW +zM*TQHUXOR@NzJlW!n=Os!wc4^ZIk++&GpcunOXDp${>8STdE9=J@p-&o6FKk<{d%@ +zO8U!;Gcthw-}J+14BT7aWPMNFo8~Y2I|5Vuu?{52Q+}LS7~JY`aawkR{pzD079$$ +zM9#BbUnf}vt(|aHTMog{EQ#9E&mcy0V|rzUq0%1>?E@5L0nGuORMi6MlxkRb^#Gl7 +z%J}=XmOy&KNioD(+| +z-wUP~ccl19#9>)na^a9LDsbX>PXmg0*IrD_O2r`9+m;L{pduUc>=lkvNk6tOQ-ZsU +zx|tnhe@H}2xZC`TF|z5yC&22%`PHfVije+SIvq3z?ak?LKFdh;zJ^!A`&wM)0XW={QjbgX2h-P?M(rp0Fv +z_DcTX&G1vPzD#pkA#zC;?gN9lb1H4@$$q8913I=0#xRJM1Tm>q_ZO_GmT3bBd({Y8 +zML!v7GYu=|c{Svh&dPtS=5jp-`5eZ0wj)1b(>SCODMYY$j`Hp)YCpW*3S09ltI17$ +z=&zp2RrFaZpb?1Z_8Nb;GBWxph@IDMfzdJTMg2nJa8b}W*n)wZh$wYtLH+nEz)DVo +zb2MEa_OyZ7WRZ-6!F)4y-w`7PEZT`nDOu +zD`7?jY~Y6{O=QvE?eGvx=Z#N+8~g-yvIb_47{H)KwhRWD8FPARiIm(zku{d<*r5uE +zjHcWShnuL7Tf@GpTkdosySqS84kT(YJ1jzG9V?C6mz)!G967_-xJ9Qw$T_8Bm1UU^ +zDXnm=0iMR*;{Vv%g>O8k?rM&{z}E*$Cx}*lpRUf81t=;dz@PN*+n@;-`JQaK+j@x~ +zf4$sos%Lya#>Nf`oQl&N{ +zjiP^7tm5AR$4|laQP1Uq0+eRL^vK9!q7wB&-0n_Ud6U0RA?f^449+{qay;O0 +zpG>2B1d(z(yc@i&mzn7C?MJhfac*d=Zk6?qx+ZTo?4XqxDUvO)AqVPFC!_)H*K=K` +zu$l$S25OYhCEx#R-A?2Qt^-Y*Qc`K@Lg-QnQQ3;ZZ`BFU@&{(V@v^O0t151URTO9z +zdx{#p$t-Cw8m)XlU*EH$(?4XWDHk_|8mN&JOxjkq$0auNEp*u)@6Jmv=O4t>FocQ4 +z&h+xQ_70kQtYQDaZ^LzUUVqD7>6j@OH<(P0nbBQVI<{J&svb~N3|osb<^AN;Pw)t< +z_~eqsx1dY-zke+56DcDIGBbytFuA@nS@8psaevVbQq0@;v?L+i>WUH%NlpCdK{|^Q5FxLlQwcoXdYQjN`x_KQH^fkt>j} +z=U0s-Rv;zk%El%4OoA7x%p@_f^Ojp0GW3TZ^>Gm8yp=eKchsgn-diq4-X +znTWWkH=F6rCXaQIm*^@&y3&Z^-SM#BZY$3JW +ze$03_DYEVW5jm2jmPCB`F2|f2dn1jvlnEf2advkx`aLa`S{lC(h#{C(@~pyMB>u9# +z-*-9DvQOLO-KXncO&|U6catpTdf^U2bpHYt0IoTL#e{t(yNBIGIXw*+(xcj2R>99+ +zHsE^3&;R`n?tG`e&fv$g_9DnUatcyh+;!G#Ykea-hZxT-fZ2rsf_pYqH|?fq2cFfx +zV$FNdsS?r&rOV2Nl%CUi?re*CpWe}CeUGIu&yJ;BgD(MQs-_f+#m+uEm~C&p7t3$) +zv4u4wReMXj73A3tSn?>J`oWaus-;4!x$=qJ+6d!XgOIDHo0vGQ>$XL)uHu5d0$Vzg +z@HjK`!G_cE$*5D7+$Qk&t#J;#wCDT^$e{68;q1VRwm&;>kK|$fe*|#gb#`mTG +zmaeZ<926Jm+?cc8wzpWe&AF&oCf&fv70AQ!Q1A_YDU!r#mK{B9U)^H%hlTAWTBNu4M265o +z;z@(h7r9^u5d75`NZEAj>YDMrhRw{uE+#5S4FcZ_ee7y^nA`joo;Va7-H=kFI*?u= +zE+pdR>uRRc9@<1LWMmBHr{jk5x?Cr*8bkV>34mz$-k*Si)|u3=I$G)JCiPlu9$4x$ +zT_W)S+wRn6{l$F?T_&dO<@A`D1}Ft`xdCCr)bi}wc7TL1JKqZj6sZ>@{Gx#;mw6`5 +zSf7b0CZ@^6u2l1`rDO>NB5Jo$e|sWr&a`iW8VyXy$p{W# +z9EZuzSr70{=#Q7j`wBBK=%?vH?4hjrkB*IL$!|f`&QY}0UW3;KTp80)(|0PeO?2kk +zmrexcv53=oW(ix*T3!NI(Y{4uabiNAof|WI_Zb_d%to}@j+1`|5M8c|hn{bnv?_E~DydO%?hHQyAbS7c5R!*3XGRk0M +z;|^ooBUApX>)ZExoTc8zo)dFq1jJP&0NiXEcC3e5>}t9P50}XQUH`K({rg@BuDJZ) +zyd&~or6BH@|Kr;s|C@J2{*&nS=l=(!-zzO$7d%>uY-BNQ@hy{Gnak767EmHJMPpUY +z38@k2S`7*^=2G;j2Hj^}T8Nbao-D0+w`{m3u{=4sou}8 +zlXE{>r3S0)oWvjAaif{bUj;@7UaB?wm#HiZSq&=uYg` +zFcM7+eZ6|mM&dppDXDsU@dI4rgBMCG?**{+on!)sw#{zpVy|e3L*V_-Ocuwg^Q-tS +zXn+Nqw}&#Vm(4mK^cs1&c^!204Q+qVQdCpLO=|q2%qG%I>tA-Z{QV`tsf6Aqt!ntD +zUf0>UR>6ZlZm@ow@GrpCsSMd@EI8Z&tC5hzZ9$p5?LOz6c#XRK&2g5zwfZSip&HG? +zt_U0s8)}s0ZRzT)Ajd^D(#qkqGASp#Ln+3=2>)%%al)zs7wI_g>mAK<(9B +z9R)?;2H)dFIhm;7vdR^+npek*ylM41d_|!v0^6jF?P2nP?YQJ6ak-FsZXL?ra*#VC +zJ_+E1xK7h~&^@v^?}wX^I-`{OHnp(bX(v+c=5R1>b7 +zauy4!z2S*m=xP6_wjVgy#B7uMLqkJ*V%TUB#<_WCRv9?VZWi9hVQMWWIe?G{D&Pz7 +z{E{H$g!U)%`OL0Da$T+0QW76|D~~RL$#IZBkH5BW5t2bLuFaO8TqmF~D1UVj1ME8z +zHOH$Lx<5d5fQ{#+9-&2lTN06PMUgExy;RgV>I(|27iQ|Wyak7`S96*=g2LY+)!(lR +z$=VWStB(okLT~(ORtVz}gFX5Kxa(q9K;w)AqeWs95P2Vc%HPI7zj% -zoo~97)T8jt_|Oa}29N2Y!9%*3r5}Zu3+13h9fdS0?98Yk2SNvZOOe_ -z?6T`S*`UEh&F|;MKV2=#ppgX}*uZ1l -zL=7n#;{jHa@j9?)y8{t!h -zhxO*Ni$=`sm)?tHg@x?0%W;!hoHsX}C{B`)tK1iHpX5bE<a7MXFc%FZTl;24pJdU9p?=0q+q^k+y|t_NEp&x>x%P%M6-3wNwLEoif#gpoH^V>b3JyF*y_c$;ix+WH9^ZTQLI)oU -z6@7UK@@4uhDh#TVfGZI)E~1=H>qPETj!-7Q?biVN7Loy~Zclk^DF;z4&=>71>Xms0 -zg^UCdPG)V_AJLG8y7o0G2YvHtjVRnRW6|i}R}BTCt}@tZTJf0q#ermi#J$0Dr?Woa -zJ^6J&orX79SONkuoeLJx7xA*}9DnhtE97~Li8|si?J9}KwV=%+b48EFki7Q9p1I(~ -z+s;s6PcCDp@|pg?_ufM{y1YCo`WJJD?Spj@C5j|h<|+Np6UmfQo26mJii)%#^RMShD41vC-2LvR1>1Wf{D2dBP>(lv -zp3A#g|9PGC1CIYLU4kL6-@VfC2C>tG1G6NYD<{|AQJRVBhX)4WBt;EnfxmkL=35x| -z{fOxIv}mEPpHP--#cBRv{eH!U>h?-4f!oUh*PS??-a^Yr)JLj$AUxo>HQV~7EZ4I^ -zC>Vi^8UetTA?vq@W;}koCU}P_hfEbvBxM|vvKS{EGS@p-Fiy05ccUyzD&C*sXyD$b -ze;=F0mq -z*Cu(V%U0w8O*#BvqJ7BH{arO^QbTio@?&gojZ{uO#(pj`#fu?Nq1plvRcW{u8tmQf -zUr5Nh;xk4IR5xh6>eT>`Hy>xS0`l*v$T@dB< -ztT_CkyuaUBi6qIDHZvx~BjXkKFZq9#&A~4*+*Yvr=i|!x%q7|wHJf>?J3Tlo6+&ji -zRzJ9RGpkj^&dmJ`&u_g$>vSJp{Ay9?1FX#Lrx1b2Y^e6**;XGOdoS#g3n!m;Wopd -z%DcV4H5Hm1UwKB4B!Nx)g`1N6Jc81UpwvbXXjlPTwFByEe9r= -zgQs04k#E)UhbINskd@e@uPF3ciu-<;(RVoj<=0?yu-$&$EWMp0MZ+3Q?5*LeB((M| -zyJHLS((Y3=PDAF{T?XYD`u5p9#)YukKxMG#t90asr`OdRy0>=m`n9VvV%^Yfk)y-v -zF(~(^rrS>#SFWhI5@cb4vJyqIt_7f@oIK7&F>uW>!>p@h0=)U4gd3|i`;9K7=VXCdZsr$3@ybX42$GwYI~1-R2NzyE?CrB$y=C9v()qm$4>zj&Gu$2VGxQtbN})whWrtk91;gJ?iF$XU(wwXpJ8L -z;zcUC+-&)>UK2c*EE)2Zo843B_HC#05!f+aM&i%+L$qQtRB~&-_PNFb^He}CwkO-C -zt5Ev=Vdjp`ScK)}0QeqXFsJ)O}mfl;%{=IZX8H&UEpGi-oP2?C^Y>G0N$<+KSvEbHay4I -zkQwWI|F*!^={-_;w@Ue-1FAU#VS~ad$sy?xXXSeU7A)fq^}4V(}Ia5?^MV^2kFF9_Oo_)eJrA5u)fZWI;5gJt-eC5aNJQml6pR>Uf@z_=h;&1 -z*RHQmT%138Iws9Ar_f4qOs9!P-3>H4S9g?fCM4BgyeQI`V8$_SzaKPoCkmO0#YSjQ -zzSmlEpTl?4G=1kfR{ZbRtQVs5*qp0iMy?SXR1q*{Tq*?TVJ|_Qxfpo-YyDcg}Xnq?WAQ -z<$9Iq716Ro?JmVqMEGm|Oy49`v}xuTYU{Nb%QeGp)|DT3 -zHhK@2Lj-lbHZ|$|zRM}&EUd{Jprz8I2k7VDcI$t)S|DH@&~AkiOp@v@IcgX(lhrpwco!s$R4txV@;|UCf&w*K -z+s*Vend1Qk#9w#r^85qTFsyH+O1>|h!SAg60ti*Tv>X0Ex+tGsC)AnPwIB4r+PLI&sKoq%K!QHdJArJUhxsY7@(K))(CwV15%5C24pu9dKXYpA2?dDD$@A(2L51Sjc@fJo}6 -ze{UG;in!x&CakLl524z-k9NP5W`kqmtF1>Y_X`ou?LhOxA}&*z5a^T`f+E#sQd4^0 -zbJ)%HAwGU(Hl~az811%_GbgCqVX__5rcIZi)P*lSmWBa4AvB~QjlaAl?{7IV8yi9L -zb^R)0hPs%+T!DK1`--ju9Y`qT%k{-PD~^{gb8bNhd&fI>K$i2bEO^9gwA|h|f77B( -z$o%zk&<$4^lvR>8k%=9qojN?nG;K*Or~zjWd^W87FvIIG$<(S46kDX)sd$p~xp+Rk -zI^+|^5CYNj?WiX#ceO;KU@qJZIin$YaIZvI}oFisPZ9v+4!f@&Rlz_{Hauj#H05 -zAXaHxH&GfCG?+m1=8c+Yg_cN5H46^Ou#iT_w{~(gGm=U`PsxHiDWfi7zg4jpZ7gd4 -zx7%3kq*d|oNyoq#7tq3&OC*fuNUp5as0Pc+J>~bK&@`G>prbP`m5!`PnFcy153|OS -z!M!@TfyPQeBLqS9Rw9(#lpUIRm!Z|8oNs73iIIG#ip|sza9$F*gSOa4#|mBA2~d(K;DG -zhqXPB>ME$Zn4VXgwbDMSVgzbT7Ez`8hT?{wFj{J*yKq`MPnjOK+R;gVdu*!goYC%D -z^tS9i8|RalOI>xMW89fPR2+OKYtq3Mwb}*sW_BltnY834hi6+T%(XG+sxPxlPAB=g&F-)(^(hq_FJ=h@iKMtWqvWg!1nAdO}A66B7t>@3&S -z*M&O$r8CP_V-eYoj2YIuDn^A`F};Zf9cxI>yW-_f<@cE7tzN&L?%!@mSAHh^q9W?u -zZw^2*(WT9`RRqvEFS(7mm!v-Hl?a4nW|v?4AuYckyykNJ@rBYaOWCKkLt{>-8lMpU -zGot;-8z=hc+4KNss81g?(5`uqh?tzeaf=e5GaR26X)Y8bJTpSmmAvYffN}_0-9P4z -zydQMScwhb2+>WbMFc()kBrvZ?2M|3*B{FBN{dULpUecWXb$>$OC#;WXt3RGY$H~s; -znEjxZ6zyz19`n4M4u}|LF)MrjkJC8BQs2ht=`uJTYO)|Qb4-QJk|=A+S)b~NL0R=o -zj{vLALKBsvGpj;MbO>1984k#=GVH)Z8-X;i>3J)! -zYNrFg`dhr*U4sHNztE@EP8PZ5yJJ8B7?rPMZ-SuBtIeM*6Ako2EX<156D3!G&`hoV -z89J`UxC*3VM@BELs_iu31~l{>SB3js9D>nHhK^%t{eMr?q(ogT&7>7ujf6X!cB -zoo%#CM56rfgG=Cm|1+EZzg=X*=E-WIE25Y#G(Qg}0a-@v$vgB>oXM90G~D*~fjiA9 -zTL0HofZh#yvr&peRwRD_b6?TZ42~-)zDjh?r$+Dq40hCF4`N -z-2o=6e-d}$8@Tz|ocGz?gx!JHq~)*wMY=a$ZYLgbYLE^Sb?MU?2FJtkNMx~AyWbF( -zU`4}$n%!6{wt9}v423L-eE#R>gv8j;)kj-Wm5lZDpf-aK#b$GL9wY_FgzAVhCfMStZ}aeW)q=z7$=fYnTX`1 -z`G4XIdF|GnylcI0_il{Dzo_#LMy}5NhTj0) -z(0J=N;)p`1LJfA)`G@b&Q=iG}wIY#g0%)PhA>U8-jv*_3>S593GiB2>&UB9k1&>iQ -zCo4Fm^Sb7-Zdpu`Dnp%Q2Q;7T6fTTNq?ta -z72~8n2Bo3)TZT(NZK*dH0ocFn(q^UwcT}35^2+VnmX!$K5Q)uCm57%R2-iO-BNVbg -zL4CL666>iQYwDnNUtLcmho{q`;Q_rzCnUJ`UUXl%0LB#TtSgzU#E*#MErCfZIvqO$ -zWGt3n-!42PoUq9lP!^=W88T#?`h`ziEnfV3555vpvp3Q6t6h^&a}kX$W_iR|zE&aq -z=F86Lz31A=JR0BP^@%4enWz!c-+t19`JOdTKERGyfTw58`E$#cW-m4py@P$ZG@$LU -zFFSI7y?*=d-ZjVaOYA*m%(D#)m8AvA%o|_Ls=3@>A -ztPlJ}SALp1|M7>V>V`Oo;vo4w9?R(smSKfxd1&PH}EiQCHGSQkH!HN-; -z%ZOJ59D^dqkf{)H|C$@M%ssytA(2f6ZBgNtsasNB%kFZ2FRCN#hJYwq^;*g&xbQTX4_KG -z99}21ER8tKt*y~u@yQEP)*zXP9TWH2ZU3O4?}~JqYkK|sT=eVasDhXigz`xL&_G75 -zoM>%Rt*0h55hdf|^dMM~A3$sNM-k}h^kDkx@*n1dao|~pqeuZE%c^)!_pwM<&H6N3 -zMiW#Cmlee+0OgRhf%h?9WMh+quOtEo`zW7}=a?`2nQk>A0@$c@g_+fIu6mE_4z#=d -zCW+0>=qhW>=I~(LbF0$4%XuMRD*(wr4D(`+EZ6QY7`x66E)br9Qbk1`wmZ#1yLjY4 -zF={GhRI)b;egxd&x`yIk5EFeBSFrBSQJMpAo?%7%3mPfY#y&lQg7@)2De5UAOKq!2 -zb}yb@Cmv_%vXTw}b*Sf0)aJ=Rl<3^&PqyLIZZm>LnaM`!hQn-H-Rm1#L*7=**&`k` -z6&b`{!?C0t5xcVmmf|#>5$<0X=@r!ZaARkhYEaCy>MkFEn}(IRz>U+_I4Zjz^x}tU -z`(HF)?wLM5-l{*|A&%WW4DVoyc-@i^_VuXP1|d$36igY=lC%j3xBt2h&VI~1jqaw5 -z4>tL?#*cN`-(@EG{AUYtaNe`wa#4?gvqv` -zXBW3CFJGxRzaDJ=3uDzTG4%cy=KqU-a)eJl1c8382O{+4AbIj2MT?ei5;XKRQia -zWJJF7YFulvfkJN{Gywe4R$v2kME^gTe{tm#@VzM$Z{qu`q|{;;ZPu%ppkoUlvuRM?Yd(GdUugY`xhs)o~fP*Z&DXhH*V`hvbG?8S7h@5HuU)1IpTHQD|+nL -zMl|lv_`>T}K*-2H4CQ2sXro_d+SoxNcG%^01?tWVeb)&{-xd~g+ -zb9_t(((0}xt&kE?D%;)HZ|NBsN3Ig<%e(gd{pd3}Mn?j)2gr0iacp^N2Hg7d2>CcW -z)#2mo#B2DA67J#((2~cU98le>z>`!^%AE!3=~D&?Ape2V@;?VE|CWG2Ap`<$`EPY1 -z2-xxeYY`B<|8X6!N?I`p1X3dYFTj7v_dg<HNirY^h~yk4=bW=3IfF3d!9YfmNE|>wa!!I|Buf&>S%TyN +zNke9C&pzM1XPV%1vsR=xdyUp0ul``RF|cmBF~F~qY{xse!Ni1z#l`dv3umSmtE#imSw(`$&v(RoRPn6RVF`_?q-#~GfAKo+1eVQhUfMY7YBg18tIZh +zduqZzn4`MFeYbAT8hd%~o?)OiD0-w{DJvjINqvuWimqwye$l+KnbX?|lKX(r*XOz^ +zy2;N*;opDCG)>NxAYg)wUs5SR<%tvCoCr^kj<~D6KoEP<9Ee@Z2Zg)5QIP_q#*)jQ +zm?a8?Dsbfw7tL4OH8{-JJ7QslEDn#bHdoB-rhY4cb!b7ae`FwT1O}gBU|8U@tN|3wuNk=})zPX{#+(AO8TGkg9DBt(0MyijeoF!roS!Rbr8O;{>B +z21bYyjtJ^@r`mCYE9T%1hNZ{&*U|yaZ>_3HAwbojt@?|*pgC{fdhF1Er>Y#5VEmWY +zQ*Z(@LFbw#ZHp7hT9+zG0W)tQVHtA$L%(FD0e!Xb^b9?&vyGOzi5Z-6@ENXzS3*%o +z_b38|SU4oOnIPloMC81n;x-({CkgBnPcxuFrnWD)eiT%ce4q~QAuc51q6IN#{c!7u +zA4+kx%dc>7SRqqr@YvQ@(^?4BsaJoxX2|F_;g`M)TshnIA*FW@E>?{v^Pc!yE||FM +zLqK))rjubd86q?F%iHQ^hG!`oMEH6h>m$%^`L`>Y7A8L`BO(O8pW*obTo4vEkiFv) +z;P04*eohoxdA`-q%BrmFSrNf-)A@TjLdB;M&eGuB^bT9CwV^!NY5BF+L7I`dPcs|D +z=wrE_ZJiC&JU^H4gchbYp2h~sxD$L-a3XutdxzP_w6Us7P@xbvSVU))Z8}yUO6a39TpP=8IRdF3>Y`M +zy26fsX?||6wEZRPoLC&t5|*G__I~TF3>BgLrD@lgu?v#d2z>NN*{$`DNat^54s|kO +zqZjaNso3g~15Hu`Pb)18GB0s@dK=6RD*;%=?ahE2)<BSV!T6cCUUTyeG_`JZVg2S$0*)!hb7CcdfYt?gS7jdGA;eqgX{r9j! +zIK;e!)-$pczFVv)<7|K54*uh@5Bj$!t@lJMmaS)+s#Q5D5{-Y4^=TLW@ngkj(4NeJ +z(7$o^ms=og)N&KtaIpTIcUDDBPIldz$j@vDn)=P;Ctx^`=|vGFQO)G#7dUs)CLxf& +zYdC*ZJrF8*?YvToomPu;@D0YyJ9?E+|Qp?>oGwB8HJWZ--LBMDS8# +z|H`72J|eB!ZBvs}?Zx-C7Zl_ngSs8pi(RzMw)=-`<84Rh?;kJ8y0t)*KEJH%_N2oJ +z8JyNIf7f<|DOHar_qQnt!Mo=Ls!mw-!R>&qOnxd26|qLj?l6s#ygz6=%vTFYyJV%ggW)cWSGUj2IksyVuHUk;W}=fw +zB?4j=BP+H4NB%+_$>znijOq<3h}K4Dzs%)%?V8J<5{2zok$<^;;SSJ$1Uz#(TS_zV +zE6(QSw)y>*)ma!9RMbRTsbku2p|M+3J6Y_y$Bid|c&Qif7Y}mr;PbUq+|pU`^{I!j +zt@BEa%5m8~R?onmoX}m&4v0X-)q+#3%28rt>0v^YyyOEr3UWZ@k4WVO{g}#;YQd`s +z{C8Iaw-F@tfcS@JKR$PQf?>EXWGG@sDdlo+ci%eTQXRfQM5Z94uGdMQ6Fa- +zWzcghaX2ZH6N|jVsY`qxsFIf=-F$pu57k&bMKSXTy}DU#r>#D2nGOA`gD0@l8aBo` +z@D=yQ%;jpwVo0URuS%E*E5!R{5j4o_rory^A0wBvSD+DN$Tx#$%k +z*Wa2*_yruMk3DlM-kD8ld&Au!F~y-H72b^pOOUsh%C8oQ3Dfmwht!+%$1rgh# +zH~F4T7wOYj8+>(RjX|7nrDGBJa~ituf{d1x4felY#mp^k5X xHz2;%t=C9-sCdn +zpyGO?hfek2R8qgG^#fH6CWa;N^10&xi*bYVY~6WjR^!0(Jn7=h5!q2Em?#mSh3JDC +z+>2Sm>?yoaIXNzpupvyq+x}`a$>20n8W>=F%XJ1>-ZazP9}p*E3tkIO2yiJ5Ya9kAs`@F*hzP +zFv6U3oA=wv_1eYiiM-+tne6;Ynqm>KFh8_m*q3HdW*LdR9~E%I9D`A7oL6^K^Z!oY +z56;RszHaY249x2I#kj9;XOswDQ8I&}O~E=h9gM8j5H0k@`n-D{uw1g#lI?-6B#{aW +z;`FF7idqVdoA)|npBi4h2-S=qM@Qz*;G>@{aWN=Y2AMan<0VOGgmwl7Qw48b;#`8a +zM2HixD~4OSNrnuoj|VmAtp36Tk|$0AXYWq(Pt~*RJiMK#LWGv{Y(@AybeLPrPD2@u +z_ZzQ2w1yg7<|?4vtYUZOsunUISt+W0oe_G3PORzE7i(t1WO)|T{(ojqE9>E~i^b`M +zBU9km+PA?I5uWSZer5p1qzWsfAGD6a+jR&>^rtX^L24~0DW9+z^Z>& +zRtbv<@?u_hapZyRUzi-CZX^oeLO!`0 +zR}H_z<}+C!K3P0{pfalI$RCVE!8~3gp>9<7zO+bOW|SZYp$&25_jSVVn)n2tg+0ir +zjEs=o6L$dp^>k&)W}Dq<+2VF~{ikBly37N=@d}1Y$v-oreNA74_5&u1FE-7M8`i2b +z0$T%F&=i4+%o9cJRS}&Ys|4R4tJ|e!?-RwkJ-1MC6T3=8zI9tTZeCQqA|=edQxziT +zbX-Z2rYe!!yHOd3A}nc@#39TIiW8T7M33eNG)1M^>lc*asFMblwdK_m6VVd++ltg$ +zSEID0H&Zc-^+{pGT}{YH(=bkC8M#^JU6Ij$W{j +zJay!A8KWi64$Sg<0Os5mCrCOvjz?o#%k8J#asCjrX4DsDI1^02e?)Do%$iU{sv-{A;2+piy49(eW?NY(Et_Ht7nlhd`XVt`HV?W)Oj +z=d*;@PKvqt_AA3!K^-0V*mJItfiCBE;<<{m!#0A{EU+^w{!{%+lM4w@3xTw(@1oJx +zVK9M@@1%+KSidrOR~$$onu|ln^m%2a0AN$gRB%CSRru88a^XB?CA;Nf>H5uSP7cCC +z53Vl~uPy~x`X8+{?tiISUx6||CO`4+EfA{XofhG@yKXX(7C#aL8#U^*gGKiP9Z3Yu +zrpW}E3xdOoS5HQ^Th~+nshP-;T1D${r>ppk(Z@`a_{krj$PQ+by3wWP4U1uki^+ +z0>R|KxJ@<8|(F09l9- +zLI(N_Rbbr>^?fxhI6aLZR3KqVAky(*ii)szT;lKZ*{`^?jQ&UnkLwO+#q4mv7~N+{ +zhsvr~P+;Cd=__Z6O|oZr()u)2Er$PSWSzLHo)MRByaiS1f8V}RTH!w?^mTx!PSpC@ +zMyC8y?g|Rwq?@OoMGgX%H%wMLdiX;jmTgjbpb%@GWPm5pilVB?BZ!saDRcD+wHa9B +zVrDL>jc3C%3*&s5Y|G|^4iTS=Q_~e^3HE)77ws$e-RjS)&d)G`LgDwhMT}zW?oK=I +zf+RcaEvLf|n!U7NSFk6VGeA67e=S+q7ubWX>0S+%aNUicfwcXPj8?}yW=Kuh$-QOk +zoA(q=7P?+rH|6^=dKT2T_n`*4r*=JH=n0iRigjG0-Ne34k#URS4(x=#FW|Y&ta0lv +z;riGZ(*w=EB)rexdpB>@0uO*6f19&mCav5aID`jAX7coB`+NisWM&p4#cneAJ|&hE3IzZ0V`GWu4k} +zgSu1pzzIe^%=fv!sw!>R9wL#AHt~&v`tbdVfeNd!Hgojy^U&qIj+Kd>>9mE>qQjSm +zG+g23lNs&&bb@Bg`nm1V+Nj~87D;Xurd}Imp`BOVjih74)}r@Pgv>f~=7#B@!`VC( +z-g^yQ`{;?lrWf+!(t>)+X}KIfU0F5JVJ8Tp?uPu9m_g&JbGHc-QI2g=`jcX~ji+3b +z$Oo~%kiRp=0Bau1d&q*ES=$1~R3XPjD|4ItGP1NL-q +zo38V4YcJDv@Z{2$58NhiAdnK-D+KRjaPK@#S%Z3F`tJRsk@hYe#4SQIWyRD(qsJvG +zH)?4f+P_S`SL~-Wi4bB$E6Q!^B@t{Da4@FRUZ_8Wk~Mt;Vf8}ZC?7LXoCqLb%nY?I +zDORp9Q|`SqqQ8ZADP)VB)>crBXntBVbmlAkiC}B;M~%~lm!R(N+~Z?~SmDq3DqqWB +zgm_rk1;9IR!+Kp>C5RWru9ZK#owbKIrQ(67!{fS=BQ-l&{Rml9z)qJdL$Mlwm@H81 +zrXZKOn;y{@QBTDPgy8Y!s?jsO?P2QB?NVwTVv_Rafyr_T2H#-Xp!2)bKUX +z@mVf>LZYApOe)OnU-5bGfP8`LJ;eCskeLaCikmeUKB@zUSu!SlZBxt7!L0cOu2eD6 +zQC(f3$Jj@`Crkm7#g4zW5?JK*X7i>w`bIt5N9 +zEqetbBZopjQF2_6zpp)%R#@N~SC;04S_) +zUAB*Kb*2d>A +z7jp^T?zOS-Vd5b`BPCT;uKTz5S8QXAwp9Ti@s+6T02SqGmYxGU3GmGFAITg1b9gxd +z97c0^Q{?;^TLXgEln`zkPjJ9a#8NlPr-!4*f$WTKabeyQ$=~}+>Vp*zIsxVVmeDu2 +zNKOzoh}2y&X-W12DN*XDo{zu1Xyn~Wb409STL;C^!0m^B`>RwuOtETo-t +zzQn}l+Uj>3ZsG!+NFCcZ4MIzJYAFCL!JIO&BtBH2dMwte&rnznpS)NmK--?R3sa(2d!ZllgT% +zRSmKZY~z7Kf{Si;2#E_1Sq~{U*}-1pM5j5_>NuFO>>(uVp~b_sr{?4YBG$RLb1Aa6 +zddV&m>TW7}kFCvn#dNeATrblm3+1GMUv5w{!t{9?|ec +zctuIcGFuaQ@zrh=r$cUck@DE&&3k|QeZ-ufiMAYx^PhYj5OeCHV|>2efr_7NMXaAY +zr*G`I;=9q=-`5)Y-15!ogXawa#NT4v#OpxlT>G%zW58g6o#(QTZEocc0QOG5hM2iG +zMn>%j=y!zFACJ#LE%fr`u&T(#~?TB5E%L~92`l1GkKb( +za#!@OD2>(Kz~AlaRA2iAc{7%iDExFRSuiZ0fOS-)s7X(wll-*QS({|7?RR%PCxu|<{N)Pf)hTk +zCT0u~2UK8kU}sYw<`|;YFpvF${mhp-Pi<0;1TO=c8T9${rXs9w8~zH6nyQrNsE%&e +zqIc?hVs>vIiq|=8t=rkjVS|}_Cd%P%KyRDC68_3kpA3Ix+>gI2t%a!kw|Ho=WvWmm!^)7NMD*#dXf>280NNwR{|GQjRIdkcCH +z+|bVXlfpY`SR1UIE6;oQ$i!WjIr*&1uE@$f3Xwj12U{w-5AG$;uKX4TlXz_%&HlFY +zp~?@w6jNbA*K;0gDOqmD_j5uA@@?QN_q#Qi0TH(PfSEFNYIPI;q(o3G(iUVo&DE|^&Bit46Nn>duA +zqF`6}7Z)_i9@AGL&q%-tNaLrfsp$>6 +zwI*Te%@}_@%@aB&jZm-%QmUF6giDH5GqiYrprX3b?|hvn|HQV_&t$x6Y{?06@dwS@ +zx|V__U9|L=%J^G&^(DxYQeN6H7rZ~RTG-Y#1;c3XD`uptpF?|1d%ldVS$TJi51!nB +zF>N8sj!~W|h4o9na&h{<3xJjNd`VneR^lp0{EwnY?%HhLO3vX}s^4|rBBzN*+5mb37_pN7?1gmdooj(~IhWV?OQ2m;H#qnw{PNPdY88yGkm%0H +zcmI4BiLTLL-27XC2c7X>3;h51KJ#C7{@-MP2)10Mi2;D#yol~iCT1pkN2?7@)KZXb +zQW_i{Gk_0RmZ^OfX=keB3DS?*nIIc4R;arRJI-?drCDC|?j72*-v^baZ2YVk?JOSZ +zF**i3%60Y=m~lF|aK{HtJrG+5nU-$UOE +z3>(6;GoN@uDn#Nl5-8P&_4q(^0?&rZSwiJVWR7V=xe-|yed(O!$+N%RHq8tHF1b4u +z4LL73IlK^rL~|<#wjgm+HS&DIT13?) +zX}1-fJhxWK3?_o|FsmL7DFFCDP7%YY=j`DNIivHu{5Xe9hk= %{cheese_version} @@ -109,14 +69,15 @@ BuildRequires: pkgconfig(gnome-desktop-3.0) >= %{gnome_desktop_version} BuildRequires: pkgconfig(gnome-settings-daemon) >= %{gsd_version} BuildRequires: pkgconfig(goa-1.0) >= %{gnome_online_accounts_version} BuildRequires: pkgconfig(goa-backend-1.0) -BuildRequires: pkgconfig(grilo-0.3) BuildRequires: pkgconfig(gsettings-desktop-schemas) >= %{gsettings_desktop_schemas_version} +BuildRequires: pkgconfig(gsound) BuildRequires: pkgconfig(gtk+-3.0) >= %{gtk3_version} BuildRequires: pkgconfig(gudev-1.0) BuildRequires: pkgconfig(ibus-1.0) BuildRequires: pkgconfig(libcanberra-gtk3) BuildRequires: pkgconfig(libgtop-2.0) -BuildRequires: pkgconfig(libnm) +BuildRequires: pkgconfig(libhandy-1) +BuildRequires: pkgconfig(libnm) >= %{nm_version} BuildRequires: pkgconfig(libnma) BuildRequires: pkgconfig(libpulse) BuildRequires: pkgconfig(libpulse-mainloop-glib) @@ -130,6 +91,8 @@ BuildRequires: pkgconfig(smbclient) BuildRequires: pkgconfig(upower-glib) >= %{upower_version} BuildRequires: pkgconfig(x11) BuildRequires: pkgconfig(xi) +BuildRequires: pkgconfig(udisks2) +BuildRequires: pkgconfig(gcr-3) %ifnarch s390 s390x BuildRequires: pkgconfig(gnome-bluetooth-1.0) >= %{gnome_bluetooth_version} BuildRequires: pkgconfig(libwacom) @@ -142,10 +105,11 @@ Requires: gnome-desktop3%{?_isa} >= %{gnome_desktop_version} Requires: gnome-online-accounts%{?_isa} >= %{gnome_online_accounts_version} Requires: gnome-settings-daemon%{?_isa} >= %{gsd_version} # For g-s-d subscription manager patches -Requires: gnome-settings-daemon%{?_isa} >= 3.32.0-7 +Requires: gnome-settings-daemon%{?_isa} >= 40.0.1-4 Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version} Requires: gtk3%{?_isa} >= %{gtk3_version} Requires: upower%{?_isa} >= %{upower_version} +Requires: power-profiles-daemon >= %{power_profiles_daemon_version} %ifnarch s390 s390x Requires: gnome-bluetooth%{?_isa} >= 1:%{gnome_bluetooth_version} %endif @@ -155,30 +119,34 @@ Requires: %{name}-filesystem = %{version}-%{release} Requires: accountsservice Requires: alsa-lib # For the thunderbolt panel -Requires: bolt +Recommends: bolt # For the color panel Requires: colord # For the printers panel Requires: cups-pk-helper -Requires: dbus-x11 +Requires: dbus # For the info/details panel Requires: glx-utils # For the user languages Requires: iso-codes # For the network panel -Requires: nm-connection-editor Recommends: NetworkManager-wifi -%if 0%{?fedora} +Recommends: nm-connection-editor +# For Show Details in the color panel +Recommends: gnome-color-manager # For the sharing panel -Requires: rygel +Recommends: gnome-remote-desktop +%if 0%{?fedora} +Recommends: rygel %endif # For the info/details panel -Requires: switcheroo-control +Recommends: switcheroo-control # For the keyboard panel Requires: /usr/bin/gkbd-keyboard-display - -Recommends: vino -Recommends: system-config-printer-libs +%if 0%{?fedora} >= 35 || 0%{?rhel} >= 9 +# For the power panel +Recommends: power-profiles-daemon +%endif # Renamed in F28 Provides: control-center = 1:%{version}-%{release} @@ -207,10 +175,20 @@ can install configuration files that are picked up by the control-center utilities. %prep -%autosetup -p1 -Sgit +%autosetup -Sgit -p1 -n gnome-control-center-%{tarball_version} %build -%meson -Ddocumentation=true +%meson \ + -Ddocumentation=true \ +%if 0%{?fedora} + -Ddistributor_logo=%{_datadir}/pixmaps/fedora_logo_med.png \ + -Ddark_mode_distributor_logo=%{_datadir}/pixmaps/fedora_whitelogo_med.png \ +%endif +%if 0%{?rhel} + -Ddistributor_logo=%{_datadir}/pixmaps/fedora-logo.png \ + -Ddark_mode_distributor_logo=%{_datadir}/pixmaps/system-logo-white.png \ +%endif + %{nil} %meson_build %install @@ -230,7 +208,7 @@ chrpath --delete $RPM_BUILD_ROOT%{_bindir}/gnome-control-center %files -f %{name}.lang %license COPYING -%doc AUTHORS NEWS README +%doc NEWS README.md %{_bindir}/gnome-control-center %{_datadir}/applications/*.desktop %{_datadir}/bash-completion/completions/gnome-control-center @@ -238,10 +216,8 @@ chrpath --delete $RPM_BUILD_ROOT%{_bindir}/gnome-control-center %{_datadir}/dbus-1/services/org.gnome.ControlCenter.service %{_datadir}/gettext/ %{_datadir}/glib-2.0/schemas/org.gnome.ControlCenter.gschema.xml -%{_datadir}/gnome-control-center/icons/ %{_datadir}/gnome-control-center/keybindings/*.xml %{_datadir}/gnome-control-center/pixmaps -%{_datadir}/gnome-control-center/sounds/gnome-sounds-default.xml %{_datadir}/gnome-shell/search-providers/gnome-control-center-search-provider.ini %{_datadir}/icons/hicolor/*/*/* %{_datadir}/man/man1/gnome-control-center.1* @@ -253,154 +229,324 @@ chrpath --delete $RPM_BUILD_ROOT%{_bindir}/gnome-control-center %{_datadir}/sounds/gnome/default/*/*.ogg %{_libexecdir}/cc-remote-login-helper %{_libexecdir}/gnome-control-center-search-provider +%{_libexecdir}/gnome-control-center-print-renderer %files filesystem %dir %{_datadir}/gnome-control-center %dir %{_datadir}/gnome-control-center/keybindings -%dir %{_datadir}/gnome-control-center/sounds %dir %{_datadir}/gnome/wm-properties %changelog -* Wed Jun 29 2022 Mahailiang - 3.28.2-33.0.1.1 -- Remove the subscription feature from this app.(delete patch8)(Li linjie) -- Modify distro-logo.patch logo name(Ma hailiang) +* Mon Aug 01 2022 Felipe Borges - 40.0-27 +- Show infobar if night light isn't supported + Resolves: rhbz#2057154 + +* Mon Aug 01 2022 Felipe Borges - 40.0-26 +- Allow changing "Device Name" by pressing "Enter" + Resolves: rhbz#2061182 + +* Fri Jul 09 2022 Felipe Borges - 40.0-25 +- Backport translations for Multitasking panel +- Make Multitasking panel capable of handling Right-to-Left locales + Resolves: #2105228 + +* Wed Jun 22 2022 Tomas Popela - 40.0-24 +- Bump the release to fix upgrades +- Related: rhbz#2097838 -* Wed Jun 22 2022 Michael Catanzaro - 3.28.2-33.1 +* Wed Jun 22 2022 Tomas Popela - 40.0-23 - Remove timezone boundaries - Resolves: #2099774 +- Resolves: rhbz#2097838 -* Thu Feb 24 2022 Benjamin Berg - 3.28.2-33 +* Thu Feb 24 2022 Benjamin Berg - 40.0-22 - Work around libnma not handling OWE - Related: #2023156 + Resolves: #2058163 -* 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 +* Fri Feb 04 2022 Jonas Ådahl - 40.0-21 - 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: #1933962 - -* Sun Jan 24 2021 Ray Strode - 3.28.2-26 -- Support Simple Content Access from subscription manager - Related: #1870837 - -* Thu Dec 03 2020 Marek Kasik - 3.28.2-25 -- Fix a leak found by Coverity -- Related: #1700002 - -* Wed Dec 02 2020 Marek Kasik - 3.28.2-24 -- Fix crashes when updating printer entries -- Related: #1700002 -- Resolves: #1903043 - -* Tue Nov 24 2020 Marek Kasik - 3.28.2-23 -- Update list of printers instead of regenerating it -- Resolves: #1700002 - -* Wed Sep 02 2020 Carlos Garnacho - 3.28.2-22 -- Categorize Infiniband devices correctly - Resolves: #1826379 - -* Mon Jun 29 2020 Carlos Garnacho - 3.28.2-21 -- Honor sound theme changes when changing from the default theme -- Resolves: #1706008 - -* Mon Jun 29 2020 Carlos Garnacho - 3.28.2-20 -- Fix 90min automatic sleep option to not last 80min -- Resolves: #1706076 - -* Fri Feb 21 2020 Carlos Garnacho - 3.28.2-19 -- Backport tool serial/ID detection fixes -- Resolves: #1782517 - -* Thu Feb 13 2020 Carlos Garnacho - 3.28.2-18 -- Pick "Generic Pen" correctly on unknown tool IDs -- Resolves: #1782517 - -* Thu Feb 13 2020 Carlos Garnacho - 3.28.2-17 -- Restore remote desktop password on wayland -- Resolves: #1763207 - -* Mon Jan 20 2020 Benjamin Berg - 3.28.2-16 -- Add patch to support more than 5 enroll steps -- Resolves: #1789474 - -* Mon Dec 16 2019 Carlos Garnacho - 3.28.2-15 -- Fix another crash changing panel with Ethernet dialog opened -- Resolves: #1692299 - -* Fri Dec 13 2019 Carlos Garnacho - 3.28.2-14 -- Restore placeholder label after removing last VPN connection -- Resolves: #1782425 - -* Fri Dec 13 2019 Carlos Garnacho - 3.28.2-13 -- Make IPv4/v6 configuration pages scroll to focus -- Resolves: #1671709 - -* Fri Dec 13 2019 Carlos Garnacho - 3.28.2-12 -- Fix spacing in "new VPN" dialog -- Resolves: #1656988 - -* Wed Dec 04 2019 Carlos Garnacho - 3.28.2-11 -- Fix crash when changing panel with Ethernet dialog opened -- Resolves: #1692299 - -* Wed Dec 04 2019 Carlos Garnacho - 3.28.2-10 -- Fix Wacom tablet removal on wayland session -- Resolves: #1658001 - -* Tue Dec 03 2019 Carlos Garnacho - 3.28.2-9 -- Fix possible crash when closing the wifi panel -- Resolves: #1778668 - -* Mon Dec 01 2019 Tomas Pelka - 3.28.2-8 -- Need rebuild in correct build target -- Resolves: #1749372 - -* Fri Nov 29 2019 Carlos Garnacho - 3.28.2-7 -- Fix warning when disabling sharing -- Resolves: #1749372 - -* Mon Nov 18 2019 Kalev Lember - 3.28.2-6 -- Add subscription manager integration -- Resolves: #1720251 + Resolves: #2046159 + +* Wed Feb 02 2022 Tomas Popela - 40.0-20 +- Fix rpminspect desktop files warnings +- Resolves: #2041348 + +* Fri Jan 28 2022 Felipe Borges - 40.0-19 +- Backport Multitasking panel +- Resolves: #2047723 + +* Thu Jan 20 2022 Felipe Borges - 40.0-18 +- Fix typo in the previous patch +- Resolves: #2041348 + +* Fri Jan 14 2022 Felipe Borges - 40.0-17 +- Set an existing Icon name in the Applications' panel desktop file +- Resolves: #2041348 + +* Tue Sep 07 2021 Kalev Lember - 40.0-16 +- Add desktop file keywords for subscription support +- Resolves: #1937113 + +* Thu Sep 02 2021 Kalev Lember - 40.0-15 +- Forward port subscription manager support from RHEL 8 +- Resolves: #1937113 + +* Wed Aug 25 2021 Carlos Garnacho - 40.0-14 +- Backport WWAN panel + Resolves: #1995559 + +* Fri Aug 20 2021 Carlos Garnacho - 40.0.13 +- Backport power profile changes + Resolves: #1994475 + +* Mon Aug 09 2021 Mohan Boddu - 40.0-12 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Tue Apr 27 2021 Debarshi Ray - 40.0-11 +- Drop the unused build dependency on Grilo +Resolves: #1952274 + +* Thu Apr 15 2021 Mohan Boddu - 40.0-10 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Fri Apr 02 2021 Kalev Lember - 40.0-9 +- Only enable power-profiles-daemon on F35+ and RHEL 9+ + +* Wed Mar 31 2021 Pete Walter - 40.0-8 +- Add back power-profiles-daemon once more + +* Wed Mar 31 2021 Michael Catanzaro - 40.0-7 +- Drop Recommends: power-profiles-daemon for F34 + +* Tue Mar 30 2021 Pete Walter - 40.0-6 +- Use recommends for a few more things + +* Tue Mar 30 2021 Bastien Nocera - 40.0-4 +- Drag power-profiles-daemon in for the power panel + +* Mon Mar 29 2021 Michael Catanzaro - 40.0-3 +- Update Fedora logos to larger versions + +* Wed Mar 24 2021 Kalev Lember - 40.0-2 +- Rebuilt + +* Mon Mar 22 2021 Kalev Lember - 40.0-1 +- Update to 40.0 + +* Mon Mar 15 2021 Kalev Lember - 40~rc-1 +- Update to 40.rc + +* Wed Mar 10 2021 Michael Catanzaro - 40~beta-5 +- Refresh distro logo patch +- Drop Recommends: vino, let vino die! + +* Sun Mar 07 2021 Igor Raits - 40~beta-4 +- Fix modifications of the networks (Fixes: RHBZ#1932674) + +* Wed Feb 24 2021 Felipe Borges - 40~beta-3 +- Include missing patch from 40~beta-2 + +* Tue Feb 23 2021 Felipe Borges - 40~beta-2 +- Fix error preventing the Region & Language panel from loading + +* Sun Feb 21 2021 Kalev Lember - 40~beta-1 +- Update to 40.beta + +* Mon Feb 15 2021 Kalev Lember - 3.38.4-1 +- Update to 3.38.4 + +* Tue Jan 26 2021 Fedora Release Engineering - 3.38.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Sat Jan 16 2021 Kalev Lember - 3.38.3-1 +- Update to 3.38.3 + +* Fri Nov 20 2020 Kalev Lember - 3.38.2-2 +- search: Check for either tracker 2.x or 3.x schemas + +* Fri Nov 20 2020 Kalev Lember - 3.38.2-1 +- Update to 3.38.2 + +* Tue Oct 13 2020 Kalev Lember - 3.38.1-2 +- Add Recommends: nm-connection-editor for the network panel (#1887891) + +* Mon Oct 5 2020 Kalev Lember - 3.38.1-1 +- Update to 3.38.1 + +* Sat Sep 19 2020 Yaroslav Fedevych - 3.38.0-2 +- Specify the minimum libnm version needed to build the package + +* Sat Sep 12 2020 Kalev Lember - 3.38.0-1 +- Update to 3.38.0 + +* Sun Sep 06 2020 Kalev Lember - 3.37.92-1 +- Update to 3.37.92 + +* Mon Aug 17 2020 Kalev Lember - 3.37.90-1 +- Update to 3.37.90 + +* Tue Aug 04 2020 Michael Catanzaro - 3.37.3-4 +- Add Recommends: gnome-color-manager for the color panel + +* Sat Aug 01 2020 Fedora Release Engineering - 3.37.3-3 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 27 2020 Fedora Release Engineering - 3.37.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 20 2020 Kalev Lember - 3.37.3-1 +- Update to 3.37.3 + +* Mon Jul 20 2020 Kalev Lember - 3.36.4-1 +- Update to 3.36.4 + +* Wed Jun 03 2020 Kalev Lember - 3.36.3-1 +- Update to 3.36.3 + +* Fri May 01 2020 Kalev Lember - 3.36.2-1 +- Update to 3.36.2 + +* Tue Apr 28 2020 Felipe Borges - 3.36.1-2 +- Add "Model" row info for Lenovo devices + +* Fri Mar 27 2020 Kalev Lember - 3.36.1-1 +- Update to 3.36.1 + +* Thu Mar 19 2020 Michael Catanzaro - 3.36.0-3 +- No changes, bump revision to maintain upgrade path from F32 + +* Mon Mar 16 2020 Michael Catanzaro - 3.36.0-2 +- Update distro-logo.patch to use fedora_vertical version of logo. + +* Sat Mar 07 2020 Kalev Lember - 3.36.0-1 +- Update to 3.36.0 + +* Mon Mar 02 2020 Kalev Lember - 3.35.92-1 +- Update to 3.35.92 + +* Mon Feb 17 2020 Kalev Lember - 3.35.91-1 +- Update to 3.35.91 + +* Mon Feb 03 2020 Bastien Nocera - 3.35.90-1 ++ gnome-control-center-3.35.90-1 +- Update to 3.35.90 + +* Tue Jan 28 2020 Fedora Release Engineering - 3.34.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Jan 16 2020 Kalev Lember - 3.34.2-3 +- Backport a patch to fix the build with latest libgnome-desktop + +* Mon Dec 09 2019 Michael Catanzaro - 3.34.2-2 +- Drop nm-connection-editor requires, per gnome-control-center#512 +- To edit mobile broadband connections, install nm-connection-editor + +* Wed Nov 27 2019 Kalev Lember - 3.34.2-1 +- Update to 3.34.2 + +* Thu Oct 10 2019 Adam Williamson - 3.34.1-4 +- Add patch to fix crash when selecting display with no modes (rhbz#1756553) + +* Wed Oct 09 2019 Felipe Borges - 3.34.1-3 +- Add patch to fix parsing of addresses while adding printers (rhbz#1750394) + +* Mon Oct 07 2019 Benjamin Berg - 3.34.1-2 +- Add patch to fix resetting of system wide format locale (rhbz#1759221) + +* Mon Oct 07 2019 Kalev Lember - 3.34.1-1 +- Update to 3.34.1 + +* Sat Oct 05 2019 Michael Catanzaro - 3.34.0.1-3 +- Add patch to fix editing wired connection settings (rhbz#1750805) +- Remove broken remote printers patch + +* Wed Oct 02 2019 Michael Catanzaro - 3.34.0.1-2 +- Add patch to fix crash when configuring remote printers + +* Mon Sep 09 2019 Kalev Lember - 3.34.0.1-1 +- Update to 3.34.0.1 + +* Mon Sep 09 2019 Kalev Lember - 3.34.0-1 +- Update to 3.34.0 + +* Mon Aug 12 2019 Kalev Lember - 3.33.90-1 +- Update to 3.33.90 + +* Thu Jul 25 2019 Fedora Release Engineering - 3.33.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sun Jul 21 2019 Kalev Lember - 3.33.3-2 +- Remove libXxf86misc-devel BuildRequires as the package no longer exists + +* Wed Jun 19 2019 Kalev Lember - 3.33.3-1 +- Update to 3.33.3 + +* Fri May 24 2019 Kalev Lember - 3.32.2-1 +- Update to 3.32.2 + +* Tue Apr 16 2019 Adam Williamson - 3.32.1-2 +- Rebuild with Meson fix for #1699099 + +* Fri Mar 29 2019 Kalev Lember - 3.32.1-1 +- Update to 3.32.1 + +* Mon Mar 11 2019 Kalev Lember - 3.32.0.1-1 +- Update to 3.32.0.1 + +* Mon Mar 11 2019 Kalev Lember - 3.32.0-1 +- Update to 3.32.0 + +* Mon Mar 04 2019 Kalev Lember - 3.31.92-1 +- Update to 3.31.92 + +* Sat Feb 23 2019 Kevin Fenzi - 3.31.90-2 +- Add https://gitlab.gnome.org/GNOME/gnome-control-center/merge_requests/387.patch + to fix udisks crash + +* Thu Feb 07 2019 Kalev Lember - 3.31.90-1 +- Update to 3.31.90 + +* Thu Jan 31 2019 Fedora Release Engineering - 3.31.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Wed Jan 09 2019 Kalev Lember - 3.31.4-1 +- Update to 3.31.4 + +* Tue Nov 20 2018 Pete Walter - 3.30.2-3 +- Recommend gnome-remote-desktop for the sharing panel + +* Sat Nov 17 2018 Pete Walter - 3.30.2-2 +- Change bolt requires to recommends (#1643709) +- Change rygel requires to recommends + +* Thu Nov 01 2018 Kalev Lember - 3.30.2-1 +- Update to 3.30.2 + +* Thu Oct 11 2018 David Herrmann - 3.30.1-4 +- Reduce 'dbus-x11' dependency to 'dbus'. The xinit scripts are no longer the + canonical way to start dbus, but the 'dbus' package is nowadays required to + provide a user and system bus to its dependents. + +* Wed Oct 10 2018 Benjamin Berg - 3.30.1-3 +- Add patch to improve background loading. The patch is not acceptable + upstream as is, but is also a good improvement on the current situation + (#1631002) + +* Sun Oct 07 2018 Kalev Lember - 3.30.1-2 +- Backport an upstream fix for a crash in the online accounts panel -* Tue Jul 23 2019 Carlos Garnacho - 3.28.2-5 -- Update wacom panel to newer "output" setting -- Resolves: #1718133 +* Wed Sep 26 2018 Kalev Lember - 3.30.1-1 +- Update to 3.30.1 -* Mon Feb 11 2019 Carlos Garnacho - 3.28.2-4 -- Update "Test your settings" wacom button sensitivity on device availability -- Resolves: #1656995 +* Thu Sep 06 2018 Kalev Lember - 3.30.0-1 +- Update to 3.30.0 -* Thu Dec 13 2018 Marek Kasik - 3.28.2-3 -- Recommend system-config-printer-libs as a dependency -- Resolves: #1637370 +* Sun Aug 12 2018 Kalev Lember - 3.29.90-1 +- Update to 3.29.90 -* Tue Aug 14 2018 Jonas Ådahl - 3.28.2-1 -- Backport screen sharing UI (rhbz#1615810) +* Fri Jul 13 2018 Fedora Release Engineering - 3.28.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild * Tue May 29 2018 Kalev Lember - 3.28.2-1 - Update to 3.28.2 diff --git a/power-profiles-backport.patch b/power-profiles-backport.patch new file mode 100644 index 0000000..641beff --- /dev/null +++ b/power-profiles-backport.patch @@ -0,0 +1,5102 @@ +From 1e3569e2f6c2c418b84ea3aa6ce5f84166ec48a7 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Wed, 31 Mar 2021 11:06:44 +0200 +Subject: [PATCH 01/33] power: Fix possible assertion on startup + +When opening the Power panel, and if power-profiles-daemon isn't already +started, we'll be autostarting it, making it send signals about all the +changed properties, including "PerformanceInhibited" even if we +don't have a Performance row. + +Ignore the property change if we don't have a row for it rather than +asserting. + + #0 0x00007f73916bc292 in raise () from /lib64/libc.so.6 + #1 0x00007f73916a58a4 in abort () from /lib64/libc.so.6 + #2 0x00007f7393203ccc in g_assertion_message.cold () from /lib64/libglib-2.0.so.0 + #3 0x00007f739325f22f in g_assertion_message_expr () from /lib64/libglib-2.0.so.0 + #4 0x000055a4099e28ae in performance_profile_set_inhibited (self=0x55a40b37e320, self=0x55a40b37e320, performance_inhibited=) at ../panels/power/cc-power-panel.c:1366 + #5 power_profiles_properties_changed_cb (self=0x55a40b37e320, changed_properties=, invalidated_properties=, proxy=) at ../panels/power/cc-power-panel.c:1425 + #6 0x00007f7393332c2f in g_closure_invoke () from /lib64/libgobject-2.0.so.0 + #7 0x00007f739334eea6 in signal_emit_unlocked_R () from /lib64/libgobject-2.0.so.0 + +1362 { +1363 CcPowerProfileRow *row; +1364 +1365 row = self->power_profiles_row[CC_POWER_PROFILE_PERFORMANCE]; +1366 g_assert (row != NULL); +1367 cc_power_profile_row_set_performance_inhibited (row, performance_inhibited); +1368 } +--- + panels/power/cc-power-panel.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c +index c9c4705da..0b8226a29 100644 +--- a/panels/power/cc-power-panel.c ++++ b/panels/power/cc-power-panel.c +@@ -1363,7 +1363,8 @@ performance_profile_set_inhibited (CcPowerPanel *self, + CcPowerProfileRow *row; + + row = self->power_profiles_row[CC_POWER_PROFILE_PERFORMANCE]; +- g_assert (row != NULL); ++ if (!row) ++ return; + cc_power_profile_row_set_performance_inhibited (row, performance_inhibited); + } + +-- +2.32.0 + + +From da2248d43f519f13b57e89cdc80bbbfe346ad463 Mon Sep 17 00:00:00 2001 +From: Adrien Plazas +Date: Thu, 7 Jan 2021 14:00:15 +0100 +Subject: [PATCH 02/33] power: Simplifies keyboard navigation + +This drops the ability to loop through the page but significantly +simplifies the code. I think this is a good tradeoff as looping is a +rather unexpected behavior. +--- + panels/power/cc-power-panel.c | 70 ++--------------------------------- + 1 file changed, 4 insertions(+), 66 deletions(-) + +diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c +index 0b8226a29..1d31a8a83 100644 +--- a/panels/power/cc-power-panel.c ++++ b/panels/power/cc-power-panel.c +@@ -122,9 +122,6 @@ struct _CcPowerPanel + gboolean has_batteries; + char *chassis_type; + +- GList *boxes; +- GList *boxes_reverse; +- + GDBusProxy *bt_rfkill; + GDBusProxy *bt_properties; + +@@ -169,8 +166,6 @@ cc_power_panel_dispose (GObject *object) + #ifdef HAVE_NETWORK_MANAGER + g_clear_object (&self->nm_client); + #endif +- g_clear_pointer (&self->boxes, g_list_free); +- g_clear_pointer (&self->boxes_reverse, g_list_free); + if (self->iio_proxy_watch_id != 0) + g_bus_unwatch_name (self->iio_proxy_watch_id); + self->iio_proxy_watch_id = 0; +@@ -869,60 +864,12 @@ nm_client_ready_cb (GObject *source_object, + static gboolean + keynav_failed_cb (CcPowerPanel *self, GtkDirectionType direction, GtkWidget *list) + { +- GtkWidget *next_list = NULL; +- GList *item, *boxes_list; +- gdouble value, lower, upper, page; +- +- /* Find the list in the list of GtkListBoxes */ +- if (direction == GTK_DIR_DOWN) +- boxes_list = self->boxes; +- else +- boxes_list = self->boxes_reverse; +- +- item = g_list_find (boxes_list, list); +- g_assert (item); +- item = item->next; +- while (1) +- { +- if (item == NULL) +- item = boxes_list; +- +- /* Avoid looping */ +- if (item->data == list) +- break; +- +- if (gtk_widget_is_visible (item->data)) +- { +- next_list = item->data; +- break; +- } +- +- item = item->next; +- } +- +- if (next_list) +- { +- gtk_widget_child_focus (next_list, direction); +- return TRUE; +- } +- +- value = gtk_adjustment_get_value (self->focus_adjustment); +- lower = gtk_adjustment_get_lower (self->focus_adjustment); +- upper = gtk_adjustment_get_upper (self->focus_adjustment); +- page = gtk_adjustment_get_page_size (self->focus_adjustment); ++ if (direction != GTK_DIR_UP && direction != GTK_DIR_DOWN) ++ return FALSE; + +- if (direction == GTK_DIR_UP && value > lower) +- { +- gtk_adjustment_set_value (self->focus_adjustment, lower); +- return TRUE; +- } +- else if (direction == GTK_DIR_DOWN && value < upper - page) +- { +- gtk_adjustment_set_value (self->focus_adjustment, upper - page); +- return TRUE; +- } ++ direction == GTK_DIR_UP ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD; + +- return FALSE; ++ return gtk_widget_child_focus (GTK_WIDGET (self), direction); + } + + static void +@@ -1559,8 +1506,6 @@ setup_power_profiles (CcPowerPanel *self) + + gtk_widget_show (GTK_WIDGET (self->power_profile_section)); + +- self->boxes_reverse = g_list_prepend (self->boxes_reverse, self->power_profile_listbox); +- + props = g_variant_get_child_value (variant, 0); + performance_inhibited = variant_lookup_string (props, "PerformanceInhibited"); + active_profile = variant_lookup_string (props, "ActiveProfile"); +@@ -1780,7 +1725,6 @@ cc_power_panel_init (CcPowerPanel *self) + battery_label = g_markup_printf_escaped ("%s", _("Battery")); + gtk_label_set_markup (self->battery_heading, battery_label); + +- self->boxes_reverse = g_list_prepend (self->boxes_reverse, self->battery_listbox); + gtk_list_box_set_header_func (self->battery_listbox, + cc_list_box_update_header_func, + NULL, NULL); +@@ -1790,7 +1734,6 @@ cc_power_panel_init (CcPowerPanel *self) + device_label = g_markup_printf_escaped ("%s", _("Devices")); + gtk_label_set_markup (self->device_heading, device_label); + +- self->boxes_reverse = g_list_prepend (self->boxes_reverse, self->device_listbox); + gtk_list_box_set_header_func (self->device_listbox, + cc_list_box_update_header_func, + NULL, NULL); +@@ -1809,7 +1752,6 @@ cc_power_panel_init (CcPowerPanel *self) + + power_saving_label = g_strdup_printf ("%s", _("Power Saving")); + gtk_label_set_markup (self->power_saving_heading, power_saving_label); +- self->boxes_reverse = g_list_prepend (self->boxes_reverse, self->power_saving_listbox); + gtk_list_box_set_header_func (self->power_saving_listbox, + cc_list_box_update_header_func, + NULL, NULL); +@@ -1817,15 +1759,11 @@ cc_power_panel_init (CcPowerPanel *self) + + general_label = g_markup_printf_escaped ("%s", _("Suspend & Power Button")); + gtk_label_set_markup (self->general_heading, general_label); +- self->boxes_reverse = g_list_prepend (self->boxes_reverse, self->general_listbox); + gtk_list_box_set_header_func (self->general_listbox, + cc_list_box_update_header_func, + NULL, NULL); + setup_general_section (self); + +- self->boxes = g_list_copy (self->boxes_reverse); +- self->boxes = g_list_reverse (self->boxes); +- + /* populate batteries */ + g_signal_connect_object (self->up_client, "device-added", G_CALLBACK (up_client_device_added), self, G_CONNECT_SWAPPED); + g_signal_connect_object (self->up_client, "device-removed", G_CALLBACK (up_client_device_removed), self, G_CONNECT_SWAPPED); +-- +2.32.0 + + +From 25027f6c3c6928eeedb440fe2ca84412dae49ab2 Mon Sep 17 00:00:00 2001 +From: Adrien Plazas +Date: Fri, 8 Jan 2021 16:00:25 +0100 +Subject: [PATCH 03/33] power: Don't set the vadjustment + +This is useless as GtkScrolledwindow already does it on the viewport it +creates. +--- + panels/power/cc-power-panel.c | 9 --------- + panels/power/cc-power-panel.ui | 4 ++-- + 2 files changed, 2 insertions(+), 11 deletions(-) + +diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c +index 1d31a8a83..1a8cfa969 100644 +--- a/panels/power/cc-power-panel.c ++++ b/panels/power/cc-power-panel.c +@@ -91,8 +91,6 @@ struct _CcPowerPanel + GtkListBoxRow *kbd_brightness_row; + CcBrightnessScale *kbd_brightness_scale; + GtkSizeGroup *level_sizegroup; +- GtkScrolledWindow *main_scroll; +- HdyClamp *main_box; + GtkListBoxRow *mobile_row; + GtkSwitch *mobile_switch; + GtkComboBox *power_button_combo; +@@ -136,8 +134,6 @@ struct _CcPowerPanel + #ifdef HAVE_NETWORK_MANAGER + NMClient *nm_client; + #endif +- +- GtkAdjustment *focus_adjustment; + }; + + CC_PANEL_REGISTER (CcPowerPanel, cc_power_panel) +@@ -1661,8 +1657,6 @@ cc_power_panel_class_init (CcPowerPanelClass *klass) + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, kbd_brightness_row); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, kbd_brightness_scale); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, level_sizegroup); +- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, main_scroll); +- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, main_box); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_row); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_switch); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_combo); +@@ -1775,7 +1769,4 @@ cc_power_panel_init (CcPowerPanel *self) + G_CALLBACK (up_client_changed), self, G_CONNECT_SWAPPED); + } + up_client_changed (self); +- +- self->focus_adjustment = gtk_scrolled_window_get_vadjustment (self->main_scroll); +- gtk_container_set_focus_vadjustment (GTK_CONTAINER (self->main_box), self->focus_adjustment); + } +diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui +index ea3cf9322..d3e200d93 100644 +--- a/panels/power/cc-power-panel.ui ++++ b/panels/power/cc-power-panel.ui +@@ -113,12 +113,12 @@ + True + False + +- ++ + True + False + never + +- ++ + True + 32 + 32 +-- +2.32.0 + + +From caf3d70a7004552e0bb382a1a1220cdac9c0c1f0 Mon Sep 17 00:00:00 2001 +From: Adrien Plazas +Date: Fri, 8 Jan 2021 16:12:56 +0100 +Subject: [PATCH 04/33] power: Use HdyComboRow for the Blank Screen row + +This simplifies the code a bit and modernizes the UI. +--- + panels/power/cc-power-panel.c | 110 ++++++++++++++++++++++++++------- + panels/power/cc-power-panel.ui | 88 ++------------------------ + 2 files changed, 92 insertions(+), 106 deletions(-) + +diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c +index 1a8cfa969..b046b2589 100644 +--- a/panels/power/cc-power-panel.c ++++ b/panels/power/cc-power-panel.c +@@ -73,7 +73,7 @@ struct _CcPowerPanel + GtkSizeGroup *battery_row_sizegroup; + GtkBox *battery_section; + GtkSizeGroup *battery_sizegroup; +- GtkListBoxRow *blank_screen_row; ++ HdyComboRow *blank_screen_row; + GtkListBoxRow *brightness_row; + CcBrightnessScale *brightness_scale; + GtkListBoxRow *bt_row; +@@ -87,7 +87,6 @@ struct _CcPowerPanel + GtkLabel *general_heading; + GtkListBox *general_listbox; + GtkBox *general_section; +- GtkComboBox *idle_delay_combo; + GtkListBoxRow *kbd_brightness_row; + CcBrightnessScale *kbd_brightness_scale; + GtkSizeGroup *level_sizegroup; +@@ -577,6 +576,49 @@ set_value_for_combo (GtkComboBox *combo_box, gint value) + gtk_combo_box_set_active_iter (combo_box, &new); + } + ++static void ++set_value_for_combo_row (HdyComboRow *combo_row, gint value) ++{ ++ gboolean insert = FALSE; ++ guint insert_before = 0; ++ guint i; ++ HdyValueObject *new; ++ GListModel *model; ++ gint value_last = 0; ++ g_autofree gchar *text = NULL; ++ ++ /* try to make the UI match the setting */ ++ model = hdy_combo_row_get_model (combo_row); ++ for (i = 0; i < g_list_model_get_n_items (model); i++) ++ { ++ HdyValueObject *value_object = g_list_model_get_item (model, i); ++ gint value_tmp = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (value_object), "value")); ++ if (value_tmp == value) ++ { ++ hdy_combo_row_set_selected_index (combo_row, i); ++ return; ++ } ++ ++ /* Insert before if the next value is larger or the value is lower ++ * again (i.e. "Never" is zero and last). */ ++ if (!insert && (value_tmp > value || value_last > value_tmp)) ++ { ++ insert = TRUE; ++ insert_before = i; ++ } ++ ++ value_last = value_tmp; ++ } ++ ++ /* The value is not listed, so add it at the best point (or the end). */ ++ text = cc_util_time_to_string_text (value * 1000); ++ new = hdy_value_object_new_string (text); ++ g_object_set_data (G_OBJECT (new), "value", ++ GUINT_TO_POINTER (value)); ++ g_list_store_insert (G_LIST_STORE (model), insert_before, new); ++ hdy_combo_row_set_selected_index (combo_row, insert_before); ++} ++ + static void + set_ac_battery_ui_mode (CcPowerPanel *self) + { +@@ -869,25 +911,18 @@ keynav_failed_cb (CcPowerPanel *self, GtkDirectionType direction, GtkWidget *lis + } + + static void +-idle_delay_combo_changed_cb (CcPowerPanel *self) ++blank_screen_row_changed_cb (CcPowerPanel *self) + { +- GtkTreeIter iter; +- GtkTreeModel *model; ++ GListModel *model; ++ gint selected_index; ++ HdyValueObject *value_object; + gint value; +- gboolean ret; + +- /* no selection */ +- ret = gtk_combo_box_get_active_iter (self->idle_delay_combo, &iter); +- if (!ret) +- return; ++ model = hdy_combo_row_get_model (self->blank_screen_row); ++ selected_index = hdy_combo_row_get_selected_index (self->blank_screen_row); ++ value_object = g_list_model_get_item (model, selected_index); ++ value = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (value_object), "value")); + +- /* get entry */ +- model = gtk_combo_box_get_model (self->idle_delay_combo); +- gtk_tree_model_get (model, &iter, +- 1, &value, +- -1); +- +- /* set both keys */ + g_settings_set_uint (self->session_settings, "idle-delay", value); + } + +@@ -1171,6 +1206,37 @@ has_kbd_brightness_cb (CcPowerPanel *self, + gtk_widget_set_visible (GTK_WIDGET (self->kbd_brightness_row), has_brightness); + } + ++static void ++populate_blank_screen_row (HdyComboRow *combo_row) ++{ ++ g_autoptr (GListStore) list_store = g_list_store_new (HDY_TYPE_VALUE_OBJECT); ++ gint minutes[] = { 1, 2, 3, 4, 5, 8, 10, 12, 15 }; ++ guint i; ++ g_autoptr (HdyValueObject) never_value_object = NULL; ++ ++ for (i = 0; i < G_N_ELEMENTS (minutes); i++) ++ { ++ gchar *text = NULL; ++ g_autoptr (HdyValueObject) value_object = NULL; ++ ++ /* Translators: Option for "Blank Screen" in "Power" panel */ ++ text = g_strdup_printf (g_dngettext (GETTEXT_PACKAGE, "%d minute", "%d minutes", minutes[i]), minutes[i]); ++ value_object = hdy_value_object_new_take_string (text); ++ ++ g_object_set_data (G_OBJECT (value_object), "value", GUINT_TO_POINTER (minutes[i] * 60)); ++ g_list_store_append (list_store, value_object); ++ } ++ ++ never_value_object = hdy_value_object_new_string (C_("Idle time", "Never")); ++ g_object_set_data (G_OBJECT (never_value_object), "value", GUINT_TO_POINTER (0)); ++ g_list_store_append (list_store, never_value_object); ++ ++ hdy_combo_row_bind_name_model (combo_row, ++ G_LIST_MODEL (list_store), ++ (HdyComboRowGetNameFunc) hdy_value_object_dup_string, ++ NULL, NULL); ++} ++ + static void + setup_power_saving (CcPowerPanel *self) + { +@@ -1191,10 +1257,11 @@ setup_power_saving (CcPowerPanel *self) + self->dim_screen_switch, "active", + G_SETTINGS_BIND_DEFAULT); + ++ g_signal_handlers_block_by_func (self->blank_screen_row, blank_screen_row_changed_cb, self); ++ populate_blank_screen_row (self->blank_screen_row); + value = g_settings_get_uint (self->session_settings, "idle-delay"); +- g_signal_handlers_block_by_func (self->idle_delay_combo, idle_delay_combo_changed_cb, self); +- set_value_for_combo (self->idle_delay_combo, value); +- g_signal_handlers_unblock_by_func (self->idle_delay_combo, idle_delay_combo_changed_cb, self); ++ set_value_for_combo_row (self->blank_screen_row, value); ++ g_signal_handlers_unblock_by_func (self->blank_screen_row, blank_screen_row_changed_cb, self); + + /* The default values for these settings are unfortunate for us; + * timeout == 0, action == suspend means 'do nothing' - just +@@ -1653,7 +1720,6 @@ cc_power_panel_class_init (CcPowerPanelClass *klass) + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, general_heading); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, general_listbox); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, general_section); +- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, idle_delay_combo); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, kbd_brightness_row); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, kbd_brightness_scale); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, level_sizegroup); +@@ -1683,7 +1749,7 @@ cc_power_panel_class_init (CcPowerPanelClass *klass) + gtk_widget_class_bind_template_callback (widget_class, bt_switch_changed_cb); + gtk_widget_class_bind_template_callback (widget_class, has_brightness_cb); + gtk_widget_class_bind_template_callback (widget_class, has_kbd_brightness_cb); +- gtk_widget_class_bind_template_callback (widget_class, idle_delay_combo_changed_cb); ++ gtk_widget_class_bind_template_callback (widget_class, blank_screen_row_changed_cb); + gtk_widget_class_bind_template_callback (widget_class, keynav_failed_cb); + gtk_widget_class_bind_template_callback (widget_class, mobile_switch_changed_cb); + gtk_widget_class_bind_template_callback (widget_class, power_button_combo_changed_cb); +diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui +index d3e200d93..a9bb39b77 100644 +--- a/panels/power/cc-power-panel.ui ++++ b/panels/power/cc-power-panel.ui +@@ -51,56 +51,6 @@ + + + +- +- +- +- +- +- +- +- +- +- 1 minute +- 60 +- +- +- 2 minutes +- 120 +- +- +- 3 minutes +- 180 +- +- +- 4 minutes +- 240 +- +- +- 5 minutes +- 300 +- +- +- 8 minutes +- 480 +- +- +- 10 minutes +- 600 +- +- +- 12 minutes +- 720 +- +- +- 15 minutes +- 900 +- +- +- Never +- 0 +- +- +- + + + +@@ -447,41 +397,11 @@ + + + +- ++ + True +- False +- False +- +- +- True +- 12 +- 12 +- 12 +- +- +- True +- True +- True +- end +- _Blank Screen +- 6 +- 6 +- True +- 0 +- idle_delay_combo +- +- +- +- +- True +- center +- 0 +- idle_time_liststore +- +- +- +- +- ++ _Blank Screen ++ True ++ + + + +-- +2.32.0 + + +From 7dbe681401f3f487f1e752a0569cf3d743a74187 Mon Sep 17 00:00:00 2001 +From: Adrien Plazas +Date: Fri, 8 Jan 2021 16:17:42 +0100 +Subject: [PATCH 05/33] power: Use HdyComboRow for the Power Button Behavior + row + +This simplifies the code a bit and modernizes the UI. +--- + panels/power/cc-power-panel.c | 71 ++++++++++++++++++---------------- + panels/power/cc-power-panel.ui | 46 ++-------------------- + 2 files changed, 42 insertions(+), 75 deletions(-) + +diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c +index b046b2589..ea979cfc7 100644 +--- a/panels/power/cc-power-panel.c ++++ b/panels/power/cc-power-panel.c +@@ -92,9 +92,7 @@ struct _CcPowerPanel + GtkSizeGroup *level_sizegroup; + GtkListBoxRow *mobile_row; + GtkSwitch *mobile_switch; +- GtkComboBox *power_button_combo; +- GtkListStore *power_button_liststore; +- GtkListBoxRow *power_button_row; ++ HdyComboRow *power_button_row; + GtkLabel *power_profile_heading; + GtkListBox *power_profile_listbox; + GtkBox *power_profile_section; +@@ -927,25 +925,18 @@ blank_screen_row_changed_cb (CcPowerPanel *self) + } + + static void +-power_button_combo_changed_cb (CcPowerPanel *self) ++power_button_row_changed_cb (CcPowerPanel *self) + { +- GtkTreeIter iter; +- GtkTreeModel *model; ++ GListModel *model; ++ gint selected_index; ++ HdyValueObject *value_object; + gint value; +- gboolean ret; + +- /* no selection */ +- ret = gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self->power_button_combo), &iter); +- if (!ret) +- return; +- +- /* get entry */ +- model = gtk_combo_box_get_model (GTK_COMBO_BOX (self->power_button_combo)); +- gtk_tree_model_get (model, &iter, +- 1, &value, +- -1); ++ model = hdy_combo_row_get_model (self->power_button_row); ++ selected_index = hdy_combo_row_get_selected_index (self->power_button_row); ++ value_object = g_list_model_get_item (model, selected_index); ++ value = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (value_object), "value")); + +- /* set both keys */ + g_settings_set_enum (self->gsd_settings, "power-button-action", value); + } + +@@ -1048,10 +1039,11 @@ set_sleep_type (const GValue *value, + } + + static void +-populate_power_button_model (GtkTreeModel *model, +- gboolean can_suspend, +- gboolean can_hibernate) ++populate_power_button_row (HdyComboRow *combo_row, ++ gboolean can_suspend, ++ gboolean can_hibernate) + { ++ g_autoptr (GListStore) list_store = NULL; + struct { + char *name; + GsdPowerButtonActionType value; +@@ -1063,20 +1055,28 @@ populate_power_button_model (GtkTreeModel *model, + }; + guint i; + ++ list_store = g_list_store_new (HDY_TYPE_VALUE_OBJECT); + for (i = 0; i < G_N_ELEMENTS (actions); i++) + { ++ g_autoptr (HdyValueObject) value_object = NULL; ++ + if (!can_suspend && actions[i].value == GSD_POWER_BUTTON_ACTION_SUSPEND) + continue; + + if (!can_hibernate && actions[i].value == GSD_POWER_BUTTON_ACTION_HIBERNATE) + continue; + +- gtk_list_store_insert_with_values (GTK_LIST_STORE (model), +- NULL, -1, +- 0, _(actions[i].name), +- 1, actions[i].value, +- -1); ++ value_object = hdy_value_object_new_string (actions[i].name); ++ g_object_set_data (G_OBJECT (value_object), ++ "value", ++ GUINT_TO_POINTER (actions[i].value)); ++ g_list_store_append (list_store, value_object); + } ++ ++ hdy_combo_row_bind_name_model (combo_row, ++ G_LIST_MODEL (list_store), ++ (HdyComboRowGetNameFunc) hdy_value_object_dup_string, ++ NULL, NULL); + } + + #define NEVER 0 +@@ -1635,10 +1635,17 @@ setup_general_section (CcPowerPanel *self) + { + gtk_widget_show (GTK_WIDGET (self->power_button_row)); + +- populate_power_button_model (GTK_TREE_MODEL (self->power_button_liststore), can_suspend, can_hibernate); +- g_signal_handlers_block_by_func (self->power_button_combo, power_button_combo_changed_cb, self); +- set_value_for_combo (self->power_button_combo, g_settings_get_enum (self->gsd_settings, "power-button-action")); +- g_signal_handlers_unblock_by_func (self->power_button_combo, power_button_combo_changed_cb, self); ++ g_signal_handlers_block_by_func (self->power_button_row, ++ power_button_row_changed_cb, ++ self); ++ populate_power_button_row (self->power_button_row, ++ can_suspend, ++ can_hibernate); ++ set_value_for_combo_row (self->power_button_row, ++ g_settings_get_enum (self->gsd_settings, "power-button-action")); ++ g_signal_handlers_unblock_by_func (self->power_button_row, ++ power_button_row_changed_cb, ++ self); + + show_section = TRUE; + } +@@ -1725,8 +1732,6 @@ cc_power_panel_class_init (CcPowerPanelClass *klass) + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, level_sizegroup); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_row); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_switch); +- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_combo); +- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_liststore); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_row); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_heading); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_listbox); +@@ -1752,7 +1757,7 @@ cc_power_panel_class_init (CcPowerPanelClass *klass) + gtk_widget_class_bind_template_callback (widget_class, blank_screen_row_changed_cb); + gtk_widget_class_bind_template_callback (widget_class, keynav_failed_cb); + gtk_widget_class_bind_template_callback (widget_class, mobile_switch_changed_cb); +- gtk_widget_class_bind_template_callback (widget_class, power_button_combo_changed_cb); ++ gtk_widget_class_bind_template_callback (widget_class, power_button_row_changed_cb); + gtk_widget_class_bind_template_callback (widget_class, power_profiles_row_activated_cb); + gtk_widget_class_bind_template_callback (widget_class, power_saving_listbox_row_activated_cb); + gtk_widget_class_bind_template_callback (widget_class, wifi_switch_changed_cb); +diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui +index a9bb39b77..18fc0a8ac 100644 +--- a/panels/power/cc-power-panel.ui ++++ b/panels/power/cc-power-panel.ui +@@ -51,14 +51,6 @@ + + + +- +- +- +- +- +- +- +- + +-- +2.32.0 + + +From 58480754efd5fdc66db0940ce5c19abfbd2158b6 Mon Sep 17 00:00:00 2001 +From: Adrien Plazas +Date: Thu, 7 Jan 2021 14:37:56 +0100 +Subject: [PATCH 08/33] power: Fix the indentation + +The indentation was purposefully left incorrect in the previous commits +to ease the review of the actual changes, this fixes it. +--- + panels/power/cc-power-panel.ui | 426 ++++++++++++++++----------------- + 1 file changed, 213 insertions(+), 213 deletions(-) + +diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui +index 26d6ffddc..8e999c6d5 100644 +--- a/panels/power/cc-power-panel.ui ++++ b/panels/power/cc-power-panel.ui +@@ -57,238 +57,238 @@ + + + True ++ ++ ++ True ++ Battery ++ ++ ++ ++ ++ ++ True ++ none ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ Devices ++ ++ ++ ++ ++ ++ True ++ none ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ False ++ Power Mode ++ Affects system performance and power usage. ++ ++ ++ ++ ++ ++ True ++ none ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ Power Saving ++ ++ ++ True ++ _Screen Brightness ++ True + +- ++ + True +- Battery +- +- +- +- +- +- True +- none +- +- +- +- +- +- +- ++ center ++ True ++ screen ++ + + ++ ++ ++ ++ ++ True ++ Automatic Brightness + +- ++ + True +- Devices +- +- +- +- +- +- True +- none +- +- +- +- +- +- +- ++ center ++ + + ++ ++ ++ ++ ++ True ++ _Keyboard Brightness ++ True + +- +- False +- Power Mode +- Affects system performance and power usage. +- +- +- +- +- +- True +- none +- +- +- +- +- +- +- +- ++ ++ True ++ center ++ True ++ kbd ++ + + ++ ++ ++ ++ ++ True ++ Dim Screen When Inactive ++ dim_screen_switch + +- ++ + True +- Power Saving +- +- +- True +- _Screen Brightness +- True +- +- +- True +- center +- True +- screen +- +- +- +- +- +- +- +- True +- Automatic Brightness +- +- +- True +- center +- +- +- +- +- +- +- +- True +- _Keyboard Brightness +- True +- +- +- True +- center +- True +- kbd +- +- +- +- +- +- +- +- True +- Dim Screen When Inactive +- dim_screen_switch +- +- +- True +- center +- +- +- +- +- +- +- True +- _Blank Screen +- True +- +- +- +- +- +- False +- _Automatic Suspend +- True +- True +- +- +- +- True +- end +- +- +- +- +- +- +- +- False +- _Wi-Fi +- Wi-Fi can be turned off to save power. +- True +- wifi_switch +- +- +- True +- center +- +- +- +- +- +- +- +- False +- _Mobile Broadband +- Mobile broadband (LTE, 4G, 3G, etc.) can be turned off to save power. +- True +- mobile_switch +- +- +- True +- center +- +- +- +- +- +- +- +- False +- _Bluetooth +- Bluetooth can be turned off to save power. +- True +- bt_switch +- +- +- True +- center +- +- +- +- +- ++ center + + ++ ++ ++ ++ ++ True ++ _Blank Screen ++ True ++ ++ ++ ++ ++ ++ False ++ _Automatic Suspend ++ True ++ True ++ ++ ++ ++ True ++ end ++ ++ ++ ++ ++ ++ ++ ++ False ++ _Wi-Fi ++ Wi-Fi can be turned off to save power. ++ True ++ wifi_switch ++ ++ ++ True ++ center ++ ++ ++ ++ ++ ++ ++ ++ False ++ _Mobile Broadband ++ Mobile broadband (LTE, 4G, 3G, etc.) can be turned off to save power. ++ True ++ mobile_switch ++ ++ ++ True ++ center ++ ++ ++ ++ ++ ++ ++ ++ False ++ _Bluetooth ++ Bluetooth can be turned off to save power. ++ True ++ bt_switch + +- ++ + True +- Suspend & Power Button +- +- +- False +- Po_wer Button Behavior +- True +- +- +- +- +- +- False +- Show Battery _Percentage +- True +- battery_percentage_switch +- +- +- True +- center +- +- +- +- ++ center ++ + + ++ ++ ++ ++ ++ ++ ++ True ++ Suspend & Power Button ++ ++ ++ False ++ Po_wer Button Behavior ++ True ++ ++ ++ ++ ++ ++ False ++ Show Battery _Percentage ++ True ++ battery_percentage_switch ++ ++ ++ True ++ center ++ ++ ++ ++ ++ ++ + + + +-- +2.32.0 + + +From 036545ebc5b3deba1d4bb4ac82dc102413804e83 Mon Sep 17 00:00:00 2001 +From: Adrien Plazas +Date: Fri, 8 Jan 2021 16:29:18 +0100 +Subject: [PATCH 09/33] power: Hide the icon of the battery row when unused + +This gives more room to the label. +--- + panels/power/cc-battery-row.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/panels/power/cc-battery-row.c b/panels/power/cc-battery-row.c +index 55d7584d7..f6faca0c1 100644 +--- a/panels/power/cc-battery-row.c ++++ b/panels/power/cc-battery-row.c +@@ -275,7 +275,12 @@ cc_battery_row_new (UpDevice *device, + + /* Icon */ + if (is_kind_battery && icon_name != NULL && icon_name[0] != '\0') +- gtk_image_set_from_icon_name (self->icon, icon_name, GTK_ICON_SIZE_BUTTON); ++ { ++ gtk_image_set_from_icon_name (self->icon, icon_name, GTK_ICON_SIZE_BUTTON); ++ gtk_widget_show (GTK_WIDGET (self->icon)); ++ } ++ else ++ gtk_widget_hide (GTK_WIDGET (self->icon)); + + /* Percentage label */ + if (battery_level == UP_DEVICE_LEVEL_NONE) +@@ -347,4 +352,4 @@ UpDeviceKind + cc_battery_row_get_kind (CcBatteryRow *self) + { + return self->kind; +-} +\ No newline at end of file ++} +-- +2.32.0 + + +From c4849778de730f37618120dbdd37f30515ecc77a Mon Sep 17 00:00:00 2001 +From: Adrien Plazas +Date: Fri, 8 Jan 2021 16:30:12 +0100 +Subject: [PATCH 10/33] power: Ellipsize the labels of the battery row + +This helps the window fit any size, including the narrow one of phones. +--- + panels/power/cc-battery-row.ui | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/panels/power/cc-battery-row.ui b/panels/power/cc-battery-row.ui +index 932e5d39f..dec97a9fe 100644 +--- a/panels/power/cc-battery-row.ui ++++ b/panels/power/cc-battery-row.ui +@@ -28,6 +28,8 @@ + + + True ++ end ++ 0 + + + +@@ -79,6 +81,8 @@ + + + True ++ end ++ 0 + + + +-- +2.32.0 + + +From 33d672d634a9e1d8a2cfa74dc4d503fb6f170ea1 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Thu, 15 Jul 2021 13:08:05 +0200 +Subject: [PATCH 11/33] power: Fix keynav not working +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +gnome-control-center/panels/power/cc-power-panel.c: In function ‘keynav_failed_cb’: +gnome-control-center/panels/power/cc-power-panel.c:892:50: warning: statement with no effect [-Wunused-value] + 892 | direction == GTK_DIR_UP ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD; + | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ +--- + panels/power/cc-power-panel.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c +index 96558c778..d31d16d22 100644 +--- a/panels/power/cc-power-panel.c ++++ b/panels/power/cc-power-panel.c +@@ -888,7 +888,7 @@ keynav_failed_cb (CcPowerPanel *self, GtkDirectionType direction, GtkWidget *lis + if (direction != GTK_DIR_UP && direction != GTK_DIR_DOWN) + return FALSE; + +- direction == GTK_DIR_UP ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD; ++ direction = GTK_DIR_UP ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD; + + return gtk_widget_child_focus (GTK_WIDGET (self), direction); + } +-- +2.32.0 + + +From 35b621ce5191461b16eefcb5e677496c0c48638c Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Thu, 15 Jul 2021 13:46:19 +0200 +Subject: [PATCH 12/33] power: Simplify emptying listbox + +We do that in a few places. +--- + panels/power/cc-power-panel.c | 22 +++++++++++++--------- + 1 file changed, 13 insertions(+), 9 deletions(-) + +diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c +index d31d16d22..5d57afe59 100644 +--- a/panels/power/cc-power-panel.c ++++ b/panels/power/cc-power-panel.c +@@ -242,25 +242,29 @@ add_device (CcPowerPanel *self, UpDevice *device) + } + + static void +-up_client_changed (CcPowerPanel *self) ++empty_listbox (GtkListBox *listbox) + { +- g_autoptr(GList) battery_children = NULL; +- g_autoptr(GList) device_children = NULL; ++ g_autoptr(GList) children = NULL; + GList *l; ++ ++ children = gtk_container_get_children (GTK_CONTAINER (listbox)); ++ for (l = children; l != NULL; l = l->next) ++ gtk_container_remove (GTK_CONTAINER (listbox), l->data); ++} ++ ++static void ++up_client_changed (CcPowerPanel *self) ++{ + gint i; + UpDeviceKind kind; + guint n_batteries; + gboolean on_ups; + g_autoptr(UpDevice) composite = NULL; + +- battery_children = gtk_container_get_children (GTK_CONTAINER (self->battery_listbox)); +- for (l = battery_children; l != NULL; l = l->next) +- gtk_container_remove (GTK_CONTAINER (self->battery_listbox), l->data); ++ empty_listbox (self->battery_listbox); + gtk_widget_hide (GTK_WIDGET (self->battery_section)); + +- device_children = gtk_container_get_children (GTK_CONTAINER (self->device_listbox)); +- for (l = device_children; l != NULL; l = l->next) +- gtk_container_remove (GTK_CONTAINER (self->device_listbox), l->data); ++ empty_listbox (self->device_listbox); + gtk_widget_hide (GTK_WIDGET (self->device_section)); + + #ifdef TEST_FAKE_DEVICES +-- +2.32.0 + + +From 7915830b4d8b691f4def35c83c06a658f5b14ac1 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Thu, 15 Jul 2021 14:39:58 +0200 +Subject: [PATCH 13/33] power: Add new power profile info row widget + +--- + panels/power/cc-power-panel.c | 1 + + panels/power/cc-power-profile-info-row.c | 67 ++++++++++ + panels/power/cc-power-profile-info-row.h | 36 ++++++ + panels/power/cc-power-profile-info-row.ui | 44 +++++++ + panels/power/icons/info-symbolic.svg | 150 ++++++++++++++++++++++ + panels/power/icons/meson.build | 5 + + panels/power/meson.build | 1 + + panels/power/power.gresource.xml | 1 + + 8 files changed, 305 insertions(+) + create mode 100644 panels/power/cc-power-profile-info-row.c + create mode 100644 panels/power/cc-power-profile-info-row.h + create mode 100644 panels/power/cc-power-profile-info-row.ui + create mode 100644 panels/power/icons/info-symbolic.svg + +diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c +index 5d57afe59..8acf62dee 100644 +--- a/panels/power/cc-power-panel.c ++++ b/panels/power/cc-power-panel.c +@@ -35,6 +35,7 @@ + #include "cc-battery-row.h" + #include "cc-brightness-scale.h" + #include "cc-power-profile-row.h" ++#include "cc-power-profile-info-row.h" + #include "cc-power-panel.h" + #include "cc-power-resources.h" + #include "cc-util.h" +diff --git a/panels/power/cc-power-profile-info-row.c b/panels/power/cc-power-profile-info-row.c +new file mode 100644 +index 000000000..92bb78834 +--- /dev/null ++++ b/panels/power/cc-power-profile-info-row.c +@@ -0,0 +1,67 @@ ++/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-list-row.c ++ * ++ * Copyright 2020 Red Hat Inc. ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Bastien Nocera ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#undef G_LOG_DOMAIN ++#define G_LOG_DOMAIN "cc-power-profile-info-row" ++ ++#include ++ ++#include ++#include "cc-power-profile-info-row.h" ++ ++struct _CcPowerProfileInfoRow ++{ ++ GtkListBoxRow parent_instance; ++ ++ GtkLabel *title_label; ++}; ++ ++G_DEFINE_TYPE (CcPowerProfileInfoRow, cc_power_profile_info_row, GTK_TYPE_LIST_BOX_ROW) ++ ++static void ++cc_power_profile_info_row_class_init (CcPowerProfileInfoRowClass *klass) ++{ ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ ++ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/power/cc-power-profile-info-row.ui"); ++ ++ gtk_widget_class_bind_template_child (widget_class, CcPowerProfileInfoRow, title_label); ++} ++ ++static void ++cc_power_profile_info_row_init (CcPowerProfileInfoRow *self) ++{ ++ gtk_widget_init_template (GTK_WIDGET (self)); ++} ++ ++CcPowerProfileInfoRow * ++cc_power_profile_info_row_new (const char *text) ++{ ++ CcPowerProfileInfoRow *self; ++ ++ self = g_object_new (CC_TYPE_POWER_PROFILE_INFO_ROW, NULL); ++ gtk_label_set_markup (self->title_label, text); ++ ++ return self; ++} +diff --git a/panels/power/cc-power-profile-info-row.h b/panels/power/cc-power-profile-info-row.h +new file mode 100644 +index 000000000..52d055ab2 +--- /dev/null ++++ b/panels/power/cc-power-profile-info-row.h +@@ -0,0 +1,36 @@ ++/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-list-row.h ++ * ++ * Copyright 2020 Red Hat Inc ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Bastien Nocera ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#pragma once ++ ++#include ++ ++G_BEGIN_DECLS ++ ++#define CC_TYPE_POWER_PROFILE_INFO_ROW (cc_power_profile_info_row_get_type()) ++G_DECLARE_FINAL_TYPE (CcPowerProfileInfoRow, cc_power_profile_info_row, CC, POWER_PROFILE_INFO_ROW, GtkListBoxRow) ++ ++CcPowerProfileInfoRow *cc_power_profile_info_row_new (const char *text); ++ ++G_END_DECLS +diff --git a/panels/power/cc-power-profile-info-row.ui b/panels/power/cc-power-profile-info-row.ui +new file mode 100644 +index 000000000..d9291ff16 +--- /dev/null ++++ b/panels/power/cc-power-profile-info-row.ui +@@ -0,0 +1,44 @@ ++ ++ ++ ++ ++ +diff --git a/panels/power/icons/info-symbolic.svg b/panels/power/icons/info-symbolic.svg +new file mode 100644 +index 000000000..502a98a50 +--- /dev/null ++++ b/panels/power/icons/info-symbolic.svg +@@ -0,0 +1,150 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/panels/power/icons/meson.build b/panels/power/icons/meson.build +index 8165371ea..c56bc65b7 100644 +--- a/panels/power/icons/meson.build ++++ b/panels/power/icons/meson.build +@@ -13,3 +13,8 @@ foreach icon_size: icon_sizes + install_dir: join_paths(control_center_icondir, 'hicolor', icon_size, 'apps') + ) + endforeach ++ ++install_data( ++ 'info-symbolic.svg', ++ install_dir: join_paths(control_center_icondir, 'hicolor', 'scalable', 'status') ++) +diff --git a/panels/power/meson.build b/panels/power/meson.build +index 625059dd2..af04b98ed 100644 +--- a/panels/power/meson.build ++++ b/panels/power/meson.build +@@ -22,6 +22,7 @@ sources = files( + 'cc-brightness-scale.c', + 'cc-power-panel.c', + 'cc-power-profile-row.c', ++ 'cc-power-profile-info-row.c' + ) + + sources += gnome.mkenums_simple( +diff --git a/panels/power/power.gresource.xml b/panels/power/power.gresource.xml +index 31e92b415..5a33c8e60 100644 +--- a/panels/power/power.gresource.xml ++++ b/panels/power/power.gresource.xml +@@ -4,6 +4,7 @@ + cc-battery-row.ui + cc-power-panel.ui + cc-power-profile-row.ui ++ cc-power-profile-info-row.ui + battery-levels.css + power-profiles.css + +-- +2.32.0 + + +From 1a80fda8cdbd2226a5663f0fa572dd72210722a6 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Fri, 2 Apr 2021 13:10:19 +0200 +Subject: [PATCH 14/33] power: Handle new power-profiles-daemon API + +Handle the new PerformanceDegraded property to replace +PerformanceInhibited. +--- + panels/power/cc-power-panel.c | 53 +++++++++++++++++++++++++++++++--- + panels/power/cc-power-panel.ui | 11 +++++++ + 2 files changed, 60 insertions(+), 4 deletions(-) + +diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c +index 8acf62dee..51196a8c4 100644 +--- a/panels/power/cc-power-panel.c ++++ b/panels/power/cc-power-panel.c +@@ -89,6 +89,7 @@ struct _CcPowerPanel + GtkSwitch *mobile_switch; + HdyComboRow *power_button_row; + GtkListBox *power_profile_listbox; ++ GtkListBox *power_profile_info_listbox; + HdyPreferencesGroup *power_profile_section; + GtkSizeGroup *row_sizegroup; + GtkComboBox *suspend_on_battery_delay_combo; +@@ -119,6 +120,7 @@ struct _CcPowerPanel + guint power_profiles_prop_id; + CcPowerProfileRow *power_profiles_row[NUM_CC_POWER_PROFILES]; + gboolean power_profiles_in_update; ++ gboolean has_performance_degraded; + + #ifdef HAVE_NETWORK_MANAGER + NMClient *nm_client; +@@ -1365,6 +1367,37 @@ performance_profile_set_inhibited (CcPowerPanel *self, + cc_power_profile_row_set_performance_inhibited (row, performance_inhibited); + } + ++static void ++performance_profile_set_degraded (CcPowerPanel *self) ++{ ++ g_autoptr(GVariant) variant = NULL; ++ const char *degraded, *text; ++ CcPowerProfileInfoRow *row; ++ ++ empty_listbox (self->power_profile_info_listbox); ++ gtk_widget_hide (GTK_WIDGET (self->power_profile_info_listbox)); ++ ++ variant = g_dbus_proxy_get_cached_property (self->power_profiles_proxy, "PerformanceDegraded"); ++ if (!variant) ++ return; ++ degraded = g_variant_get_string (variant, NULL); ++ if (*degraded == '\0') ++ return; ++ ++ gtk_widget_show (GTK_WIDGET (self->power_profile_info_listbox)); ++ ++ if (g_str_equal (degraded, "high-operating-temperature")) ++ text = _("Performance mode temporarily disabled due to high operating temperature."); ++ else if (g_str_equal (degraded, "lap-detected")) ++ text = _("Lap detected: performance mode temporarily disabled. Move the device to a stable surface to restore."); ++ else ++ text = _("Performance mode temporarily disabled."); ++ ++ row = cc_power_profile_info_row_new (text); ++ gtk_widget_show (GTK_WIDGET (row)); ++ gtk_container_add (GTK_CONTAINER (self->power_profile_info_listbox), GTK_WIDGET (row)); ++} ++ + static void + power_profiles_row_activated_cb (GtkListBox *box, + GtkListBoxRow *box_row, +@@ -1420,8 +1453,13 @@ power_profiles_properties_changed_cb (CcPowerPanel *self, + { + if (g_strcmp0 (key, "PerformanceInhibited") == 0) + { +- performance_profile_set_inhibited (self, +- g_variant_get_string (value, NULL)); ++ if (!self->has_performance_degraded) ++ performance_profile_set_inhibited (self, ++ g_variant_get_string (value, NULL)); ++ } ++ else if (g_strcmp0 (key, "PerformanceDegraded") == 0) ++ { ++ performance_profile_set_degraded (self); + } + else if (g_strcmp0 (key, "ActiveProfile") == 0) + { +@@ -1504,7 +1542,8 @@ setup_power_profiles (CcPowerPanel *self) + g_autoptr(GVariant) props = NULL; + guint i, num_children; + g_autoptr(GError) error = NULL; +- const char *performance_inhibited; ++ const char *performance_inhibited = NULL; ++ const char *performance_degraded; + const char *active_profile; + g_autoptr(GVariant) profiles = NULL; + GtkRadioButton *last_button; +@@ -1557,7 +1596,12 @@ setup_power_profiles (CcPowerPanel *self) + gtk_widget_show (GTK_WIDGET (self->power_profile_section)); + + props = g_variant_get_child_value (variant, 0); +- performance_inhibited = variant_lookup_string (props, "PerformanceInhibited"); ++ performance_degraded = variant_lookup_string (props, "PerformanceDegraded"); ++ self->has_performance_degraded = performance_degraded != NULL; ++ if (performance_degraded == NULL) ++ performance_inhibited = variant_lookup_string (props, "PerformanceInhibited"); ++ else ++ performance_profile_set_degraded (self); + active_profile = variant_lookup_string (props, "ActiveProfile"); + + last_button = NULL; +@@ -1715,6 +1759,7 @@ cc_power_panel_class_init (CcPowerPanelClass *klass) + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_switch); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_row); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_listbox); ++ gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_info_listbox); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_section); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, row_sizegroup); + gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, suspend_on_battery_delay_combo); +diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui +index 8e999c6d5..d8283c556 100644 +--- a/panels/power/cc-power-panel.ui ++++ b/panels/power/cc-power-panel.ui +@@ -123,6 +123,17 @@ + + + ++ ++ ++ False ++ none ++ 12 ++ ++ ++ ++ + + + +-- +2.32.0 + + +From 7254da88faa5cebd43db735746eb20b2b548a462 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Fri, 16 Jul 2021 10:00:12 +0200 +Subject: [PATCH 15/33] power: Prepare for adding more power profile info boxes + +Rename and re-indent the code that adds the power profile info boxes to +prepare for adding more info boxes when needed. +--- + panels/power/cc-power-panel.c | 46 ++++++++++++++++++----------------- + 1 file changed, 24 insertions(+), 22 deletions(-) + +diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c +index 51196a8c4..1869be065 100644 +--- a/panels/power/cc-power-panel.c ++++ b/panels/power/cc-power-panel.c +@@ -1368,34 +1368,35 @@ performance_profile_set_inhibited (CcPowerPanel *self, + } + + static void +-performance_profile_set_degraded (CcPowerPanel *self) ++power_profile_update_info_boxes (CcPowerPanel *self) + { +- g_autoptr(GVariant) variant = NULL; +- const char *degraded, *text; ++ g_autoptr(GVariant) degraded_variant = NULL; ++ const char *degraded = NULL; + CcPowerProfileInfoRow *row; + + empty_listbox (self->power_profile_info_listbox); + gtk_widget_hide (GTK_WIDGET (self->power_profile_info_listbox)); + +- variant = g_dbus_proxy_get_cached_property (self->power_profiles_proxy, "PerformanceDegraded"); +- if (!variant) +- return; +- degraded = g_variant_get_string (variant, NULL); +- if (*degraded == '\0') +- return; ++ degraded_variant = g_dbus_proxy_get_cached_property (self->power_profiles_proxy, "PerformanceDegraded"); ++ if (degraded_variant) ++ degraded = g_variant_get_string (degraded_variant, NULL); ++ if (degraded && *degraded != '\0') ++ { ++ const char *text; + +- gtk_widget_show (GTK_WIDGET (self->power_profile_info_listbox)); ++ gtk_widget_show (GTK_WIDGET (self->power_profile_info_listbox)); + +- if (g_str_equal (degraded, "high-operating-temperature")) +- text = _("Performance mode temporarily disabled due to high operating temperature."); +- else if (g_str_equal (degraded, "lap-detected")) +- text = _("Lap detected: performance mode temporarily disabled. Move the device to a stable surface to restore."); +- else +- text = _("Performance mode temporarily disabled."); ++ if (g_str_equal (degraded, "high-operating-temperature")) ++ text = _("Performance mode temporarily disabled due to high operating temperature."); ++ else if (g_str_equal (degraded, "lap-detected")) ++ text = _("Lap detected: performance mode temporarily disabled. Move the device to a stable surface to restore."); ++ else ++ text = _("Performance mode temporarily disabled."); + +- row = cc_power_profile_info_row_new (text); +- gtk_widget_show (GTK_WIDGET (row)); +- gtk_container_add (GTK_CONTAINER (self->power_profile_info_listbox), GTK_WIDGET (row)); ++ row = cc_power_profile_info_row_new (text); ++ gtk_widget_show (GTK_WIDGET (row)); ++ gtk_container_add (GTK_CONTAINER (self->power_profile_info_listbox), GTK_WIDGET (row)); ++ } + } + + static void +@@ -1459,7 +1460,7 @@ power_profiles_properties_changed_cb (CcPowerPanel *self, + } + else if (g_strcmp0 (key, "PerformanceDegraded") == 0) + { +- performance_profile_set_degraded (self); ++ power_profile_update_info_boxes (self); + } + else if (g_strcmp0 (key, "ActiveProfile") == 0) + { +@@ -1600,8 +1601,6 @@ setup_power_profiles (CcPowerPanel *self) + self->has_performance_degraded = performance_degraded != NULL; + if (performance_degraded == NULL) + performance_inhibited = variant_lookup_string (props, "PerformanceInhibited"); +- else +- performance_profile_set_degraded (self); + active_profile = variant_lookup_string (props, "ActiveProfile"); + + last_button = NULL; +@@ -1649,6 +1648,9 @@ setup_power_profiles (CcPowerPanel *self) + + self->power_profiles_prop_id = g_signal_connect_object (G_OBJECT (self->power_profiles_proxy), "g-properties-changed", + G_CALLBACK (power_profiles_properties_changed_cb), self, G_CONNECT_SWAPPED); ++ ++ if (self->has_performance_degraded) ++ power_profile_update_info_boxes (self); + } + + static void +-- +2.32.0 + + +From 173904b7eeea145c38065939a1dd8a408745f3c9 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Fri, 16 Jul 2021 10:07:28 +0200 +Subject: [PATCH 16/33] power: Move variant_lookup_string() helper function + +--- + panels/power/cc-power-panel.c | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c +index 1869be065..4633627c2 100644 +--- a/panels/power/cc-power-panel.c ++++ b/panels/power/cc-power-panel.c +@@ -1343,6 +1343,18 @@ setup_power_saving (CcPowerPanel *self) + #endif + } + ++static const char * ++variant_lookup_string (GVariant *dict, ++ const char *key) ++{ ++ GVariant *variant; ++ ++ variant = g_variant_lookup_value (dict, key, G_VARIANT_TYPE_STRING); ++ if (!variant) ++ return NULL; ++ return g_variant_get_string (variant, NULL); ++} ++ + static void + performance_profile_set_active (CcPowerPanel *self, + const char *profile_str) +@@ -1427,18 +1439,6 @@ perf_profile_list_box_sort (GtkListBoxRow *row1, + return 0; + } + +-static const char * +-variant_lookup_string (GVariant *dict, +- const char *key) +-{ +- GVariant *variant; +- +- variant = g_variant_lookup_value (dict, key, G_VARIANT_TYPE_STRING); +- if (!variant) +- return NULL; +- return g_variant_get_string (variant, NULL); +-} +- + static void + power_profiles_properties_changed_cb (CcPowerPanel *self, + GVariant *changed_properties, +-- +2.32.0 + + +From f49c47787de81fa39f100f3903d2d886905cd4c7 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Fri, 16 Jul 2021 11:01:52 +0200 +Subject: [PATCH 17/33] power: Show power profile info boxes for profile holds + +Applications can request that power-profiles-daemon "hold" a particular +power profile for the duration of a task or event, such as launching a +taxing application, or saving power because of low battery. + +Show those holds in the same type of info boxes we already use to show +"degraded" performance. + +See https://gitlab.freedesktop.org/hadess/power-profiles-daemon/-/merge_requests/46 +--- + panels/power/cc-power-panel.c | 77 ++++++++++++++++++++++++++++++++++- + 1 file changed, 76 insertions(+), 1 deletion(-) + +diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c +index 4633627c2..4f1989cdf 100644 +--- a/panels/power/cc-power-panel.c ++++ b/panels/power/cc-power-panel.c +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + #include + + #ifdef HAVE_NETWORK_MANAGER +@@ -1383,12 +1384,25 @@ static void + power_profile_update_info_boxes (CcPowerPanel *self) + { + g_autoptr(GVariant) degraded_variant = NULL; ++ g_autoptr(GVariant) holds_variant = NULL; ++ g_autoptr(GVariant) profile_variant = NULL; ++ guint i, num_children; + const char *degraded = NULL; ++ const char *profile; + CcPowerProfileInfoRow *row; ++ int next_insert = 0; + + empty_listbox (self->power_profile_info_listbox); + gtk_widget_hide (GTK_WIDGET (self->power_profile_info_listbox)); + ++ profile_variant = g_dbus_proxy_get_cached_property (self->power_profiles_proxy, "ActiveProfile"); ++ if (!profile_variant) ++ { ++ g_warning ("No 'ActiveProfile' property on power-profiles-daemon service"); ++ return; ++ } ++ profile = g_variant_get_string (profile_variant, NULL); ++ + degraded_variant = g_dbus_proxy_get_cached_property (self->power_profiles_proxy, "PerformanceDegraded"); + if (degraded_variant) + degraded = g_variant_get_string (degraded_variant, NULL); +@@ -1408,6 +1422,66 @@ power_profile_update_info_boxes (CcPowerPanel *self) + row = cc_power_profile_info_row_new (text); + gtk_widget_show (GTK_WIDGET (row)); + gtk_container_add (GTK_CONTAINER (self->power_profile_info_listbox), GTK_WIDGET (row)); ++ if (g_str_equal (profile, "performance")) ++ next_insert = 1; ++ } ++ ++ holds_variant = g_dbus_proxy_get_cached_property (self->power_profiles_proxy, "ActiveProfileHolds"); ++ if (!holds_variant) ++ { ++ g_warning ("No 'ActiveProfileHolds' property on power-profiles-daemon service"); ++ return; ++ } ++ ++ num_children = g_variant_n_children (holds_variant); ++ for (i = 0; i < num_children; i++) ++ { ++ g_autoptr(GDesktopAppInfo) app_info = NULL; ++ g_autoptr(GVariant) hold_variant = NULL; ++ g_autofree char *text = NULL; ++ const char *app_id, *held_profile, *reason, *name; ++ ++ hold_variant = g_variant_get_child_value (holds_variant, i); ++ if (!hold_variant || !g_variant_is_of_type (hold_variant, G_VARIANT_TYPE ("a{sv}"))) ++ continue; ++ ++ app_id = variant_lookup_string (hold_variant, "ApplicationId"); ++ if (!app_id) ++ continue; ++ app_info = g_desktop_app_info_new (app_id); ++ name = app_info ? g_app_info_get_name (G_APP_INFO (app_info)) : app_id; ++ held_profile = variant_lookup_string (hold_variant, "Profile"); ++ reason = variant_lookup_string (hold_variant, "Reason"); ++ g_debug ("Adding info row for %s hold by %s: %s", held_profile, app_id, reason); ++ ++ if (g_strcmp0 (held_profile, "power-saver") == 0 && ++ g_strcmp0 (app_id, "org.gnome.SettingsDaemon.Power") == 0) ++ { ++ text = g_strdup (_("Low battery: power saver enabled. Previous mode will be restored when battery is sufficiently charged.")); ++ } ++ else ++ { ++ switch (cc_power_profile_from_str (held_profile)) ++ { ++ case CC_POWER_PROFILE_POWER_SAVER: ++ /* translators: "%s" is an application name */ ++ text = g_strdup_printf (_("Power Saver mode activated by “%s”."), name); ++ break; ++ case CC_POWER_PROFILE_PERFORMANCE: ++ /* translators: "%s" is an application name */ ++ text = g_strdup_printf (_("Performance mode activated by “%s”."), name); ++ break; ++ default: ++ g_assert_not_reached (); ++ } ++ } ++ ++ row = cc_power_profile_info_row_new (text); ++ gtk_widget_show (GTK_WIDGET (row)); ++ if (g_strcmp0 (held_profile, profile) != 0) ++ gtk_list_box_insert (GTK_LIST_BOX (self->power_profile_info_listbox), GTK_WIDGET (row), -1); ++ else ++ gtk_list_box_insert (GTK_LIST_BOX (self->power_profile_info_listbox), GTK_WIDGET (row), next_insert); + } + } + +@@ -1458,7 +1532,8 @@ power_profiles_properties_changed_cb (CcPowerPanel *self, + performance_profile_set_inhibited (self, + g_variant_get_string (value, NULL)); + } +- else if (g_strcmp0 (key, "PerformanceDegraded") == 0) ++ else if (g_strcmp0 (key, "PerformanceDegraded") == 0 || ++ g_strcmp0 (key, "ActiveProfileHolds") == 0) + { + power_profile_update_info_boxes (self); + } +-- +2.32.0 + + +From d7cabb849c425fd84e85a981bcd56a6df1d87868 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Fri, 16 Jul 2021 11:32:37 +0200 +Subject: [PATCH 18/33] power: Tweak power profile info boxes horizontal + spacing + +A bit too much whitespace around the info icon. +--- + panels/power/cc-power-profile-info-row.ui | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/panels/power/cc-power-profile-info-row.ui b/panels/power/cc-power-profile-info-row.ui +index d9291ff16..bc49a24ac 100644 +--- a/panels/power/cc-power-profile-info-row.ui ++++ b/panels/power/cc-power-profile-info-row.ui +@@ -8,16 +8,16 @@ + + True + horizontal +- 12 +- 12 ++ 8 ++ 8 + 8 + 8 +- 12 ++ 8 + + + True + 6 +- 18 ++ 6 + info-symbolic + 5 + + + +-- +2.32.0 + + +From 254a9bfa8ac8be8403d0258742f0c3f8c8db9633 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Wed, 4 Aug 2021 11:26:33 +0200 +Subject: [PATCH 30/33] power: Remove icons from power profiles + +They were originally included was to educate users about what the icons +mean, for when they appeared in the top bar. However, since we no +longer plan on showing the status icon in the top bar, it's not so +important that people learn the meaning of the icons. + +See https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1421 +--- + panels/power/cc-power-profile-row.c | 13 +------------ + panels/power/cc-power-profile-row.ui | 15 +-------------- + 2 files changed, 2 insertions(+), 26 deletions(-) + +diff --git a/panels/power/cc-power-profile-row.c b/panels/power/cc-power-profile-row.c +index ee66bdfd0..a8458c366 100644 +--- a/panels/power/cc-power-profile-row.c ++++ b/panels/power/cc-power-profile-row.c +@@ -35,7 +35,6 @@ struct _CcPowerProfileRow + GtkListBoxRow parent_instance; + + GtkRadioButton *button; +- GtkImage *icon_image; + GtkLabel *subtitle_label; + GtkLabel *title_label; + +@@ -106,7 +105,6 @@ cc_power_profile_row_class_init (CcPowerProfileRowClass *klass) + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/power/cc-power-profile-row.ui"); + + gtk_widget_class_bind_template_child (widget_class, CcPowerProfileRow, button); +- gtk_widget_class_bind_template_child (widget_class, CcPowerProfileRow, icon_image); + gtk_widget_class_bind_template_child (widget_class, CcPowerProfileRow, subtitle_label); + gtk_widget_class_bind_template_child (widget_class, CcPowerProfileRow, title_label); + +@@ -175,7 +173,7 @@ CcPowerProfileRow * + cc_power_profile_row_new (CcPowerProfile power_profile) + { + CcPowerProfileRow *self; +- const char *text, *subtext, *icon_name, *class_name; ++ const char *text, *subtext; + + self = g_object_new (CC_TYPE_POWER_PROFILE_ROW, NULL); + +@@ -185,20 +183,14 @@ cc_power_profile_row_new (CcPowerProfile power_profile) + case CC_POWER_PROFILE_PERFORMANCE: + text = _("Performance"); + subtext = _("High performance and power usage."); +- icon_name = "power-profile-performance-symbolic"; +- class_name = "performance"; + break; + case CC_POWER_PROFILE_BALANCED: + text = _("Balanced Power"); + subtext = _("Standard performance and power usage."); +- icon_name = "power-profile-balanced-symbolic"; +- class_name = NULL; + break; + case CC_POWER_PROFILE_POWER_SAVER: + text = _("Power Saver"); + subtext = _("Reduced performance and power usage."); +- icon_name = "power-profile-power-saver-symbolic"; +- class_name = "low-power"; + break; + default: + g_assert_not_reached (); +@@ -206,9 +198,6 @@ cc_power_profile_row_new (CcPowerProfile power_profile) + + gtk_label_set_markup (self->title_label, text); + gtk_label_set_markup (self->subtitle_label, subtext); +- gtk_image_set_from_icon_name (self->icon_image, icon_name, GTK_ICON_SIZE_MENU); +- if (class_name != NULL) +- gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (self->icon_image)), class_name); + + return self; + } +diff --git a/panels/power/cc-power-profile-row.ui b/panels/power/cc-power-profile-row.ui +index 64516edf3..1391093ba 100644 +--- a/panels/power/cc-power-profile-row.ui ++++ b/panels/power/cc-power-profile-row.ui +@@ -28,19 +28,6 @@ + 2 + + +- +- +- True +- 6 +- +- +- +- 1 +- 0 +- +- + + + True +@@ -53,7 +40,7 @@ + 6 + + +- 2 ++ 1 + 0 + + +-- +2.32.0 + + +From 96efcd2835a46b8009b5f6524a2d37089f40dd44 Mon Sep 17 00:00:00 2001 +From: Allan Day +Date: Wed, 4 Aug 2021 11:28:14 +0200 +Subject: [PATCH 31/33] power: Align power profile info boxes with profiles + text + +See https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1421 +--- + panels/power/cc-power-profile-info-row.ui | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/panels/power/cc-power-profile-info-row.ui b/panels/power/cc-power-profile-info-row.ui +index 6f411c688..34807c38c 100644 +--- a/panels/power/cc-power-profile-info-row.ui ++++ b/panels/power/cc-power-profile-info-row.ui +@@ -8,11 +8,11 @@ + + True + horizontal +- 8 ++ 4 + 8 + 8 + 8 +- 8 ++ 4 + + + True +-- +2.32.0 + + +From 618e269230a71ae3ac84a35daaf15ad3db38f459 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Thu, 5 Aug 2021 15:24:58 +0200 +Subject: [PATCH 32/33] power: Change "Balanced" power profile label + +https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4530#note_1241985 +--- + panels/power/cc-power-profile-row.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/panels/power/cc-power-profile-row.c b/panels/power/cc-power-profile-row.c +index a8458c366..9d7f1fe6b 100644 +--- a/panels/power/cc-power-profile-row.c ++++ b/panels/power/cc-power-profile-row.c +@@ -185,7 +185,7 @@ cc_power_profile_row_new (CcPowerProfile power_profile) + subtext = _("High performance and power usage."); + break; + case CC_POWER_PROFILE_BALANCED: +- text = _("Balanced Power"); ++ text = _("Balanced"); + subtext = _("Standard performance and power usage."); + break; + case CC_POWER_PROFILE_POWER_SAVER: +-- +2.32.0 + + +From 98ed744dcefd8c4d8398b1489d0c583a4d5787d9 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Thu, 5 Aug 2021 15:24:58 +0200 +Subject: [PATCH 33/33] power: Update power profile labels + +Use "Balanced" instead of "Balanced Power", and make sure to add a +context for all the profiles for translators. + +https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4530#note_1243075 +--- + panels/power/cc-power-profile-row.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/panels/power/cc-power-profile-row.c b/panels/power/cc-power-profile-row.c +index 9d7f1fe6b..f290caa10 100644 +--- a/panels/power/cc-power-profile-row.c ++++ b/panels/power/cc-power-profile-row.c +@@ -181,15 +181,15 @@ cc_power_profile_row_new (CcPowerProfile power_profile) + switch (self->power_profile) + { + case CC_POWER_PROFILE_PERFORMANCE: +- text = _("Performance"); ++ text = C_("Power profile", "Performance"); + subtext = _("High performance and power usage."); + break; + case CC_POWER_PROFILE_BALANCED: +- text = _("Balanced"); ++ text = C_("Power profile", "Balanced"); + subtext = _("Standard performance and power usage."); + break; + case CC_POWER_PROFILE_POWER_SAVER: +- text = _("Power Saver"); ++ text = C_("Power profile", "Power Saver"); + subtext = _("Reduced performance and power usage."); + break; + default: +-- +2.32.0 + diff --git a/printers-Update-entries.patch b/printers-Update-entries.patch deleted file mode 100644 index 5a82133..0000000 --- a/printers-Update-entries.patch +++ /dev/null @@ -1,644 +0,0 @@ ---- gnome-control-center-3.28.2/panels/printers/cc-printers-panel.c -+++ gnome-control-center-3.28.2/panels/printers/cc-printers-panel.c -@@ -105,6 +105,8 @@ struct _CcPrintersPanelPrivate - gchar *renamed_printer_name; - gchar *old_printer_name; - gchar *deleted_printer_name; -+ GList *deleted_printers; -+ GObject *reference; - - GHashTable *printer_entries; - gboolean entries_filled; -@@ -267,18 +269,40 @@ printer_removed_cb (GObject *source - GAsyncResult *result, - gpointer user_data) - { -- GError *error = NULL; -+ PpPrinter *printer = PP_PRINTER (source_object); -+ g_autoptr(GError) error = NULL; -+ g_autofree gchar *printer_name = NULL; - -- pp_printer_delete_finish (PP_PRINTER (source_object), result, &error); -- g_object_unref (source_object); -+ g_object_get (printer, "printer-name", &printer_name, NULL); -+ pp_printer_delete_finish (printer, result, &error); - -- if (error != NULL) -+ if (user_data != NULL) - { -- g_warning ("Printer could not be deleted: %s", error->message); -- g_error_free (error); -+ g_autoptr(GObject) reference = G_OBJECT (user_data); -+ -+ if (g_object_get_data (reference, "self") != NULL) -+ { -+ CcPrintersPanel *self = CC_PRINTERS_PANEL (g_object_get_data (reference, "self")); -+ CcPrintersPanelPrivate *priv = self->priv; -+ GList *iter; -+ -+ for (iter = priv->deleted_printers; iter != NULL; iter = iter->next) -+ { -+ if (g_strcmp0 (iter->data, printer_name) == 0) -+ { -+ g_free (iter->data); -+ priv->deleted_printers = g_list_delete_link (priv->deleted_printers, iter); -+ break; -+ } -+ } -+ } - } -+ -+ if (error != NULL) -+ g_warning ("Printer could not be deleted: %s", error->message); - } - -+ - static void - cc_printers_panel_dispose (GObject *object) - { -@@ -368,6 +392,12 @@ cc_printers_panel_dispose (GObject *obje - - g_clear_pointer (&priv->printer_entries, g_hash_table_destroy); - -+ g_list_free_full (priv->deleted_printers, g_free); -+ priv->deleted_printers = NULL; -+ if (priv->reference != NULL) -+ g_object_set_data (priv->reference, "self", NULL); -+ g_clear_object (&priv->reference); -+ - G_OBJECT_CLASS (cc_printers_panel_parent_class)->dispose (object); - } - -@@ -740,13 +770,16 @@ on_printer_deletion_undone (GtkButton *b - { - CcPrintersPanelPrivate *priv; - CcPrintersPanel *self = (CcPrintersPanel*) user_data; -+ GtkWidget *widget; - - priv = PRINTERS_PANEL_PRIVATE (self); - - gtk_revealer_set_reveal_child (priv->notification, FALSE); - - g_clear_pointer (&priv->deleted_printer_name, g_free); -- actualize_printers_list (self); -+ -+ widget = (GtkWidget*) gtk_builder_get_object (priv->builder, "content"); -+ gtk_list_box_invalidate_filter (GTK_LIST_BOX (widget)); - - cancel_notification_timeout (self); - } -@@ -768,9 +801,11 @@ on_notification_dismissed (GtkButton *bu - pp_printer_delete_async (printer, - NULL, - printer_removed_cb, -- NULL); -+ g_object_ref (priv->reference)); - -- g_clear_pointer (&priv->deleted_printer_name, g_free); -+ priv->deleted_printers = g_list_prepend (priv->deleted_printers, priv->deleted_printer_name); -+ priv->deleted_printer_name = NULL; -+ g_object_unref (printer); - } - - gtk_revealer_set_reveal_child (priv->notification, FALSE); -@@ -793,8 +828,7 @@ on_printer_deleted (PpPrinterEntry *prin - GtkLabel *label; - gchar *notification_message; - gchar *printer_name; -- -- gtk_widget_hide (GTK_WIDGET (printer_entry)); -+ GtkWidget *widget; - - priv = PRINTERS_PANEL_PRIVATE (self); - -@@ -816,6 +850,9 @@ on_printer_deleted (PpPrinterEntry *prin - priv->deleted_printer_name = g_strdup (printer_name); - g_free (printer_name); - -+ widget = (GtkWidget*) gtk_builder_get_object (priv->builder, "content"); -+ gtk_list_box_invalidate_filter (GTK_LIST_BOX (widget)); -+ - gtk_revealer_set_reveal_child (priv->notification, TRUE); - - priv->remove_printer_timeout_id = g_timeout_add_seconds (10, on_remove_printer_timeout, self); -@@ -910,6 +947,36 @@ set_current_page (GObject *source_o - } - - static void -+destroy_nonexisting_entries (PpPrinterEntry *entry, -+ gpointer user_data) -+{ -+ CcPrintersPanelPrivate *priv; -+ CcPrintersPanel *self = (CcPrintersPanel *) user_data; -+ g_autofree gchar *printer_name = NULL; -+ gboolean exists = FALSE; -+ gint i; -+ -+ priv = PRINTERS_PANEL_PRIVATE (self); -+ -+ g_object_get (G_OBJECT (entry), "printer-name", &printer_name, NULL); -+ -+ for (i = 0; i < priv->num_dests; i++) -+ { -+ if (g_strcmp0 (priv->dests[i].name, printer_name) == 0) -+ { -+ exists = TRUE; -+ break; -+ } -+ } -+ -+ if (!exists) -+ { -+ gtk_widget_destroy (GTK_WIDGET (entry)); -+ g_hash_table_remove (priv->printer_entries, printer_name); -+ } -+} -+ -+static void - actualize_printers_list_cb (GObject *source_object, - GAsyncResult *result, - gpointer user_data) -@@ -920,6 +987,7 @@ actualize_printers_list_cb (GObject - PpCups *cups = PP_CUPS (source_object); - PpCupsDests *cups_dests; - gboolean new_printer_available = FALSE; -+ gpointer item; - GError *error = NULL; - int i; - -@@ -950,7 +1018,7 @@ actualize_printers_list_cb (GObject - gtk_stack_set_visible_child_name (GTK_STACK (widget), "printers-list"); - - widget = (GtkWidget*) gtk_builder_get_object (priv->builder, "content"); -- gtk_container_foreach (GTK_CONTAINER (widget), (GtkCallback) gtk_widget_destroy, NULL); -+ gtk_container_foreach (GTK_CONTAINER (widget), (GtkCallback) destroy_nonexisting_entries, self); - - for (i = 0; i < priv->num_dests; i++) - { -@@ -961,13 +1029,14 @@ actualize_printers_list_cb (GObject - - for (i = 0; i < priv->num_dests; i++) - { -- if (g_strcmp0 (priv->dests[i].name, priv->deleted_printer_name) == 0) -- continue; -- - if (new_printer_available && g_strcmp0 (priv->dests[i].name, priv->old_printer_name) == 0) - continue; - -- add_printer_entry (self, priv->dests[i]); -+ item = g_hash_table_lookup (priv->printer_entries, priv->dests[i].name); -+ if (item != NULL) -+ pp_printer_entry_update (PP_PRINTER_ENTRY (item), priv->dests[i], priv->is_authorized); -+ else -+ add_printer_entry (self, priv->dests[i]); - } - - if (!priv->entries_filled) -@@ -983,6 +1052,30 @@ actualize_printers_list_cb (GObject - } - - update_sensitivity (user_data); -+ -+ if (priv->new_printer_name != NULL) -+ { -+ GtkScrolledWindow *scrolled_window; -+ GtkAllocation allocation; -+ GtkAdjustment *adjustment; -+ GtkWidget *printer_entry; -+ -+ /* Scroll the view to show the newly added printer-entry. */ -+ scrolled_window = GTK_SCROLLED_WINDOW (gtk_builder_get_object (priv->builder, -+ "scrolled-window")); -+ adjustment = gtk_scrolled_window_get_vadjustment (scrolled_window); -+ -+ printer_entry = GTK_WIDGET (g_hash_table_lookup (priv->printer_entries, -+ priv->new_printer_name)); -+ if (printer_entry != NULL) -+ { -+ gtk_widget_get_allocation (printer_entry, &allocation); -+ g_clear_pointer (&priv->new_printer_name, g_free); -+ -+ gtk_adjustment_set_value (adjustment, -+ allocation.y - gtk_widget_get_margin_top (printer_entry)); -+ } -+ } - } - - static void -@@ -1028,10 +1121,6 @@ new_printer_dialog_response_cb (PpNewPri - { - CcPrintersPanelPrivate *priv; - CcPrintersPanel *self = (CcPrintersPanel*) user_data; -- GtkScrolledWindow *scrolled_window; -- GtkAllocation allocation; -- GtkAdjustment *adjustment; -- GtkWidget *printer_entry; - - priv = PRINTERS_PANEL_PRIVATE (self); - -@@ -1059,22 +1148,6 @@ new_printer_dialog_response_cb (PpNewPri - } - - actualize_printers_list (self); -- -- if (priv->new_printer_name == NULL) -- return; -- -- /* Scroll the view to show the newly added printer-entry. */ -- scrolled_window = GTK_SCROLLED_WINDOW (gtk_builder_get_object (priv->builder, -- "scrolled-window")); -- adjustment = gtk_scrolled_window_get_vadjustment (scrolled_window); -- -- printer_entry = GTK_WIDGET (g_hash_table_lookup (priv->printer_entries, -- priv->new_printer_name)); -- gtk_widget_get_allocation (printer_entry, &allocation); -- g_clear_pointer (&priv->new_printer_name, g_free); -- -- gtk_adjustment_set_value (adjustment, -- allocation.y - gtk_widget_get_margin_top (printer_entry)); - } - - static void -@@ -1288,11 +1361,17 @@ filter_function (GtkListBoxRow *row, - CcPrintersPanel *self = (CcPrintersPanel*) user_data; - GtkWidget *search_entry; - gboolean retval; -- gchar *search; -- gchar *name; -- gchar *location; -- gchar *printer_name; -- gchar *printer_location; -+ g_autofree gchar *search = NULL; -+ g_autofree gchar *name = NULL; -+ g_autofree gchar *location = NULL; -+ g_autofree gchar *printer_name = NULL; -+ g_autofree gchar *printer_location = NULL; -+ GList *iter; -+ -+ g_object_get (G_OBJECT (row), -+ "printer-name", &printer_name, -+ "printer-location", &printer_location, -+ NULL); - - priv = PRINTERS_PANEL_PRIVATE (self); - -@@ -1300,31 +1379,72 @@ filter_function (GtkListBoxRow *row, - gtk_builder_get_object (priv->builder, "search-entry"); - - if (gtk_entry_get_text_length (GTK_ENTRY (search_entry)) == 0) -- return TRUE; -+ { -+ retval = TRUE; -+ } -+ else -+ { -+ name = cc_util_normalize_casefold_and_unaccent (printer_name); -+ location = cc_util_normalize_casefold_and_unaccent (printer_location); - -- g_object_get (G_OBJECT (row), -- "printer-name", &printer_name, -- "printer-location", &printer_location, -- NULL); -+ search = cc_util_normalize_casefold_and_unaccent (gtk_entry_get_text (GTK_ENTRY (search_entry))); - -- name = cc_util_normalize_casefold_and_unaccent (printer_name); -- location = cc_util_normalize_casefold_and_unaccent (printer_location); -+ retval = strstr (name, search) != NULL; -+ if (location != NULL) -+ retval = retval || (strstr (location, search) != NULL); -+ } - -- g_free (printer_name); -- g_free (printer_location); -+ if (priv->deleted_printer_name != NULL && -+ g_strcmp0 (priv->deleted_printer_name, printer_name) == 0) -+ { -+ retval = FALSE; -+ } - -- search = cc_util_normalize_casefold_and_unaccent (gtk_entry_get_text (GTK_ENTRY (search_entry))); -+ if (priv->deleted_printers != NULL) -+ { -+ for (iter = priv->deleted_printers; iter != NULL; iter = iter->next) -+ { -+ if (g_strcmp0 (iter->data, printer_name) == 0) -+ { -+ retval = FALSE; -+ break; -+ } -+ } -+ } - -+ return retval; -+} - -- retval = strstr (name, search) != NULL; -- if (location != NULL) -- retval = retval || (strstr (location, search) != NULL); -+static gint -+sort_function (GtkListBoxRow *row1, -+ GtkListBoxRow *row2, -+ gpointer user_data) -+{ -+ g_autofree gchar *printer_name1 = NULL; -+ g_autofree gchar *printer_name2 = NULL; - -- g_free (search); -- g_free (name); -- g_free (location); -+ g_object_get (G_OBJECT (row1), -+ "printer-name", &printer_name1, -+ NULL); - -- return retval; -+ g_object_get (G_OBJECT (row2), -+ "printer-name", &printer_name2, -+ NULL); -+ -+ if (printer_name1 != NULL) -+ { -+ if (printer_name2 != NULL) -+ return g_ascii_strcasecmp (printer_name1, printer_name2); -+ else -+ return 1; -+ } -+ else -+ { -+ if (printer_name2 != NULL) -+ return -1; -+ else -+ return 0; -+ } - } - - static void -@@ -1364,6 +1484,8 @@ cc_printers_panel_init (CcPrintersPanel - priv->renamed_printer_name = NULL; - priv->old_printer_name = NULL; - priv->deleted_printer_name = NULL; -+ priv->deleted_printers = NULL; -+ priv->reference = g_object_new (G_TYPE_OBJECT, NULL); - - priv->permission = NULL; - priv->lockdown_settings = NULL; -@@ -1380,6 +1502,8 @@ cc_printers_panel_init (CcPrintersPanel - priv->actualize_printers_list_cancellable = g_cancellable_new (); - priv->cups_status_check_cancellable = g_cancellable_new (); - -+ g_object_set_data_full (priv->reference, "self", self, NULL); -+ - builder_result = gtk_builder_add_objects_from_resource (priv->builder, - "/org/gnome/control-center/printers/printers.ui", - objects, &error); -@@ -1430,6 +1554,10 @@ cc_printers_panel_init (CcPrintersPanel - "search-changed", - G_CALLBACK (gtk_list_box_invalidate_filter), - widget); -+ gtk_list_box_set_sort_func (GTK_LIST_BOX (widget), -+ sort_function, -+ NULL, -+ NULL); - - priv->lockdown_settings = g_settings_new ("org.gnome.desktop.lockdown"); - if (priv->lockdown_settings) ---- gnome-control-center-3.28.2/panels/printers/pp-printer-entry.c -+++ gnome-control-center-3.28.2/panels/printers/pp-printer-entry.c -@@ -45,7 +45,6 @@ struct _PpPrinterEntry - { - GtkListBoxRow parent; - -- gchar *printer_uri; - gchar *printer_name; - gchar *ppd_file_name; - int num_jobs; -@@ -156,10 +155,27 @@ pp_printer_entry_set_property (GObject - } - } - -+static InkLevelData * -+ink_level_data_new (void) -+{ -+ return g_slice_new0 (InkLevelData); -+} -+ -+static void -+ink_level_data_free (InkLevelData *data) -+{ -+ g_clear_pointer (&data->marker_names, g_free); -+ g_clear_pointer (&data->marker_levels, g_free); -+ g_clear_pointer (&data->marker_colors, g_free); -+ g_clear_pointer (&data->marker_types, g_free); -+ g_slice_free (InkLevelData, data); -+} -+ - static void - pp_printer_entry_init (PpPrinterEntry *self) - { - gtk_widget_init_template (GTK_WIDGET (self)); -+ self->inklevel = ink_level_data_new (); - } - - typedef struct { -@@ -260,9 +276,8 @@ tone_down_color (GdkRGBA *color, - } - - static gboolean --supply_levels_draw_cb (GtkWidget *widget, -- cairo_t *cr, -- PpPrinterEntry *self) -+supply_levels_draw_cb (PpPrinterEntry *self, -+ cairo_t *cr) - { - GtkStyleContext *context; - gboolean is_empty = TRUE; -@@ -271,10 +286,10 @@ supply_levels_draw_cb (GtkWidget *w - gint height; - int i; - -- context = gtk_widget_get_style_context (widget); -+ context = gtk_widget_get_style_context (GTK_WIDGET (self->supply_drawing_area)); - -- width = gtk_widget_get_allocated_width (widget); -- height = gtk_widget_get_allocated_height (widget); -+ width = gtk_widget_get_allocated_width (GTK_WIDGET (self->supply_drawing_area)); -+ height = gtk_widget_get_allocated_height (GTK_WIDGET (self->supply_drawing_area)); - - gtk_render_background (context, cr, 0, 0, width, height); - -@@ -376,13 +391,13 @@ supply_levels_draw_cb (GtkWidget *w - - if (tooltip_text) - { -- gtk_widget_set_tooltip_text (widget, tooltip_text); -+ gtk_widget_set_tooltip_text (GTK_WIDGET (self->supply_drawing_area), tooltip_text); - g_free (tooltip_text); - } - else - { -- gtk_widget_set_tooltip_text (widget, NULL); -- gtk_widget_set_has_tooltip (widget, FALSE); -+ gtk_widget_set_tooltip_text (GTK_WIDGET (self->supply_drawing_area), NULL); -+ gtk_widget_set_has_tooltip (GTK_WIDGET (self->supply_drawing_area), FALSE); - } - } - -@@ -727,11 +742,34 @@ pp_printer_entry_new (cups_dest_t print - gboolean is_authorized) - { - PpPrinterEntry *self; -+ -+ self = g_object_new (PP_PRINTER_ENTRY_TYPE, "printer-name", printer.name, NULL); -+ -+ self->clean_command = pp_maintenance_command_new (self->printer_name, -+ "Clean", -+ "all", -+ /* Translators: Name of job which makes printer to clean its heads */ -+ _("Clean print heads")); -+ check_clean_heads_maintenance_command (self); -+ -+ g_signal_connect_object (self->supply_drawing_area, "draw", G_CALLBACK (supply_levels_draw_cb), self, G_CONNECT_SWAPPED); -+ -+ pp_printer_entry_update (self, printer, is_authorized); -+ -+ return self; -+} -+ -+void -+pp_printer_entry_update (PpPrinterEntry *self, -+ cups_dest_t printer, -+ gboolean is_authorized) -+{ - cups_ptype_t printer_type = 0; -- gboolean is_accepting_jobs; -+ gboolean is_accepting_jobs = TRUE; - gboolean ink_supply_is_empty; - gchar *instance; - gchar *printer_uri = NULL; -+ const gchar *device_uri = NULL; - gchar *location = NULL; - gchar *printer_icon_name = NULL; - gchar *default_icon_name = NULL; -@@ -798,10 +836,6 @@ pp_printer_entry_new (cups_dest_t print - N_("The optical photo conductor is no longer functioning") - }; - -- self = g_object_new (PP_PRINTER_ENTRY_TYPE, "printer-name", printer.name, NULL); -- -- self->inklevel = g_slice_new0 (InkLevelData); -- - if (printer.instance) - { - instance = g_strdup_printf ("%s / %s", printer.name, printer.instance); -@@ -816,7 +850,7 @@ pp_printer_entry_new (cups_dest_t print - for (i = 0; i < printer.num_options; i++) - { - if (g_strcmp0 (printer.options[i].name, "device-uri") == 0) -- self->printer_uri = printer.options[i].value; -+ device_uri = printer.options[i].value; - else if (g_strcmp0 (printer.options[i].name, "printer-uri-supported") == 0) - printer_uri = printer.options[i].value; - else if (g_strcmp0 (printer.options[i].name, "printer-type") == 0) -@@ -826,13 +860,25 @@ pp_printer_entry_new (cups_dest_t print - else if (g_strcmp0 (printer.options[i].name, "printer-state-reasons") == 0) - reason = printer.options[i].value; - else if (g_strcmp0 (printer.options[i].name, "marker-names") == 0) -- self->inklevel->marker_names = g_strcompress (printer.options[i].value); -+ { -+ g_free (self->inklevel->marker_names); -+ self->inklevel->marker_names = g_strcompress (printer.options[i].value); -+ } - else if (g_strcmp0 (printer.options[i].name, "marker-levels") == 0) -- self->inklevel->marker_levels = g_strdup (printer.options[i].value); -+ { -+ g_free (self->inklevel->marker_levels); -+ self->inklevel->marker_levels = g_strdup (printer.options[i].value); -+ } - else if (g_strcmp0 (printer.options[i].name, "marker-colors") == 0) -- self->inklevel->marker_colors = g_strdup (printer.options[i].value); -+ { -+ g_free (self->inklevel->marker_colors); -+ self->inklevel->marker_colors = g_strdup (printer.options[i].value); -+ } - else if (g_strcmp0 (printer.options[i].name, "marker-types") == 0) -- self->inklevel->marker_types = g_strdup (printer.options[i].value); -+ { -+ g_free (self->inklevel->marker_types); -+ self->inklevel->marker_types = g_strdup (printer.options[i].value); -+ } - else if (g_strcmp0 (printer.options[i].name, "printer-make-and-model") == 0) - printer_make_and_model = printer.options[i].value; - else if (g_strcmp0 (printer.options[i].name, "printer-state") == 0) -@@ -896,6 +942,11 @@ pp_printer_entry_new (cups_dest_t print - gtk_label_set_label (self->error_status, status); - gtk_widget_set_visible (GTK_WIDGET (self->printer_error), TRUE); - } -+ else -+ { -+ gtk_label_set_label (self->error_status, ""); -+ gtk_widget_set_visible (GTK_WIDGET (self->printer_error), FALSE); -+ } - - switch (self->printer_state) - { -@@ -921,7 +972,7 @@ pp_printer_entry_new (cups_dest_t print - break; - } - -- if (printer_is_local (printer_type, self->printer_uri)) -+ if (printer_is_local (printer_type, device_uri)) - printer_icon_name = g_strdup ("printer"); - else - printer_icon_name = g_strdup ("printer-network"); -@@ -931,14 +982,8 @@ pp_printer_entry_new (cups_dest_t print - self->is_accepting_jobs = is_accepting_jobs; - self->is_authorized = is_authorized; - -- self->printer_hostname = printer_get_hostname (printer_type, self->printer_uri, printer_uri); -- -- self->clean_command = pp_maintenance_command_new (self->printer_name, -- "Clean", -- "all", -- /* Translators: Name of job which makes printer to clean its heads */ -- _("Clean print heads")); -- check_clean_heads_maintenance_command (self); -+ g_free (self->printer_hostname); -+ self->printer_hostname = printer_get_hostname (printer_type, device_uri, printer_uri); - - gtk_image_set_from_icon_name (self->printer_icon, printer_icon_name, GTK_ICON_SIZE_DIALOG); - gtk_label_set_text (self->printer_status, printer_status); -@@ -970,7 +1015,6 @@ pp_printer_entry_new (cups_dest_t print - gtk_label_set_text (self->printer_location_address_label, location); - } - -- g_signal_connect (self->supply_drawing_area, "draw", G_CALLBACK (supply_levels_draw_cb), self); - ink_supply_is_empty = supply_level_is_empty (self); - gtk_widget_set_visible (GTK_WIDGET (self->printer_inklevel_label), !ink_supply_is_empty); - gtk_widget_set_visible (GTK_WIDGET (self->supply_frame), !ink_supply_is_empty); -@@ -983,8 +1027,6 @@ pp_printer_entry_new (cups_dest_t print - g_free (instance); - g_free (printer_icon_name); - g_free (default_icon_name); -- -- return self; - } - - static void -@@ -1008,6 +1050,7 @@ pp_printer_entry_dispose (GObject *objec - g_clear_pointer (&self->printer_location, g_free); - g_clear_pointer (&self->printer_make_and_model, g_free); - g_clear_pointer (&self->printer_hostname, g_free); -+ g_clear_pointer (&self->inklevel, ink_level_data_free); - - if (self->get_jobs_cancellable != NULL) - { ---- gnome-control-center-3.28.2/panels/printers/pp-printer-entry.h -+++ gnome-control-center-3.28.2/panels/printers/pp-printer-entry.h -@@ -42,4 +42,8 @@ void pp_printer_entry_show_jo - - void pp_printer_entry_authenticate_jobs (PpPrinterEntry *self); - -+void pp_printer_entry_update (PpPrinterEntry *self, -+ cups_dest_t printer, -+ gboolean is_authorized); -+ - #endif /* PP_PRINTER_ENTRY_H */ diff --git a/rpminspect-desktop-fixes.patch b/rpminspect-desktop-fixes.patch new file mode 100644 index 0000000..cc235d2 --- /dev/null +++ b/rpminspect-desktop-fixes.patch @@ -0,0 +1,64 @@ +diff -up gnome-control-center-40.0/panels/bluetooth/gnome-bluetooth-panel.desktop.in.in.rpminspect-desktop-fixes gnome-control-center-40.0/panels/bluetooth/gnome-bluetooth-panel.desktop.in.in +--- gnome-control-center-40.0/panels/bluetooth/gnome-bluetooth-panel.desktop.in.in.rpminspect-desktop-fixes 2022-02-02 14:10:24.722557740 +0100 ++++ gnome-control-center-40.0/panels/bluetooth/gnome-bluetooth-panel.desktop.in.in 2022-02-02 14:10:41.756366100 +0100 +@@ -2,7 +2,7 @@ + Name=Bluetooth + Comment=Turn Bluetooth on and off and connect your devices + # Translators: Do NOT translate or transliterate this text (this is an icon file name)! +-Icon=bluetooth ++Icon=bluetooth-symbolic + Exec=gnome-control-center bluetooth + Terminal=false + Type=Application +diff -up gnome-control-center-40.0/panels/location/gnome-location-panel.desktop.in.in.rpminspect-desktop-fixes gnome-control-center-40.0/panels/location/gnome-location-panel.desktop.in.in +--- gnome-control-center-40.0/panels/location/gnome-location-panel.desktop.in.in.rpminspect-desktop-fixes 2022-02-02 14:11:08.849061293 +0100 ++++ gnome-control-center-40.0/panels/location/gnome-location-panel.desktop.in.in 2022-02-02 14:11:20.606929011 +0100 +@@ -4,7 +4,7 @@ Comment=Protect your location informatio + Exec=gnome-control-center location + # FIXME + # Translators: Do NOT translate or transliterate this text (this is an icon file name)! +-Icon=location-services-active ++Icon=location-services-active-symbolic + Terminal=false + Type=Application + NoDisplay=true +diff -up gnome-control-center-40.0/panels/microphone/gnome-microphone-panel.desktop.in.in.rpminspect-desktop-fixes gnome-control-center-40.0/panels/microphone/gnome-microphone-panel.desktop.in.in +--- gnome-control-center-40.0/panels/microphone/gnome-microphone-panel.desktop.in.in.rpminspect-desktop-fixes 2022-02-02 14:12:15.652309721 +0100 ++++ gnome-control-center-40.0/panels/microphone/gnome-microphone-panel.desktop.in.in 2022-02-02 14:12:28.849161249 +0100 +@@ -4,7 +4,7 @@ Comment=Protect your conversations + Exec=gnome-control-center microphone + # FIXME + # Translators: Do NOT translate or transliterate this text (this is an icon file name)! +-Icon=audio-input-microphone ++Icon=audio-input-microphone-symbolic + Terminal=false + Type=Application + NoDisplay=true +diff -up gnome-control-center-40.0/panels/thunderbolt/gnome-thunderbolt-panel.desktop.in.in.rpminspect-desktop-fixes gnome-control-center-40.0/panels/thunderbolt/gnome-thunderbolt-panel.desktop.in.in +--- gnome-control-center-40.0/panels/thunderbolt/gnome-thunderbolt-panel.desktop.in.in.rpminspect-desktop-fixes 2022-02-02 14:12:50.891913256 +0100 ++++ gnome-control-center-40.0/panels/thunderbolt/gnome-thunderbolt-panel.desktop.in.in 2022-02-02 14:12:59.811812903 +0100 +@@ -3,7 +3,7 @@ Name=Thunderbolt + Comment=Manage Thunderbolt devices + Exec=gnome-control-center thunderbolt + # Translators: Do NOT translate or transliterate this text (this is an icon file name)! +-Icon=thunderbolt ++Icon=thunderbolt-symbolic + Terminal=false + Type=Application + NoDisplay=true +diff -up gnome-control-center-40.0/panels/wwan/gnome-wwan-panel.desktop.in.in.rpminspect-desktop-fixes gnome-control-center-40.0/panels/wwan/gnome-wwan-panel.desktop.in.in +--- gnome-control-center-40.0/panels/wwan/gnome-wwan-panel.desktop.in.in.rpminspect-desktop-fixes 2022-02-02 14:09:27.862197449 +0100 ++++ gnome-control-center-40.0/panels/wwan/gnome-wwan-panel.desktop.in.in 2022-02-02 14:13:34.301424876 +0100 +@@ -4,11 +4,10 @@ Comment=Configure Telephony and mobile d + Exec=gnome-control-center wwan + # FIXME + # Translators: Do NOT translate or transliterate this text (this is an icon file name)! +-Icon=network-cellular-signal-excellent ++Icon=network-cellular-signal-excellent-symbolic + Terminal=false + Type=Application + NoDisplay=true +-StartupNotify=true + Categories=GNOME;GTK;Settings;X-GNOME-NetworkSettings;HardwareSettings;X-GNOME-Settings-Panel;X-GNOME-ConnectivitySettings; + OnlyShowIn=GNOME;Unity; + StartupNotify=true diff --git a/0001-info-Add-subscription-manager-integration.patch b/subscription-manager-support.patch similarity index 71% rename from 0001-info-Add-subscription-manager-integration.patch rename to subscription-manager-support.patch index 9474112..7af3186 100644 --- a/0001-info-Add-subscription-manager-integration.patch +++ b/subscription-manager-support.patch @@ -1,352 +1,182 @@ -From 3283b063af3f97cfc414766a42de80fc5ee43ba4 Mon Sep 17 00:00:00 2001 +From 9849810143193393bbf6fecfca2b415a4c58e147 Mon Sep 17 00:00:00 2001 From: Kalev Lember Date: Fri, 28 Jun 2019 17:14:36 +0200 -Subject: [PATCH 1/4] info: Add subscription manager integration +Subject: [PATCH 1/2] info-overview: Add subscription manager integration --- - panels/info/cc-info-overview-panel.c | 157 ++++- - panels/info/cc-subscription-details-dialog.c | 407 ++++++++++++ - panels/info/cc-subscription-details-dialog.h | 32 + - panels/info/cc-subscription-details-dialog.ui | 248 +++++++ - panels/info/cc-subscription-register-dialog.c | 403 +++++++++++ - panels/info/cc-subscription-register-dialog.h | 32 + - .../info/cc-subscription-register-dialog.ui | 623 ++++++++++++++++++ - panels/info/info-overview.ui | 138 +++- - panels/info/info.gresource.xml | 2 + - panels/info/meson.build | 4 + + panels/info-overview/cc-info-overview-panel.c | 190 ++++++ + .../info-overview/cc-info-overview-panel.ui | 10 + + panels/info-overview/cc-subscription-common.h | 34 + + .../cc-subscription-details-dialog.c | 578 ++++++++++++++++ + .../cc-subscription-details-dialog.h | 33 + + .../cc-subscription-details-dialog.ui | 425 ++++++++++++ + .../cc-subscription-register-dialog.c | 416 ++++++++++++ + .../cc-subscription-register-dialog.h | 33 + + .../cc-subscription-register-dialog.ui | 623 ++++++++++++++++++ + .../info-overview/info-overview.gresource.xml | 2 + + panels/info-overview/meson.build | 6 +- po/POTFILES.in | 4 + - 11 files changed, 2038 insertions(+), 12 deletions(-) - create mode 100644 panels/info/cc-subscription-details-dialog.c - create mode 100644 panels/info/cc-subscription-details-dialog.h - create mode 100644 panels/info/cc-subscription-details-dialog.ui - create mode 100644 panels/info/cc-subscription-register-dialog.c - create mode 100644 panels/info/cc-subscription-register-dialog.h - create mode 100644 panels/info/cc-subscription-register-dialog.ui + 12 files changed, 2353 insertions(+), 1 deletion(-) + create mode 100644 panels/info-overview/cc-subscription-common.h + create mode 100644 panels/info-overview/cc-subscription-details-dialog.c + create mode 100644 panels/info-overview/cc-subscription-details-dialog.h + create mode 100644 panels/info-overview/cc-subscription-details-dialog.ui + create mode 100644 panels/info-overview/cc-subscription-register-dialog.c + create mode 100644 panels/info-overview/cc-subscription-register-dialog.h + create mode 100644 panels/info-overview/cc-subscription-register-dialog.ui -diff --git a/panels/info/cc-info-overview-panel.c b/panels/info/cc-info-overview-panel.c -index 2256b730c..1467060f9 100644 ---- a/panels/info/cc-info-overview-panel.c -+++ b/panels/info/cc-info-overview-panel.c -@@ -1,118 +1,126 @@ - /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- - * - * Copyright (C) 2017 Mohammed Sadiq - * Copyright (C) 2010 Red Hat, Inc - * Copyright (C) 2008 William Jon McCann - * - * 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, see . - * - */ - - #include - - #include "shell/cc-hostname-entry.h" - - #include "cc-info-resources.h" +diff --git a/panels/info-overview/cc-info-overview-panel.c b/panels/info-overview/cc-info-overview-panel.c +index b20e5c1f7..99c8b20d7 100644 +--- a/panels/info-overview/cc-info-overview-panel.c ++++ b/panels/info-overview/cc-info-overview-panel.c +@@ -26,6 +26,9 @@ + #include "cc-os-release.h" + + #include "cc-info-overview-resources.h" ++#include "cc-subscription-common.h" +#include "cc-subscription-details-dialog.h" +#include "cc-subscription-register-dialog.h" #include "info-cleanup.h" #include - #include - #include - #include - #include - - #include - #include - #include - #include - - #include - - #ifdef GDK_WINDOWING_WAYLAND - #include - #endif - #ifdef GDK_WINDOWING_X11 - #include - #endif - - #include "gsd-disk-space-helper.h" - - #include "cc-info-overview-panel.h" - - - typedef struct { - /* Will be one or 2 GPU name strings, or "Unknown" */ - char *hardware_string; - } GraphicsData; - - typedef struct - { - GtkWidget *system_image; - GtkWidget *version_label; - GtkWidget *name_entry; - GtkWidget *memory_label; - GtkWidget *processor_label; - GtkWidget *os_name_label; - GtkWidget *os_type_label; - GtkWidget *disk_label; - GtkWidget *graphics_label; - GtkWidget *virt_type_label; -+ GtkWidget *subscription_stack; -+ GtkWidget *details_button; -+ GtkWidget *register_button; -+ GtkWidget *updates_separator; - GtkWidget *updates_button; - - /* Virtualisation labels */ - GtkWidget *label8; - GtkWidget *grid1; - GtkWidget *label18; - - char *gnome_version; - char *gnome_distributor; - char *gnome_date; - - GCancellable *cancellable; - - /* Free space */ - GList *primary_mounts; - guint64 total_bytes; - - GraphicsData *graphics_data; -+ -+ GDBusProxy *subscription_proxy; - } CcInfoOverviewPanelPrivate; - - struct _CcInfoOverviewPanel - { - CcPanel parent_instance; - - /*< private >*/ - CcInfoOverviewPanelPrivate *priv; +@@ -74,8 +77,13 @@ struct _CcInfoOverviewPanel + CcListRow *os_type_row; + CcListRow *processor_row; + CcListRow *software_updates_row; ++ CcListRow *subscription_row; + CcListRow *virtualization_row; + CcListRow *windowing_system_row; ++ ++ /* Subscription */ ++ GCancellable *subscription_cancellable; ++ GDBusProxy *subscription_proxy; }; - static void get_primary_disc_info_start (CcInfoOverviewPanel *self); - typedef struct - { - char *major; - char *minor; - char *micro; - char *distributor; - char *date; - char **current; - } VersionData; - - static void - version_data_free (VersionData *data) - { - g_free (data->major); - g_free (data->minor); - g_free (data->micro); - g_free (data->distributor); - g_free (data->date); -@@ -559,61 +567,60 @@ get_primary_disc_info (CcInfoOverviewPanel *self) - points = g_unix_mounts_get (NULL); - - for (p = points; p != NULL; p = p->next) - { - GUnixMountEntry *mount = p->data; - const char *mount_path; - const char *device_path; - - mount_path = g_unix_mount_get_mount_path (mount); - device_path = g_unix_mount_get_device_path (mount); - - /* Do not count multiple mounts with same device_path, because it is - * probably something like btrfs subvolume. Use only the first one in - * order to count the real size. */ - if (gsd_should_ignore_unix_mount (mount) || - gsd_is_removable_mount (mount) || - g_str_has_prefix (mount_path, "/media/") || - g_str_has_prefix (mount_path, g_get_home_dir ()) || - g_hash_table_lookup (hash, device_path) != NULL) - { - g_unix_mount_free (mount); - continue; - } - - priv->primary_mounts = g_list_prepend (priv->primary_mounts, mount); - g_hash_table_insert (hash, (gpointer) device_path, (gpointer) device_path); - } - g_list_free (points); - g_hash_table_destroy (hash); - -- priv->cancellable = g_cancellable_new (); - get_primary_disc_info_start (self); - } - - static char * - get_cpu_info (const glibtop_sysinfo *info) - { - g_autoptr(GHashTable) counts = NULL; - g_autoptr(GString) cpu = NULL; - GHashTableIter iter; - gpointer key, value; - int i; - int j; - - counts = g_hash_table_new (g_str_hash, g_str_equal); - - /* count duplicates */ - for (i = 0; i != info->ncpu; ++i) - { - const char * const keys[] = { "model name", "cpu", "Processor" }; - char *model; - int *count; - - model = NULL; - - for (j = 0; model == NULL && j != G_N_ELEMENTS (keys); ++j) - { - model = g_hash_table_lookup (info->cpuinfo[i].values, - keys[j]); - } - -@@ -766,60 +773,191 @@ info_overview_panel_setup_overview (CcInfoOverviewPanel *self) - res = load_gnome_version (&priv->gnome_version, - &priv->gnome_distributor, - &priv->gnome_date); - if (res) - { - g_autofree gchar *text = NULL; - text = g_strdup_printf (_("Version %s"), priv->gnome_version); - gtk_label_set_text (GTK_LABEL (priv->version_label), text); - } - - glibtop_get_mem (&mem); - memory_text = g_format_size_full (mem.total, G_FORMAT_SIZE_IEC_UNITS); - gtk_label_set_text (GTK_LABEL (priv->memory_label), memory_text ? memory_text : ""); - - info = glibtop_get_sysinfo (); - - cpu_text = get_cpu_info (info); - gtk_label_set_markup (GTK_LABEL (priv->processor_label), cpu_text ? cpu_text : ""); - - os_type_text = get_os_type (); - gtk_label_set_text (GTK_LABEL (priv->os_type_label), os_type_text ? os_type_text : ""); - - os_name_text = get_os_name (); - gtk_label_set_text (GTK_LABEL (priv->os_name_label), os_name_text ? os_name_text : ""); - - get_primary_disc_info (self); - - gtk_label_set_markup (GTK_LABEL (priv->graphics_label), priv->graphics_data->hardware_string); +@@ -770,6 +778,156 @@ info_overview_panel_setup_overview (CcInfoOverviewPanel *self) + cc_list_row_set_secondary_markup (self->graphics_row, graphics_hardware_string); } -+typedef enum { -+ GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN, -+ GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID, -+ GSD_SUBMAN_SUBSCRIPTION_STATUS_INVALID, -+ GSD_SUBMAN_SUBSCRIPTION_STATUS_DISABLED, -+ GSD_SUBMAN_SUBSCRIPTION_STATUS_PARTIALLY_VALID, -+ GSD_SUBMAN_SUBSCRIPTION_STATUS_LAST -+} GsdSubmanSubscriptionStatus; -+ -+static gboolean -+get_subscription_status (CcInfoOverviewPanel *self, GsdSubmanSubscriptionStatus *status) -+{ -+ CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); -+ g_autoptr(GVariant) status_variant = NULL; -+ guint32 u; -+ -+ status_variant = g_dbus_proxy_get_cached_property (priv->subscription_proxy, "SubscriptionStatus"); -+ if (!status_variant) -+ { -+ g_debug ("Unable to get SubscriptionStatus property"); -+ return FALSE; -+ } -+ -+ g_variant_get (status_variant, "u", &u); -+ *status = u; -+ -+ return TRUE; -+} -+ +static void +reload_subscription_status (CcInfoOverviewPanel *self) +{ -+ CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); + GsdSubmanSubscriptionStatus status; ++ gboolean registered; ++ gboolean updates; + -+ if (priv->subscription_proxy == NULL) ++ if (self->subscription_proxy == NULL) + { -+ gtk_widget_hide (priv->subscription_stack); ++ gtk_widget_hide (GTK_WIDGET (self->subscription_row)); + return; + } + -+ if (!get_subscription_status (self, &status)) ++ if (!get_subscription_status (self->subscription_proxy, &status)) + { -+ gtk_widget_hide (priv->subscription_stack); ++ gtk_widget_hide (GTK_WIDGET (self->subscription_row)); + return; + } + + switch (status) + { + case GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN: -+ case GSD_SUBMAN_SUBSCRIPTION_STATUS_INVALID: ++ registered = FALSE; ++ updates = FALSE; ++ gtk_widget_set_sensitive (GTK_WIDGET (self->software_updates_row), FALSE); ++ break; + case GSD_SUBMAN_SUBSCRIPTION_STATUS_DISABLED: -+ case GSD_SUBMAN_SUBSCRIPTION_STATUS_PARTIALLY_VALID: -+ gtk_stack_set_visible_child_name (GTK_STACK (priv->subscription_stack), "not-registered"); -+ gtk_widget_set_sensitive (priv->updates_button, FALSE); ++ registered = TRUE; ++ updates = TRUE; ++ gtk_widget_set_sensitive (GTK_WIDGET (self->software_updates_row), TRUE); + break; -+ + case GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID: -+ gtk_stack_set_visible_child_name (GTK_STACK (priv->subscription_stack), "registered"); -+ gtk_widget_set_sensitive (priv->updates_button, TRUE); ++ case GSD_SUBMAN_SUBSCRIPTION_STATUS_PARTIALLY_VALID: ++ registered = TRUE; ++ updates = TRUE; ++ gtk_widget_set_sensitive (GTK_WIDGET (self->software_updates_row), TRUE); ++ break; ++ case GSD_SUBMAN_SUBSCRIPTION_STATUS_INVALID: ++ registered = TRUE; ++ updates = FALSE; ++ gtk_widget_set_sensitive (GTK_WIDGET (self->software_updates_row), FALSE); ++ break; ++ case GSD_SUBMAN_SUBSCRIPTION_STATUS_NO_INSTALLED_PRODUCTS: ++ registered = FALSE; ++ updates = FALSE; ++ gtk_widget_set_sensitive (GTK_WIDGET (self->software_updates_row), FALSE); + break; -+ + default: + g_assert_not_reached (); + break; + } ++ ++ if (registered) ++ { ++ if (updates) ++ cc_list_row_set_secondary_label (self->software_updates_row, _("System is registered and able to receive software updates.")); ++ else ++ cc_list_row_set_secondary_label (self->software_updates_row, _("System is registered but is unable to receive all software updates.")); ++ ++ cc_list_row_set_secondary_label (self->subscription_row, _("Registered System")); ++ g_object_set_data (G_OBJECT (self->subscription_row), "is-registered", GINT_TO_POINTER (TRUE)); ++ } ++ else ++ { ++ cc_list_row_set_secondary_label (self->software_updates_row, _("Register this system to receive software updates.")); ++ cc_list_row_set_secondary_label (self->subscription_row, _("System Not Registered")); ++ g_object_set_data (G_OBJECT (self->subscription_row), "is-registered", GINT_TO_POINTER (FALSE)); ++ } +} + +static void -+on_details_button_clicked (GtkWidget *widget, -+ CcInfoOverviewPanel *self) ++open_subscription_details_dialog (CcInfoOverviewPanel *self) +{ -+ CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); + CcSubscriptionDetailsDialog *dialog; + GtkWindow *toplevel; ++ CcShell *shell; + -+ dialog = cc_subscription_details_dialog_new (priv->subscription_proxy); -+ toplevel = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))); -+ gtk_window_set_transient_for (GTK_WINDOW (dialog), toplevel); ++ g_assert (CC_IS_INFO_OVERVIEW_PANEL (self)); ++ ++ dialog = cc_subscription_details_dialog_new (self->subscription_proxy, ++ self->subscription_cancellable); ++ ++ shell = cc_panel_get_shell (CC_PANEL (self)); ++ toplevel = GTK_WINDOW (cc_shell_get_toplevel (shell)); ++ gtk_window_set_transient_for (GTK_WINDOW (self->hostname_editor), toplevel); + + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (GTK_WIDGET (dialog)); -+ -+ reload_subscription_status (self); +} + +static void -+on_register_button_clicked (GtkWidget *widget, -+ CcInfoOverviewPanel *self) ++open_subscription_register_dialog (CcInfoOverviewPanel *self) +{ -+ CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); + CcSubscriptionRegisterDialog *dialog; + GtkWindow *toplevel; ++ CcShell *shell; + -+ dialog = cc_subscription_register_dialog_new (priv->subscription_proxy); -+ toplevel = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))); -+ gtk_window_set_transient_for (GTK_WINDOW (dialog), toplevel); ++ g_assert (CC_IS_INFO_OVERVIEW_PANEL (self)); ++ ++ dialog = cc_subscription_register_dialog_new (self->subscription_proxy, ++ self->subscription_cancellable); ++ ++ shell = cc_panel_get_shell (CC_PANEL (self)); ++ toplevel = GTK_WINDOW (cc_shell_get_toplevel (shell)); ++ gtk_window_set_transient_for (GTK_WINDOW (self->hostname_editor), toplevel); + + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (GTK_WIDGET (dialog)); ++} ++ ++static void ++on_subscription_status_changed (GDBusProxy *proxy, ++ GVariant *changed_properties, ++ GStrv invalidated_properties, ++ CcInfoOverviewPanel *self) ++{ ++ g_cancellable_cancel (self->subscription_cancellable); ++ g_object_unref (self->subscription_cancellable); ++ ++ self->subscription_cancellable = g_cancellable_new (); + + reload_subscription_status (self); +} @@ -354,10 +184,9 @@ index 2256b730c..1467060f9 100644 +static void +info_overview_panel_setup_subscriptions (CcInfoOverviewPanel *self) +{ -+ CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); + g_autoptr(GError) error = NULL; + -+ priv->subscription_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, ++ self->subscription_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, + G_DBUS_PROXY_FLAGS_NONE, + NULL, + "org.gnome.SettingsDaemon.Subscription", @@ -372,8 +201,8 @@ index 2256b730c..1467060f9 100644 + return; + } + -+ g_signal_connect (priv->details_button, "clicked", G_CALLBACK (on_details_button_clicked), self); -+ g_signal_connect (priv->register_button, "clicked", G_CALLBACK (on_register_button_clicked), self); ++ g_signal_connect (self->subscription_proxy, "g-properties-changed", ++ G_CALLBACK (on_subscription_status_changed), self); + + reload_subscription_status (self); +} @@ -381,144 +210,143 @@ index 2256b730c..1467060f9 100644 static gboolean does_gnome_software_exist (void) { - return g_file_test (BINDIR "/gnome-software", G_FILE_TEST_EXISTS); - } - - static gboolean - does_gpk_update_viewer_exist (void) - { - return g_file_test (BINDIR "/gpk-update-viewer", G_FILE_TEST_EXISTS); - } - - static void - on_updates_button_clicked (GtkWidget *widget, - CcInfoOverviewPanel *self) - { - g_autoptr(GError) error = NULL; - gboolean ret; - g_auto(GStrv) argv = NULL; - - argv = g_new0 (gchar *, 3); - if (does_gnome_software_exist ()) - { - argv[0] = g_build_filename (BINDIR, "gnome-software", NULL); - argv[1] = g_strdup_printf ("--mode=updates"); - } - else - { - argv[0] = g_build_filename (BINDIR, "gpk-update-viewer", NULL); - } -@@ -829,88 +967,103 @@ on_updates_button_clicked (GtkWidget *widget, +@@ -860,6 +1018,15 @@ cc_info_panel_row_activated_cb (CcInfoOverviewPanel *self, + open_hostname_edit_dialog (self); + else if (row == self->software_updates_row) + open_software_update (self); ++ else if (row == self->subscription_row) ++ { ++ gboolean registered = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (row), "is-registered")); ++ ++ if (registered) ++ open_subscription_details_dialog (self); ++ else ++ open_subscription_register_dialog (self); ++ } } - static void - cc_info_overview_panel_dispose (GObject *object) - { - CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (CC_INFO_OVERVIEW_PANEL (object)); - - g_clear_pointer (&priv->graphics_data, graphics_data_free); - - G_OBJECT_CLASS (cc_info_overview_panel_parent_class)->dispose (object); + #ifdef DARK_MODE_DISTRIBUTOR_LOGO +@@ -908,11 +1075,30 @@ setup_os_logo (CcInfoOverviewPanel *panel) + #endif } - static void - cc_info_overview_panel_finalize (GObject *object) - { - CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (CC_INFO_OVERVIEW_PANEL (object)); - - if (priv->cancellable) - { - g_cancellable_cancel (priv->cancellable); - g_clear_object (&priv->cancellable); - } - - if (priv->primary_mounts) - g_list_free_full (priv->primary_mounts, (GDestroyNotify) g_unix_mount_free); - - g_free (priv->gnome_version); - g_free (priv->gnome_date); - g_free (priv->gnome_distributor); - -+ g_clear_object (&priv->subscription_proxy); ++static void ++cc_info_overview_panel_finalize (GObject *object) ++{ ++ CcInfoOverviewPanel *self = (CcInfoOverviewPanel *) object; ++ ++ if (self->subscription_cancellable) ++ { ++ g_cancellable_cancel (self->subscription_cancellable); ++ g_clear_object (&self->subscription_cancellable); ++ } ++ ++ g_clear_object (&self->subscription_proxy); ++ ++ G_OBJECT_CLASS (cc_info_overview_panel_parent_class)->finalize (object); ++} + - G_OBJECT_CLASS (cc_info_overview_panel_parent_class)->finalize (object); - } - static void cc_info_overview_panel_class_init (CcInfoOverviewPanelClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - object_class->finalize = cc_info_overview_panel_finalize; - object_class->dispose = cc_info_overview_panel_dispose; - - gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/info/info-overview.ui"); - - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, system_image); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, version_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, name_entry); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, memory_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, processor_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, os_name_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, os_type_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, disk_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, graphics_label); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, virt_type_label); -+ gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, subscription_stack); -+ gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, details_button); -+ gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, register_button); -+ gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, updates_separator); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, updates_button); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, label8); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, grid1); - gtk_widget_class_bind_template_child_private (widget_class, CcInfoOverviewPanel, label18); - - g_type_ensure (CC_TYPE_HOSTNAME_ENTRY); - } ++ object_class->finalize = cc_info_overview_panel_finalize; ++ + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/info-overview/cc-info-overview-panel.ui"); - static void - cc_info_overview_panel_init (CcInfoOverviewPanel *self) - { - CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self); + gtk_widget_class_bind_template_child (widget_class, CcInfoOverviewPanel, device_name_entry); +@@ -932,6 +1118,7 @@ cc_info_overview_panel_class_init (CcInfoOverviewPanelClass *klass) + gtk_widget_class_bind_template_child (widget_class, CcInfoOverviewPanel, processor_row); + gtk_widget_class_bind_template_child (widget_class, CcInfoOverviewPanel, rename_button); + gtk_widget_class_bind_template_child (widget_class, CcInfoOverviewPanel, software_updates_row); ++ gtk_widget_class_bind_template_child (widget_class, CcInfoOverviewPanel, subscription_row); + gtk_widget_class_bind_template_child (widget_class, CcInfoOverviewPanel, virtualization_row); + gtk_widget_class_bind_template_child (widget_class, CcInfoOverviewPanel, windowing_system_row); - gtk_widget_init_template (GTK_WIDGET (self)); +@@ -951,11 +1138,14 @@ cc_info_overview_panel_init (CcInfoOverviewPanel *self) - g_resources_register (cc_info_get_resource ()); + g_resources_register (cc_info_overview_get_resource ()); -+ priv->cancellable = g_cancellable_new (); ++ self->subscription_cancellable = g_cancellable_new (); + - priv->graphics_data = get_graphics_data (); - - if (does_gnome_software_exist () || does_gpk_update_viewer_exist ()) - g_signal_connect (priv->updates_button, "clicked", G_CALLBACK (on_updates_button_clicked), self); - else -- gtk_widget_destroy (priv->updates_button); -+ gtk_widget_hide (priv->updates_button); + if (!does_gnome_software_exist () && !does_gpk_update_viewer_exist ()) + gtk_widget_hide (GTK_WIDGET (self->software_updates_row)); info_overview_panel_setup_overview (self); info_overview_panel_setup_virt (self); + info_overview_panel_setup_subscriptions (self); -+ -+ /* show separator when both items are visible */ -+ if (gtk_widget_get_visible (priv->subscription_stack) && gtk_widget_get_visible (priv->updates_button)) -+ gtk_widget_show (priv->updates_separator); -+ else -+ gtk_widget_hide (priv->updates_separator); - } - GtkWidget * - cc_info_overview_panel_new (void) - { - return g_object_new (CC_TYPE_INFO_OVERVIEW_PANEL, - NULL); + setup_os_logo (self); } -diff --git a/panels/info/cc-subscription-details-dialog.c b/panels/info/cc-subscription-details-dialog.c +diff --git a/panels/info-overview/cc-info-overview-panel.ui b/panels/info-overview/cc-info-overview-panel.ui +index 2f5d3cf8b..ddd2cf614 100644 +--- a/panels/info-overview/cc-info-overview-panel.ui ++++ b/panels/info-overview/cc-info-overview-panel.ui +@@ -179,6 +179,16 @@ + + + ++ ++ ++ ++ True ++ Subscription ++ System Not Registered ++ go-next-symbolic ++ ++ ++ + + + +diff --git a/panels/info-overview/cc-subscription-common.h b/panels/info-overview/cc-subscription-common.h +new file mode 100644 +index 000000000..034d64181 +--- /dev/null ++++ b/panels/info-overview/cc-subscription-common.h +@@ -0,0 +1,34 @@ ++#ifndef CC_SUBSCRIPTION_COMMON_H ++#define CC_SUBSCRIPTION_COMMON_H ++ ++typedef enum { ++ GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN, ++ GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID, ++ GSD_SUBMAN_SUBSCRIPTION_STATUS_INVALID, ++ GSD_SUBMAN_SUBSCRIPTION_STATUS_DISABLED, ++ GSD_SUBMAN_SUBSCRIPTION_STATUS_PARTIALLY_VALID, ++ GSD_SUBMAN_SUBSCRIPTION_STATUS_NO_INSTALLED_PRODUCTS, ++ GSD_SUBMAN_SUBSCRIPTION_STATUS_LAST ++} GsdSubmanSubscriptionStatus; ++ ++static inline gboolean ++get_subscription_status (GDBusProxy *subscription_proxy, ++ GsdSubmanSubscriptionStatus *status) ++{ ++ g_autoptr(GVariant) status_variant = NULL; ++ guint32 u; ++ ++ status_variant = g_dbus_proxy_get_cached_property (subscription_proxy, "SubscriptionStatus"); ++ if (!status_variant) ++ { ++ g_debug ("Unable to get SubscriptionStatus property"); ++ return FALSE; ++ } ++ ++ g_variant_get (status_variant, "u", &u); ++ *status = u; ++ ++ return TRUE; ++} ++ ++#endif +diff --git a/panels/info-overview/cc-subscription-details-dialog.c b/panels/info-overview/cc-subscription-details-dialog.c new file mode 100644 -index 000000000..1931ced81 +index 000000000..15da1d911 --- /dev/null -+++ b/panels/info/cc-subscription-details-dialog.c -@@ -0,0 +1,407 @@ ++++ b/panels/info-overview/cc-subscription-details-dialog.c +@@ -0,0 +1,578 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright 2019 Red Hat, Inc, @@ -546,11 +374,14 @@ index 000000000..1931ced81 +#include + +#include "cc-subscription-details-dialog.h" ++#include "cc-subscription-common.h" + +#define DBUS_TIMEOUT 300000 /* 5 minutes */ + +typedef enum { + DIALOG_STATE_SHOW_DETAILS, ++ DIALOG_STATE_SUBSCRIBE, ++ DIALOG_STATE_SUBSCRIBING, + DIALOG_STATE_UNREGISTER, + DIALOG_STATE_UNREGISTERING +} DialogState; @@ -567,17 +398,25 @@ index 000000000..1931ced81 + /* template widgets */ + GtkButton *back_button; + GtkSpinner *spinner; ++ GtkStack *header_stack; ++ GtkButton *header_subscribe_button; + GtkButton *header_unregister_button; + GtkRevealer *notification_revealer; + GtkLabel *error_label; + GtkStack *stack; ++ GtkStack *status_stack; + GtkBox *products_box1; + GtkBox *products_box2; ++ GtkBox *products_box3; ++ GtkButton *subscribe_button; ++ GtkSeparator *separator; + GtkButton *unregister_button; +}; + +G_DEFINE_TYPE (CcSubscriptionDetailsDialog, cc_subscription_details_dialog, GTK_TYPE_DIALOG); + ++static void reload_installed_products (CcSubscriptionDetailsDialog *self); ++ +typedef struct +{ + gchar *product_name; @@ -626,15 +465,17 @@ index 000000000..1931ced81 +} + +static GtkWidget * -+add_product (CcSubscriptionDetailsDialog *self, ProductData *product) ++add_product (CcSubscriptionDetailsDialog *self, ProductData *product, GsdSubmanSubscriptionStatus status) +{ + GtkGrid *product_grid; + const gchar *status_text; + + if (g_strcmp0 (product->status, "subscribed") == 0) + status_text = _("Subscribed"); ++ else if (status == GSD_SUBMAN_SUBSCRIPTION_STATUS_DISABLED) ++ status_text = _("No Specific Subscription"); + else -+ status_text = _("Not Subscribed (Not supported by a valid subscription.)"); ++ status_text = _("Not Subscribed"); + + product_grid = GTK_GRID (gtk_grid_new ()); + gtk_grid_set_column_spacing (product_grid, 12); @@ -648,8 +489,12 @@ index 000000000..1931ced81 + add_product_row (product_grid, _("Version"), product->version, 2); + add_product_row (product_grid, _("Arch"), product->arch, 3); + add_product_row (product_grid, _("Status"), status_text, 4); -+ add_product_row (product_grid, _("Starts"), product->starts, 5); -+ add_product_row (product_grid, _("Ends"), product->ends, 6); ++ ++ if (product->starts[0] != '\0' && product->ends[0] != '\0') ++ { ++ add_product_row (product_grid, _("Starts"), product->starts, 5); ++ add_product_row (product_grid, _("Ends"), product->ends, 6); ++ } + + return GTK_WIDGET (product_grid); +} @@ -667,6 +512,9 @@ index 000000000..1931ced81 +dialog_reload (CcSubscriptionDetailsDialog *self) +{ + GtkHeaderBar *header = GTK_HEADER_BAR (gtk_dialog_get_header_bar (GTK_DIALOG (self))); ++ GsdSubmanSubscriptionStatus status = GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN; ++ ++ reload_installed_products (self); + + switch (self->state) + { @@ -675,13 +523,41 @@ index 000000000..1931ced81 + + gtk_window_set_title (GTK_WINDOW (self), _("Registration Details")); + gtk_widget_set_sensitive (GTK_WIDGET (self->header_unregister_button), TRUE); ++ gtk_widget_set_sensitive (GTK_WIDGET (self->header_subscribe_button), TRUE); + + gtk_widget_hide (GTK_WIDGET (self->back_button)); -+ gtk_widget_hide (GTK_WIDGET (self->header_unregister_button)); ++ gtk_widget_hide (GTK_WIDGET (self->header_stack)); + + gtk_stack_set_visible_child_name (self->stack, "show-details"); + break; + ++ case DIALOG_STATE_SUBSCRIBE: ++ gtk_header_bar_set_show_close_button (header, FALSE); ++ gtk_stack_set_visible_child_name (self->header_stack, "subscribe"); ++ gtk_window_set_title (GTK_WINDOW (self), _("Subscribe System")); ++ gtk_widget_set_sensitive (GTK_WIDGET (self->header_subscribe_button), TRUE); ++ ++ gtk_widget_show (GTK_WIDGET (self->back_button)); ++ ++ gtk_stack_set_visible_child_name (self->header_stack, "subscribe"); ++ gtk_widget_show (GTK_WIDGET (self->header_stack)); ++ ++ gtk_stack_set_visible_child_name (self->stack, "subscribe"); ++ break; ++ ++ case DIALOG_STATE_SUBSCRIBING: ++ gtk_header_bar_set_show_close_button (header, FALSE); ++ gtk_window_set_title (GTK_WINDOW (self), _("Looking For Available Subscriptions…")); ++ gtk_widget_set_sensitive (GTK_WIDGET (self->header_subscribe_button), FALSE); ++ ++ gtk_widget_show (GTK_WIDGET (self->back_button)); ++ ++ gtk_stack_set_visible_child_name (self->header_stack, "subscribe"); ++ gtk_widget_show (GTK_WIDGET (self->header_stack)); ++ ++ gtk_stack_set_visible_child_name (self->stack, "subscribe"); ++ break; ++ + case DIALOG_STATE_UNREGISTER: + gtk_header_bar_set_show_close_button (header, FALSE); + @@ -689,7 +565,9 @@ index 000000000..1931ced81 + gtk_widget_set_sensitive (GTK_WIDGET (self->header_unregister_button), TRUE); + + gtk_widget_show (GTK_WIDGET (self->back_button)); -+ gtk_widget_show (GTK_WIDGET (self->header_unregister_button)); ++ ++ gtk_stack_set_visible_child_name (self->header_stack, "unregister"); ++ gtk_widget_show (GTK_WIDGET (self->header_stack)); + + gtk_stack_set_visible_child_name (self->stack, "unregister"); + break; @@ -701,7 +579,9 @@ index 000000000..1931ced81 + gtk_widget_set_sensitive (GTK_WIDGET (self->header_unregister_button), FALSE); + + gtk_widget_show (GTK_WIDGET (self->back_button)); -+ gtk_widget_show (GTK_WIDGET (self->header_unregister_button)); ++ ++ gtk_stack_set_visible_child_name (self->header_stack, "unregister"); ++ gtk_widget_show (GTK_WIDGET (self->header_stack)); + + gtk_stack_set_visible_child_name (self->stack, "unregister"); + break; @@ -713,28 +593,68 @@ index 000000000..1931ced81 + + remove_all_children (GTK_CONTAINER (self->products_box1)); + remove_all_children (GTK_CONTAINER (self->products_box2)); ++ remove_all_children (GTK_CONTAINER (self->products_box3)); + + if (self->products == NULL || self->products->len == 0) + { + /* the widgets are duplicate to allow sliding between two stack pages */ + GtkWidget *w1 = gtk_label_new (_("No installed products detected.")); + GtkWidget *w2 = gtk_label_new (_("No installed products detected.")); ++ GtkWidget *w3 = gtk_label_new (_("No installed products detected.")); + gtk_widget_show (w1); + gtk_widget_show (w2); ++ gtk_widget_show (w3); + gtk_container_add (GTK_CONTAINER (self->products_box1), w1); + gtk_container_add (GTK_CONTAINER (self->products_box2), w2); ++ gtk_container_add (GTK_CONTAINER (self->products_box3), w3); ++ gtk_stack_set_visible_child_name (self->status_stack, "no-installed-products"); ++ ++ gtk_widget_hide (GTK_WIDGET (self->subscribe_button)); ++ gtk_widget_hide (GTK_WIDGET (self->separator)); + return; + } + ++ get_subscription_status (self->subscription_proxy, &status); ++ + for (guint i = 0; i < self->products->len; i++) + { + ProductData *product = g_ptr_array_index (self->products, i); + /* the widgets are duplicate to allow sliding between two stack pages */ -+ GtkWidget *w1 = add_product (self, product); -+ GtkWidget *w2 = add_product (self, product); ++ GtkWidget *w1 = add_product (self, product, status); ++ GtkWidget *w2 = add_product (self, product, status); ++ GtkWidget *w3 = add_product (self, product, status); + gtk_container_add (GTK_CONTAINER (self->products_box1), w1); + gtk_container_add (GTK_CONTAINER (self->products_box2), w2); ++ gtk_container_add (GTK_CONTAINER (self->products_box3), w3); ++ } ++ ++ switch (status) ++ { ++ case GSD_SUBMAN_SUBSCRIPTION_STATUS_VALID: ++ gtk_stack_set_visible_child_name (self->status_stack, "fully-subscribed"); ++ gtk_widget_hide (GTK_WIDGET (self->subscribe_button)); ++ break; ++ ++ case GSD_SUBMAN_SUBSCRIPTION_STATUS_PARTIALLY_VALID: ++ gtk_stack_set_visible_child_name (self->status_stack, "partly-subscribed"); ++ gtk_widget_show (GTK_WIDGET (self->subscribe_button)); ++ break; ++ ++ case GSD_SUBMAN_SUBSCRIPTION_STATUS_DISABLED: ++ gtk_stack_set_visible_child_name (self->status_stack, "subscription-not-needed"); ++ gtk_widget_hide (GTK_WIDGET (self->subscribe_button)); ++ break; ++ ++ case GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN: ++ default: ++ gtk_stack_set_visible_child_name (self->status_stack, "not-subscribed"); ++ gtk_widget_show (GTK_WIDGET (self->subscribe_button)); ++ break; + } ++ ++ gtk_widget_set_visible (GTK_WIDGET (self->separator), ++ gtk_widget_get_visible (GTK_WIDGET (self->subscribe_button))); ++ +} + +static ProductData * @@ -757,7 +677,7 @@ index 000000000..1931ced81 +} + +static void -+load_installed_products (CcSubscriptionDetailsDialog *self) ++reload_installed_products (CcSubscriptionDetailsDialog *self) +{ + GVariantIter iter_array; + GVariant *child; @@ -782,6 +702,58 @@ index 000000000..1931ced81 +} + +static void ++subscription_done_cb (GObject *source_object, ++ GAsyncResult *res, ++ gpointer user_data) ++{ ++ CcSubscriptionDetailsDialog *self = (CcSubscriptionDetailsDialog *) user_data; ++ g_autoptr(GVariant) results = NULL; ++ g_autoptr(GError) error = NULL; ++ ++ results = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), ++ res, ++ &error); ++ if (results == NULL) ++ { ++ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ return; ++ ++ g_dbus_error_strip_remote_error (error); ++ gtk_label_set_text (self->error_label, error->message); ++ gtk_revealer_set_reveal_child (self->notification_revealer, TRUE); ++ ++ gtk_spinner_stop (self->spinner); ++ ++ self->state = DIALOG_STATE_SUBSCRIBE; ++ dialog_reload (self); ++ return; ++ } ++ ++ gtk_spinner_stop (self->spinner); ++ ++ self->state = DIALOG_STATE_SHOW_DETAILS; ++ dialog_reload (self); ++} ++ ++static void ++header_subscribe_button_clicked_cb (CcSubscriptionDetailsDialog *self) ++{ ++ gtk_spinner_start (self->spinner); ++ ++ self->state = DIALOG_STATE_SUBSCRIBING; ++ dialog_reload (self); ++ ++ g_dbus_proxy_call (self->subscription_proxy, ++ "Attach", ++ NULL, ++ G_DBUS_CALL_FLAGS_NONE, ++ DBUS_TIMEOUT, ++ self->cancellable, ++ subscription_done_cb, ++ self); ++} ++ ++static void +unregistration_done_cb (GObject *source_object, + GAsyncResult *res, + gpointer user_data) @@ -842,6 +814,13 @@ index 000000000..1931ced81 +} + +static void ++subscribe_button_clicked_cb (CcSubscriptionDetailsDialog *self) ++{ ++ self->state = DIALOG_STATE_SUBSCRIBE; ++ dialog_reload (self); ++} ++ ++static void +unregister_button_clicked_cb (CcSubscriptionDetailsDialog *self) +{ + self->state = DIALOG_STATE_UNREGISTER; @@ -859,7 +838,6 @@ index 000000000..1931ced81 +{ + gtk_widget_init_template (GTK_WIDGET (self)); + -+ self->cancellable = g_cancellable_new (); + self->products = g_ptr_array_new_with_free_func ((GDestroyNotify) product_data_free); + self->state = DIALOG_STATE_SHOW_DETAILS; +} @@ -895,43 +873,64 @@ index 000000000..1931ced81 + object_class->dispose = cc_subscription_details_dialog_dispose; + object_class->finalize = cc_subscription_details_dialog_finalize; + -+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/info/cc-subscription-details-dialog.ui"); ++ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/info-overview/cc-subscription-details-dialog.ui"); + + gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, back_button); + gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, spinner); ++ gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, header_stack); ++ gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, header_subscribe_button); + gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, header_unregister_button); + gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, notification_revealer); + gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, error_label); + gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, stack); ++ gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, status_stack); + gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, products_box1); + gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, products_box2); ++ gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, products_box3); ++ gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, subscribe_button); ++ gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, separator); + gtk_widget_class_bind_template_child (widget_class, CcSubscriptionDetailsDialog, unregister_button); + + gtk_widget_class_bind_template_callback (widget_class, back_button_clicked_cb); ++ gtk_widget_class_bind_template_callback (widget_class, header_subscribe_button_clicked_cb); + gtk_widget_class_bind_template_callback (widget_class, header_unregister_button_clicked_cb); ++ gtk_widget_class_bind_template_callback (widget_class, subscribe_button_clicked_cb); + gtk_widget_class_bind_template_callback (widget_class, unregister_button_clicked_cb); + gtk_widget_class_bind_template_callback (widget_class, dismiss_notification); +} + ++static void ++on_dialog_cancelled (CcSubscriptionDetailsDialog *self) ++{ ++ gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_CLOSE); ++} ++ +CcSubscriptionDetailsDialog * -+cc_subscription_details_dialog_new (GDBusProxy *subscription_proxy) ++cc_subscription_details_dialog_new (GDBusProxy *subscription_proxy, ++ GCancellable *cancellable) +{ + CcSubscriptionDetailsDialog *self; + + self = g_object_new (CC_TYPE_SUBSCRIPTION_DETAILS_DIALOG, "use-header-bar", TRUE, NULL); + self->subscription_proxy = g_object_ref (subscription_proxy); ++ self->cancellable = g_object_ref (cancellable); ++ ++ g_signal_connect_object (G_OBJECT (self->cancellable), ++ "cancelled", ++ G_CALLBACK (on_dialog_cancelled), ++ self, ++ G_CONNECT_SWAPPED); + -+ load_installed_products (self); + dialog_reload (self); + + return self; +} -diff --git a/panels/info/cc-subscription-details-dialog.h b/panels/info/cc-subscription-details-dialog.h +diff --git a/panels/info-overview/cc-subscription-details-dialog.h b/panels/info-overview/cc-subscription-details-dialog.h new file mode 100644 -index 000000000..a61a22838 +index 000000000..f14dd157b --- /dev/null -+++ b/panels/info/cc-subscription-details-dialog.h -@@ -0,0 +1,32 @@ ++++ b/panels/info-overview/cc-subscription-details-dialog.h +@@ -0,0 +1,33 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright 2019 Red Hat, Inc, @@ -961,15 +960,16 @@ index 000000000..a61a22838 +#define CC_TYPE_SUBSCRIPTION_DETAILS_DIALOG (cc_subscription_details_dialog_get_type ()) +G_DECLARE_FINAL_TYPE (CcSubscriptionDetailsDialog, cc_subscription_details_dialog, CC, SUBSCRIPTION_DETAILS_DIALOG, GtkDialog) + -+CcSubscriptionDetailsDialog *cc_subscription_details_dialog_new (GDBusProxy *subscription_proxy); ++CcSubscriptionDetailsDialog *cc_subscription_details_dialog_new (GDBusProxy *subscription_proxy, ++ GCancellable *cancellable); + +G_END_DECLS -diff --git a/panels/info/cc-subscription-details-dialog.ui b/panels/info/cc-subscription-details-dialog.ui +diff --git a/panels/info-overview/cc-subscription-details-dialog.ui b/panels/info-overview/cc-subscription-details-dialog.ui new file mode 100644 -index 000000000..6f0b16930 +index 000000000..6cdfc1220 --- /dev/null -+++ b/panels/info/cc-subscription-details-dialog.ui -@@ -0,0 +1,248 @@ ++++ b/panels/info-overview/cc-subscription-details-dialog.ui +@@ -0,0 +1,425 @@ + + + + -diff --git a/panels/info/cc-subscription-register-dialog.c b/panels/info/cc-subscription-register-dialog.c +diff --git a/panels/info-overview/cc-subscription-register-dialog.c b/panels/info-overview/cc-subscription-register-dialog.c new file mode 100644 -index 000000000..d7a17cc99 +index 000000000..6867a976b --- /dev/null -+++ b/panels/info/cc-subscription-register-dialog.c -@@ -0,0 +1,403 @@ ++++ b/panels/info-overview/cc-subscription-register-dialog.c +@@ -0,0 +1,416 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright 2019 Red Hat, Inc, @@ -1552,7 +1729,6 @@ index 000000000..d7a17cc99 +{ + gtk_widget_init_template (GTK_WIDGET (self)); + -+ self->cancellable = g_cancellable_new (); + self->state = DIALOG_STATE_REGISTER; + + gtk_entry_set_text (self->url_entry, SERVER_URL); @@ -1588,7 +1764,7 @@ index 000000000..d7a17cc99 + object_class->dispose = cc_subscription_register_dialog_dispose; + object_class->finalize = cc_subscription_register_dialog_finalize; + -+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/info/cc-subscription-register-dialog.ui"); ++ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/info-overview/cc-subscription-register-dialog.ui"); + + gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, spinner); + gtk_widget_class_bind_template_child (widget_class, CcSubscriptionRegisterDialog, register_button); @@ -1617,22 +1793,36 @@ index 000000000..d7a17cc99 + gtk_widget_class_bind_template_callback (widget_class, register_with_activation_keys_radio_toggled_cb); +} + ++static void ++on_dialog_cancelled (CcSubscriptionRegisterDialog *self) ++{ ++ gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_CLOSE); ++} ++ +CcSubscriptionRegisterDialog * -+cc_subscription_register_dialog_new (GDBusProxy *subscription_proxy) ++cc_subscription_register_dialog_new (GDBusProxy *subscription_proxy, ++ GCancellable *cancellable) +{ + CcSubscriptionRegisterDialog *self; + + self = g_object_new (CC_TYPE_SUBSCRIPTION_REGISTER_DIALOG, "use-header-bar", TRUE, NULL); + self->subscription_proxy = g_object_ref (subscription_proxy); ++ self->cancellable = g_object_ref (cancellable); ++ ++ g_signal_connect_object (G_OBJECT (self->cancellable), ++ "cancelled", ++ G_CALLBACK (on_dialog_cancelled), ++ self, ++ G_CONNECT_SWAPPED); + + return self; +} -diff --git a/panels/info/cc-subscription-register-dialog.h b/panels/info/cc-subscription-register-dialog.h +diff --git a/panels/info-overview/cc-subscription-register-dialog.h b/panels/info-overview/cc-subscription-register-dialog.h new file mode 100644 -index 000000000..c5918df9f +index 000000000..31c254084 --- /dev/null -+++ b/panels/info/cc-subscription-register-dialog.h -@@ -0,0 +1,32 @@ ++++ b/panels/info-overview/cc-subscription-register-dialog.h +@@ -0,0 +1,33 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright 2019 Red Hat, Inc, @@ -1662,14 +1852,15 @@ index 000000000..c5918df9f +#define CC_TYPE_SUBSCRIPTION_REGISTER_DIALOG (cc_subscription_register_dialog_get_type ()) +G_DECLARE_FINAL_TYPE (CcSubscriptionRegisterDialog, cc_subscription_register_dialog, CC, SUBSCRIPTION_REGISTER_DIALOG, GtkDialog) + -+CcSubscriptionRegisterDialog *cc_subscription_register_dialog_new (GDBusProxy *subscription_proxy); ++CcSubscriptionRegisterDialog *cc_subscription_register_dialog_new (GDBusProxy *subscription_proxy, ++ GCancellable *cancellable); + +G_END_DECLS -diff --git a/panels/info/cc-subscription-register-dialog.ui b/panels/info/cc-subscription-register-dialog.ui +diff --git a/panels/info-overview/cc-subscription-register-dialog.ui b/panels/info-overview/cc-subscription-register-dialog.ui new file mode 100644 index 000000000..21e317b41 --- /dev/null -+++ b/panels/info/cc-subscription-register-dialog.ui ++++ b/panels/info-overview/cc-subscription-register-dialog.ui @@ -0,0 +1,623 @@ + + @@ -2294,301 +2485,27 @@ index 000000000..21e317b41 + + + -diff --git a/panels/info/info-overview.ui b/panels/info/info-overview.ui -index aa87fbec2..e33ba399a 100644 ---- a/panels/info/info-overview.ui -+++ b/panels/info/info-overview.ui -@@ -1,46 +1,47 @@ - - - - - -diff --git a/panels/info/info.gresource.xml b/panels/info/info.gresource.xml -index c96722350..15d18daac 100644 ---- a/panels/info/info.gresource.xml -+++ b/panels/info/info.gresource.xml -@@ -1,9 +1,11 @@ - +diff --git a/panels/info-overview/info-overview.gresource.xml b/panels/info-overview/info-overview.gresource.xml +index 83806e0ad..e68944931 100644 +--- a/panels/info-overview/info-overview.gresource.xml ++++ b/panels/info-overview/info-overview.gresource.xml +@@ -2,6 +2,8 @@ - - info-overview.ui - info-default-apps.ui - info-removable-media.ui + + cc-info-overview-panel.ui + cc-subscription-details-dialog.ui + cc-subscription-register-dialog.ui GnomeLogoVerticalMedium.svg -diff --git a/panels/info/meson.build b/panels/info/meson.build -index 13015b96c..a4ff83a42 100644 ---- a/panels/info/meson.build -+++ b/panels/info/meson.build -@@ -14,65 +14,69 @@ foreach name: panel_names - output: desktop + '.in', - configuration: desktop_conf - ) - - i18n.merge_file( - desktop, - type: 'desktop', - input: desktop_in, - output: desktop, - po_dir: po_dir, - install: true, - install_dir: control_center_desktopdir - ) - endforeach - - cflags += [ - '-DBINDIR="@0@"'.format(control_center_bindir), - '-DDATADIR="@0@"'.format(control_center_datadir), - '-DGNOME_SESSION_DIR="@0@"'.format(gnome_session_libexecdir), - '-DGNOMELOCALEDIR="@0@"'.format(control_center_localedir) - ] - - gsd_headers = ['gsd-disk-space-helper.h'] - - gsd_sources = ['gsd-disk-space-helper.c'] +diff --git a/panels/info-overview/meson.build b/panels/info-overview/meson.build +index 14663f24c..1c9adb35c 100644 +--- a/panels/info-overview/meson.build ++++ b/panels/info-overview/meson.build +@@ -24,12 +24,16 @@ cflags += [ - sources = files(gsd_sources) + files( - 'cc-info-default-apps-panel.c', + sources = files( 'cc-info-overview-panel.c', - 'cc-info-removable-media-panel.c', + 'cc-subscription-details-dialog.c', + 'cc-subscription-register-dialog.c', 'info-cleanup.c' @@ -2596,107 +2513,52 @@ index 13015b96c..a4ff83a42 100644 resource_data = files( 'GnomeLogoVerticalMedium.svg', +- 'cc-info-overview-panel.ui' ++ 'cc-info-overview-panel.ui', + 'cc-subscription-details-dialog.ui', -+ 'cc-subscription-register-dialog.ui', - 'info-default-apps.ui', - 'info-overview.ui', - 'info-removable-media.ui' ++ 'cc-subscription-register-dialog.ui' ) sources += gnome.compile_resources( - 'cc-' + cappletname + '-resources', - cappletname + '.gresource.xml', - c_name: 'cc_' + cappletname, - dependencies: resource_data, - export: true - ) - - deps = common_deps + [ - polkit_gobject_dep, - dependency('libgtop-2.0') - ] - - panels_libs += static_library( - cappletname, - sources: sources, - include_directories: top_inc, - dependencies: deps, - c_args: cflags - ) - - test_name = 'test-info-cleanup' - - sources = files( - 'info-cleanup.c', diff --git a/po/POTFILES.in b/po/POTFILES.in -index dfd8ccff0..6cb8938e9 100644 +index 5f7e8d49a..6063b50dd 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in -@@ -7,60 +7,64 @@ panels/background/cc-background-item.c - panels/background/cc-background-panel.c - panels/background/gnome-background-panel.desktop.in.in - panels/bluetooth/bluetooth.ui - panels/bluetooth/cc-bluetooth-panel.c - panels/bluetooth/gnome-bluetooth-panel.desktop.in.in - panels/color/cc-color-calibrate.c - panels/color/cc-color-common.c - panels/color/cc-color-device.c - panels/color/cc-color-panel.c - panels/color/cc-color-profile.c - panels/color/color-calibrate.ui - panels/color/color.ui - panels/color/gnome-color-panel.desktop.in.in - panels/common/cc-common-language.c - panels/common/cc-language-chooser.c - panels/common/cc-util.c - panels/common/language-chooser.ui - panels/datetime/big.ui - panels/datetime/cc-datetime-panel.c - panels/datetime/datetime.ui - panels/datetime/gnome-datetime-panel.desktop.in.in - panels/datetime/little.ui - panels/datetime/middle.ui - panels/datetime/org.gnome.controlcenter.datetime.policy.in - panels/datetime/ydm.ui - panels/display/cc-display-panel.c - panels/display/display.ui +@@ -50,6 +50,10 @@ panels/display/cc-night-light-page.ui panels/display/gnome-display-panel.desktop.in.in - panels/info/cc-info-overview-panel.c - panels/info/cc-info-removable-media-panel.c -+panels/info/cc-subscription-details-dialog.c -+panels/info/cc-subscription-details-dialog.ui -+panels/info/cc-subscription-register-dialog.c -+panels/info/cc-subscription-register-dialog.ui - panels/info/gnome-default-apps-panel.desktop.in.in - panels/info/gnome-info-overview-panel.desktop.in.in - panels/info/gnome-removable-media-panel.desktop.in.in - panels/info/info-default-apps.ui - panels/info/info-overview.ui - panels/info/info-removable-media.ui + panels/info-overview/cc-info-overview-panel.c + panels/info-overview/cc-info-overview-panel.ui ++panels/info-overview/cc-subscription-details-dialog.c ++panels/info-overview/cc-subscription-details-dialog.ui ++panels/info-overview/cc-subscription-register-dialog.c ++panels/info-overview/cc-subscription-register-dialog.ui + panels/info-overview/gnome-info-overview-panel.desktop.in.in panels/keyboard/00-multimedia.xml.in panels/keyboard/01-input-sources.xml.in - panels/keyboard/01-launchers.xml.in - panels/keyboard/01-screenshot.xml.in - panels/keyboard/01-system.xml.in - panels/keyboard/50-accessibility.xml.in - panels/keyboard/cc-keyboard-manager.c - panels/keyboard/cc-keyboard-option.c - panels/keyboard/cc-keyboard-panel.c - panels/keyboard/cc-keyboard-shortcut-editor.c - panels/keyboard/gnome-keyboard-panel.desktop.in.in - panels/keyboard/gnome-keyboard-panel.ui - panels/keyboard/keyboard-shortcuts.c - panels/keyboard/shortcut-editor.ui - panels/mouse/cc-mouse-panel.c - panels/mouse/gnome-mouse-panel.desktop.in.in - panels/mouse/gnome-mouse-properties.c - panels/mouse/gnome-mouse-properties.ui - panels/mouse/gnome-mouse-test.c - panels/mouse/gnome-mouse-test.ui - panels/network/cc-network-panel.c - panels/network/cc-wifi-panel.c - panels/network/connection-editor/8021x-security-page.ui - panels/network/connection-editor/ce-page-8021x-security.c -- -2.28.0 +2.31.1 + + +From 785dae8f28a08f492da1053b55a601cdcec9233e Mon Sep 17 00:00:00 2001 +From: Kalev Lember +Date: Tue, 7 Sep 2021 13:13:08 +0200 +Subject: [PATCH 2/2] info-overview: Add desktop file keywords for subscription + support + +--- + panels/info-overview/gnome-info-overview-panel.desktop.in.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/panels/info-overview/gnome-info-overview-panel.desktop.in.in b/panels/info-overview/gnome-info-overview-panel.desktop.in.in +index 06abbdc19..2bfff8483 100644 +--- a/panels/info-overview/gnome-info-overview-panel.desktop.in.in ++++ b/panels/info-overview/gnome-info-overview-panel.desktop.in.in +@@ -19,4 +19,4 @@ X-GNOME-Bugzilla-Version=@VERSION@ + # 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 +-Keywords=device;system;information;hostname;memory;processor;version;default;application;preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun; ++Keywords=device;system;information;hostname;memory;processor;version;default;application;preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;register;registration;subscribe;subscription; +-- +2.31.1 diff --git a/wwan-backport-gnome-40.patch b/wwan-backport-gnome-40.patch new file mode 100644 index 0000000..408607a --- /dev/null +++ b/wwan-backport-gnome-40.patch @@ -0,0 +1,9200 @@ +From aa65caa35ae1c69b8b6644c1a72eb8110500e7e0 Mon Sep 17 00:00:00 2001 +From: Mohammed Sadiq +Date: Fri, 4 Oct 2019 12:27:26 +0530 +Subject: [PATCH 1/7] common: Add polkit rules for modem management + +--- + panels/common/gnome-control-center.rules.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/panels/common/gnome-control-center.rules.in b/panels/common/gnome-control-center.rules.in +index 971ffac63..22cf785e0 100644 +--- a/panels/common/gnome-control-center.rules.in ++++ b/panels/common/gnome-control-center.rules.in +@@ -1,6 +1,7 @@ + polkit.addRule(function(action, subject) { + if ((action.id == "org.freedesktop.locale1.set-locale" || + action.id == "org.freedesktop.locale1.set-keyboard" || ++ action.id == "org.freedesktop.ModemManager1.Device.Control" || + action.id == "org.freedesktop.hostname1.set-static-hostname" || + action.id == "org.freedesktop.hostname1.set-hostname" || + action.id == "org.gnome.controlcenter.datetime.configure") && +-- +2.32.0 + + +From 2b863f51831bc09d3ef56d16858724191ac9095c Mon Sep 17 00:00:00 2001 +From: Mohammed Sadiq +Date: Fri, 4 Oct 2019 22:16:23 +0530 +Subject: [PATCH 2/7] wwan: Add new panel for modem management + +The panel supports 2G/3G/4G GSM/LTE modems. CDMA2000 Modems are not supported. +If a supported modem is present, the panel will be shown and the modem will be +handled, else, network-panel shall manage the modem as it did in the past. + +If more than one modem with data enabled is present, the user is allowed to set +priority of one SIM over the other (the priority is for SIM, not modem). + +Fixes https://gitlab.gnome.org/GNOME/gnome-control-center/issues/132 +--- + meson.build | 4 + + panels/meson.build | 3 +- + panels/wwan/cc-wwan-apn-dialog.c | 424 ++++++ + panels/wwan/cc-wwan-apn-dialog.h | 40 + + panels/wwan/cc-wwan-apn-dialog.ui | 249 ++++ + panels/wwan/cc-wwan-data.c | 1446 ++++++++++++++++++++ + panels/wwan/cc-wwan-data.h | 93 ++ + panels/wwan/cc-wwan-details-dialog.c | 257 ++++ + panels/wwan/cc-wwan-details-dialog.h | 40 + + panels/wwan/cc-wwan-details-dialog.ui | 320 +++++ + panels/wwan/cc-wwan-device-page.c | 634 +++++++++ + panels/wwan/cc-wwan-device-page.h | 42 + + panels/wwan/cc-wwan-device-page.ui | 270 ++++ + panels/wwan/cc-wwan-device.c | 1355 ++++++++++++++++++ + panels/wwan/cc-wwan-device.h | 152 ++ + panels/wwan/cc-wwan-errors-private.h | 104 ++ + panels/wwan/cc-wwan-mode-dialog.c | 327 +++++ + panels/wwan/cc-wwan-mode-dialog.h | 40 + + panels/wwan/cc-wwan-mode-dialog.ui | 57 + + panels/wwan/cc-wwan-network-dialog.c | 443 ++++++ + panels/wwan/cc-wwan-network-dialog.h | 40 + + panels/wwan/cc-wwan-network-dialog.ui | 188 +++ + panels/wwan/cc-wwan-panel.c | 929 +++++++++++++ + panels/wwan/cc-wwan-panel.h | 36 + + panels/wwan/cc-wwan-panel.ui | 336 +++++ + panels/wwan/cc-wwan-sim-lock-dialog.c | 310 +++++ + panels/wwan/cc-wwan-sim-lock-dialog.h | 40 + + panels/wwan/cc-wwan-sim-lock-dialog.ui | 306 +++++ + panels/wwan/gnome-wwan-panel.desktop.in.in | 16 + + panels/wwan/meson.build | 61 + + panels/wwan/wwan.gresource.xml | 12 + + shell/cc-panel-list.c | 1 + + shell/cc-panel-loader.c | 9 + + 33 files changed, 8583 insertions(+), 1 deletion(-) + create mode 100644 panels/wwan/cc-wwan-apn-dialog.c + create mode 100644 panels/wwan/cc-wwan-apn-dialog.h + create mode 100644 panels/wwan/cc-wwan-apn-dialog.ui + create mode 100644 panels/wwan/cc-wwan-data.c + create mode 100644 panels/wwan/cc-wwan-data.h + create mode 100644 panels/wwan/cc-wwan-details-dialog.c + create mode 100644 panels/wwan/cc-wwan-details-dialog.h + create mode 100644 panels/wwan/cc-wwan-details-dialog.ui + create mode 100644 panels/wwan/cc-wwan-device-page.c + create mode 100644 panels/wwan/cc-wwan-device-page.h + create mode 100644 panels/wwan/cc-wwan-device-page.ui + create mode 100644 panels/wwan/cc-wwan-device.c + create mode 100644 panels/wwan/cc-wwan-device.h + create mode 100644 panels/wwan/cc-wwan-errors-private.h + create mode 100644 panels/wwan/cc-wwan-mode-dialog.c + create mode 100644 panels/wwan/cc-wwan-mode-dialog.h + create mode 100644 panels/wwan/cc-wwan-mode-dialog.ui + create mode 100644 panels/wwan/cc-wwan-network-dialog.c + create mode 100644 panels/wwan/cc-wwan-network-dialog.h + create mode 100644 panels/wwan/cc-wwan-network-dialog.ui + create mode 100644 panels/wwan/cc-wwan-panel.c + create mode 100644 panels/wwan/cc-wwan-panel.h + create mode 100644 panels/wwan/cc-wwan-panel.ui + create mode 100644 panels/wwan/cc-wwan-sim-lock-dialog.c + create mode 100644 panels/wwan/cc-wwan-sim-lock-dialog.h + create mode 100644 panels/wwan/cc-wwan-sim-lock-dialog.ui + create mode 100644 panels/wwan/gnome-wwan-panel.desktop.in.in + create mode 100644 panels/wwan/meson.build + create mode 100644 panels/wwan/wwan.gresource.xml + +diff --git a/meson.build b/meson.build +index 900216962..75487603b 100644 +--- a/meson.build ++++ b/meson.build +@@ -228,6 +228,10 @@ config_h.set('BUILD_NETWORK', host_is_linux, + description: 'Define to 1 to build the Network panel') + config_h.set('HAVE_NETWORK_MANAGER', host_is_linux, + description: 'Define to 1 if NetworkManager is available') ++config_h.set('BUILD_WWAN', host_is_linux, ++ description: 'Define to 1 to build the WWan panel') ++config_h.set('HAVE_WWAN', host_is_linux, ++ description: 'Define to 1 if WWan is available') + + if host_is_linux_not_s390 + # gnome-bluetooth +diff --git a/panels/meson.build b/panels/meson.build +index 2f4fdc5e3..9b9fc34f4 100644 +--- a/panels/meson.build ++++ b/panels/meson.build +@@ -26,7 +26,8 @@ panels = [ + 'sound', + 'universal-access', + 'usage', +- 'user-accounts' ++ 'user-accounts', ++ 'wwan', + ] + + if host_is_linux +diff --git a/panels/wwan/cc-wwan-apn-dialog.c b/panels/wwan/cc-wwan-apn-dialog.c +new file mode 100644 +index 000000000..bc5fde283 +--- /dev/null ++++ b/panels/wwan/cc-wwan-apn-dialog.c +@@ -0,0 +1,424 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-apn-dialog.c ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#undef G_LOG_DOMAIN ++#define G_LOG_DOMAIN "cc-wwan-apn-dialog" ++ ++#include ++#include ++#include ++ ++#include "cc-wwan-device.h" ++#include "cc-wwan-data.h" ++#include "list-box-helper.h" ++#include "cc-wwan-apn-dialog.h" ++#include "cc-wwan-resources.h" ++ ++/** ++ * @short_description: Dialog to manage Internet Access Points ++ */ ++ ++struct _CcWwanApnDialog ++{ ++ GtkDialog parent_instance; ++ ++ GtkButton *add_button; ++ GtkButton *back_button; ++ GtkButton *save_button; ++ GtkEntry *apn_entry; ++ GtkEntry *name_entry; ++ GtkEntry *password_entry; ++ GtkEntry *username_entry; ++ GtkGrid *apn_edit_view; ++ GtkListBox *apn_list; ++ GtkRadioButton *apn_radio_button; ++ GtkScrolledWindow *apn_list_view; ++ GtkStack *apn_settings_stack; ++ ++ CcWwanData *wwan_data; ++ CcWwanDataApn *apn_to_save; /* The APN currently being edited */ ++ CcWwanDevice *device; ++ ++ gboolean enable_data; ++ gboolean enable_roaming; ++}; ++ ++G_DEFINE_TYPE (CcWwanApnDialog, cc_wwan_apn_dialog, GTK_TYPE_DIALOG) ++ ++ ++enum { ++ PROP_0, ++ PROP_DEVICE, ++ N_PROPS ++}; ++ ++static GParamSpec *properties[N_PROPS]; ++ ++#define CC_TYPE_WWAN_APN_ROW (cc_wwan_apn_row_get_type()) ++G_DECLARE_FINAL_TYPE (CcWwanApnRow, cc_wwan_apn_row, CC, WWAN_APN_ROW, GtkListBoxRow) ++ ++struct _CcWwanApnRow ++{ ++ GtkListBoxRow parent_instance; ++ GtkRadioButton *radio_button; ++ CcWwanDataApn *apn; ++}; ++ ++G_DEFINE_TYPE (CcWwanApnRow, cc_wwan_apn_row, GTK_TYPE_LIST_BOX_ROW) ++ ++static void ++cc_wwan_apn_row_finalize (GObject *object) ++{ ++ CcWwanApnRow *row = (CcWwanApnRow *)object; ++ ++ g_clear_object (&row->apn); ++ ++ G_OBJECT_CLASS (cc_wwan_apn_row_parent_class)->finalize (object); ++} ++ ++static void ++cc_wwan_apn_row_class_init (CcWwanApnRowClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->finalize = cc_wwan_apn_row_finalize; ++} ++ ++static void ++cc_wwan_apn_row_init (CcWwanApnRow *row) ++{ ++} ++ ++static void ++cc_wwan_apn_back_clicked_cb (CcWwanApnDialog *self) ++{ ++ GtkWidget *view; ++ ++ view = gtk_stack_get_visible_child (self->apn_settings_stack); ++ ++ if (view == GTK_WIDGET (self->apn_edit_view)) ++ { ++ gtk_widget_hide (GTK_WIDGET (self->save_button)); ++ gtk_widget_show (GTK_WIDGET (self->add_button)); ++ gtk_stack_set_visible_child (self->apn_settings_stack, ++ GTK_WIDGET (self->apn_list_view)); ++ } ++ else ++ { ++ gtk_widget_hide (GTK_WIDGET (self)); ++ } ++} ++ ++static void ++cc_wwan_apn_add_clicked_cb (CcWwanApnDialog *self) ++{ ++ gtk_entry_set_text (self->name_entry, ""); ++ gtk_entry_set_text (self->apn_entry, ""); ++ gtk_entry_set_text (self->username_entry, ""); ++ gtk_entry_set_text (self->password_entry, ""); ++ ++ gtk_widget_hide (GTK_WIDGET (self->add_button)); ++ gtk_widget_show (GTK_WIDGET (self->save_button)); ++ self->apn_to_save = NULL; ++ gtk_stack_set_visible_child (self->apn_settings_stack, ++ GTK_WIDGET (self->apn_edit_view)); ++} ++ ++static void ++cc_wwan_apn_save_clicked_cb (CcWwanApnDialog *self) ++{ ++ const gchar *name, *apn_name; ++ CcWwanDataApn *apn; ++ ++ apn = self->apn_to_save; ++ self->apn_to_save = NULL; ++ ++ name = gtk_entry_get_text (self->name_entry); ++ apn_name = gtk_entry_get_text (self->apn_entry); ++ ++ if (!apn) ++ apn = cc_wwan_data_apn_new (); ++ ++ cc_wwan_data_apn_set_name (apn, name); ++ cc_wwan_data_apn_set_apn (apn, apn_name); ++ cc_wwan_data_apn_set_username (apn, gtk_entry_get_text (self->username_entry)); ++ cc_wwan_data_apn_set_password (apn, gtk_entry_get_text (self->password_entry)); ++ ++ cc_wwan_data_save_apn (self->wwan_data, apn, NULL, NULL, NULL); ++ ++ gtk_widget_hide (GTK_WIDGET (self->save_button)); ++ gtk_stack_set_visible_child (self->apn_settings_stack, ++ GTK_WIDGET (self->apn_list_view)); ++} ++ ++static void ++cc_wwan_apn_entry_changed_cb (CcWwanApnDialog *self) ++{ ++ GtkWidget *widget; ++ const gchar *str; ++ gboolean valid_name, valid_apn; ++ ++ widget = GTK_WIDGET (self->name_entry); ++ str = gtk_entry_get_text (self->name_entry); ++ valid_name = str && *str; ++ ++ if (valid_name) ++ gtk_style_context_remove_class (gtk_widget_get_style_context (widget), "error"); ++ else ++ gtk_style_context_add_class (gtk_widget_get_style_context (widget), "error"); ++ ++ widget = GTK_WIDGET (self->apn_entry); ++ str = gtk_entry_get_text (self->apn_entry); ++ valid_apn = str && *str; ++ ++ if (valid_apn) ++ gtk_style_context_remove_class (gtk_widget_get_style_context (widget), "error"); ++ else ++ gtk_style_context_add_class (gtk_widget_get_style_context (widget), "error"); ++ ++ gtk_widget_set_sensitive (GTK_WIDGET (self->save_button), valid_name && valid_apn); ++} ++ ++static void ++cc_wwan_apn_activated_cb (CcWwanApnDialog *self, ++ CcWwanApnRow *row) ++{ ++ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (row->radio_button), TRUE); ++} ++ ++static void ++cc_wwan_apn_changed_cb (CcWwanApnDialog *self, ++ GtkWidget *widget) ++{ ++ CcWwanApnRow *row; ++ ++ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) ++ return; ++ ++ widget = gtk_widget_get_ancestor (widget, CC_TYPE_WWAN_APN_ROW); ++ row = CC_WWAN_APN_ROW (widget); ++ ++ if (cc_wwan_data_set_default_apn (self->wwan_data, row->apn)) ++ cc_wwan_data_save_settings (self->wwan_data, NULL, NULL, NULL); ++} ++ ++static void ++cc_wwan_apn_edit_clicked_cb (CcWwanApnDialog *self, ++ GtkButton *button) ++{ ++ CcWwanDataApn *apn; ++ CcWwanApnRow *row; ++ GtkWidget *widget; ++ ++ widget = gtk_widget_get_ancestor (GTK_WIDGET (button), CC_TYPE_WWAN_APN_ROW); ++ row = CC_WWAN_APN_ROW (widget); ++ apn = row->apn; ++ self->apn_to_save = apn; ++ ++ gtk_widget_show (GTK_WIDGET (self->save_button)); ++ gtk_widget_hide (GTK_WIDGET (self->add_button)); ++ ++ gtk_entry_set_text (self->name_entry, cc_wwan_data_apn_get_name (apn)); ++ gtk_entry_set_text (self->apn_entry, cc_wwan_data_apn_get_apn (apn)); ++ gtk_entry_set_text (self->username_entry, cc_wwan_data_apn_get_username (apn)); ++ gtk_entry_set_text (self->password_entry, cc_wwan_data_apn_get_password (apn)); ++ ++ gtk_stack_set_visible_child (self->apn_settings_stack, ++ GTK_WIDGET (self->apn_edit_view)); ++} ++ ++static GtkWidget * ++cc_wwan_apn_dialog_row_new (CcWwanDataApn *apn, ++ CcWwanApnDialog *self) ++{ ++ CcWwanApnRow *row; ++ GtkWidget *grid, *name_label, *apn_label, *radio, *edit_button; ++ GtkStyleContext *context; ++ ++ row = g_object_new (CC_TYPE_WWAN_APN_ROW, NULL); ++ ++ grid = g_object_new (GTK_TYPE_GRID, ++ "margin-top", 6, ++ "margin-bottom", 6, ++ "margin-start", 6, ++ "margin-end", 6, ++ NULL); ++ ++ radio = gtk_radio_button_new_from_widget (self->apn_radio_button); ++ row->radio_button = GTK_RADIO_BUTTON (radio); ++ gtk_widget_set_margin_end (radio, 12); ++ gtk_grid_attach (GTK_GRID (grid), radio, 0, 0, 1, 2); ++ row->apn = g_object_ref (apn); ++ ++ if (cc_wwan_data_get_default_apn (self->wwan_data) == apn) ++ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE); ++ g_signal_connect_object (radio, "toggled", ++ G_CALLBACK (cc_wwan_apn_changed_cb), ++ self, G_CONNECT_SWAPPED); ++ ++ name_label = gtk_label_new (cc_wwan_data_apn_get_name (apn)); ++ gtk_widget_set_halign (name_label, GTK_ALIGN_START); ++ gtk_widget_set_hexpand (name_label, TRUE); ++ gtk_grid_attach (GTK_GRID (grid), name_label, 1, 0, 1, 1); ++ ++ apn_label = gtk_label_new (cc_wwan_data_apn_get_apn (apn)); ++ gtk_widget_set_halign (apn_label, GTK_ALIGN_START); ++ context = gtk_widget_get_style_context (apn_label); ++ gtk_style_context_add_class (context, "dim-label"); ++ gtk_grid_attach (GTK_GRID (grid), apn_label, 1, 1, 1, 1); ++ ++ edit_button = gtk_button_new_from_icon_name ("emblem-system-symbolic", ++ GTK_ICON_SIZE_BUTTON); ++ g_signal_connect_object (edit_button, "clicked", ++ G_CALLBACK (cc_wwan_apn_edit_clicked_cb), ++ self, G_CONNECT_SWAPPED); ++ gtk_grid_attach (GTK_GRID (grid), edit_button, 2, 0, 1, 2); ++ ++ gtk_container_add (GTK_CONTAINER (row), grid); ++ gtk_widget_show_all (GTK_WIDGET (row)); ++ ++ return GTK_WIDGET (row); ++} ++ ++static void ++cc_wwan_apn_dialog_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ CcWwanApnDialog *self = (CcWwanApnDialog *)object; ++ ++ switch (prop_id) ++ { ++ case PROP_DEVICE: ++ self->device = g_value_dup_object (value); ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++cc_wwan_apn_dialog_constructed (GObject *object) ++{ ++ CcWwanApnDialog *self = (CcWwanApnDialog *)object; ++ ++ G_OBJECT_CLASS (cc_wwan_apn_dialog_parent_class)->constructed (object); ++ ++ self->wwan_data = cc_wwan_device_get_data (self->device); ++ ++ gtk_list_box_bind_model (self->apn_list, ++ cc_wwan_data_get_apn_list (self->wwan_data), ++ (GtkListBoxCreateWidgetFunc)cc_wwan_apn_dialog_row_new, ++ self, NULL); ++} ++ ++static void ++cc_wwan_apn_dialog_dispose (GObject *object) ++{ ++ CcWwanApnDialog *self = (CcWwanApnDialog *)object; ++ ++ g_clear_object (&self->device); ++ ++ G_OBJECT_CLASS (cc_wwan_apn_dialog_parent_class)->dispose (object); ++} ++ ++ ++static void ++cc_wwan_apn_dialog_show (GtkWidget *widget) ++{ ++ CcWwanApnDialog *self = (CcWwanApnDialog *)widget; ++ ++ gtk_widget_show (GTK_WIDGET (self->add_button)); ++ gtk_widget_hide (GTK_WIDGET (self->save_button)); ++ gtk_stack_set_visible_child (self->apn_settings_stack, ++ GTK_WIDGET (self->apn_list_view)); ++ ++ GTK_WIDGET_CLASS (cc_wwan_apn_dialog_parent_class)->show (widget); ++} ++ ++static void ++cc_wwan_apn_dialog_class_init (CcWwanApnDialogClass *klass) ++{ ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->set_property = cc_wwan_apn_dialog_set_property; ++ object_class->constructed = cc_wwan_apn_dialog_constructed; ++ object_class->dispose = cc_wwan_apn_dialog_dispose; ++ ++ widget_class->show = cc_wwan_apn_dialog_show; ++ ++ properties[PROP_DEVICE] = ++ g_param_spec_object ("device", ++ "Device", ++ "The WWAN Device", ++ CC_TYPE_WWAN_DEVICE, ++ G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); ++ ++ g_object_class_install_properties (object_class, N_PROPS, properties); ++ ++ gtk_widget_class_set_template_from_resource (widget_class, ++ "/org/gnome/control-center/wwan/cc-wwan-apn-dialog.ui"); ++ ++ gtk_widget_class_bind_template_child (widget_class, CcWwanApnDialog, add_button); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanApnDialog, apn_edit_view); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanApnDialog, apn_entry); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanApnDialog, apn_list); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanApnDialog, apn_list_view); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanApnDialog, apn_radio_button); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanApnDialog, apn_settings_stack); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanApnDialog, back_button); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanApnDialog, name_entry); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanApnDialog, password_entry); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanApnDialog, save_button); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanApnDialog, username_entry); ++ ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_apn_back_clicked_cb); ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_apn_add_clicked_cb); ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_apn_save_clicked_cb); ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_apn_entry_changed_cb); ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_apn_activated_cb); ++} ++ ++static void ++cc_wwan_apn_dialog_init (CcWwanApnDialog *self) ++{ ++ gtk_widget_init_template (GTK_WIDGET (self)); ++} ++ ++CcWwanApnDialog * ++cc_wwan_apn_dialog_new (GtkWindow *parent_window, ++ CcWwanDevice *device) ++{ ++ g_return_val_if_fail (GTK_IS_WINDOW (parent_window), NULL); ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (device), NULL); ++ ++ return g_object_new (CC_TYPE_WWAN_APN_DIALOG, ++ "transient-for", parent_window, ++ "use-header-bar", 1, ++ "device", device, ++ NULL); ++} +diff --git a/panels/wwan/cc-wwan-apn-dialog.h b/panels/wwan/cc-wwan-apn-dialog.h +new file mode 100644 +index 000000000..0e9885836 +--- /dev/null ++++ b/panels/wwan/cc-wwan-apn-dialog.h +@@ -0,0 +1,40 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-apn-dialog.h ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#pragma once ++ ++#include ++#include ++ ++#include "cc-wwan-device.h" ++ ++G_BEGIN_DECLS ++ ++#define CC_TYPE_WWAN_APN_DIALOG (cc_wwan_apn_dialog_get_type()) ++G_DECLARE_FINAL_TYPE (CcWwanApnDialog, cc_wwan_apn_dialog, CC, WWAN_APN_DIALOG, GtkDialog) ++ ++CcWwanApnDialog *cc_wwan_apn_dialog_new (GtkWindow *parent_window, ++ CcWwanDevice *device); ++ ++G_END_DECLS +diff --git a/panels/wwan/cc-wwan-apn-dialog.ui b/panels/wwan/cc-wwan-apn-dialog.ui +new file mode 100644 +index 000000000..fb8432bc6 +--- /dev/null ++++ b/panels/wwan/cc-wwan-apn-dialog.ui +@@ -0,0 +1,249 @@ ++ ++ ++ ++ ++ ++ ++ +diff --git a/panels/wwan/cc-wwan-data.c b/panels/wwan/cc-wwan-data.c +new file mode 100644 +index 000000000..0be8f3403 +--- /dev/null ++++ b/panels/wwan/cc-wwan-data.c +@@ -0,0 +1,1446 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-data.c ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#undef G_LOG_DOMAIN ++#define G_LOG_DOMAIN "cc-wwan-data" ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#define _GNU_SOURCE ++#include ++#include ++#include ++ ++#include "cc-wwan-data.h" ++ ++/** ++ * @short_description: Device Internet Data Object ++ * @include: "cc-wwan-device-data.h" ++ * ++ * #CcWwanData represents the data object of the given ++ * #CcWwanDevice. Please note that while #CcWWanDevice ++ * is bound to the hardware device, #CcWwanData may also ++ * depend on the inserted SIM (if supported). So the state ++ * of #CcWwanData changes when SIM is changed. ++ */ ++ ++/* Priority for connections. larger the number, lower the priority */ ++#define CC_WWAN_DNS_PRIORITY_LOW (20) ++#define CC_WWAN_DNS_PRIORITY_HIGH (15) ++ ++/* These are to be set as route metric */ ++#define CC_WWAN_ROUTE_PRIORITY_LOW (1050) ++#define CC_WWAN_ROUTE_PRIORITY_HIGH (1040) ++ ++struct _CcWwanData ++{ ++ GObject parent_instance; ++ ++ MMObject *mm_object; ++ MMModem *modem; ++ MMSim *sim; ++ gchar *sim_id; ++ ++ gchar *operator_code; /* MCCMNC */ ++ GError *error; ++ ++ NMClient *nm_client; ++ NMDevice *nm_device; ++ NMAMobileProvidersDatabase *apn_db; ++ NMAMobileProvider *apn_provider; ++ CcWwanDataApn *default_apn; ++ CcWwanDataApn *old_default_apn; ++ GListStore *apn_list; ++ NMActiveConnection *active_connection; ++ ++ gint priority; ++ gboolean data_enabled; /* autoconnect enabled */ ++ gboolean home_only; /* Data roaming */ ++}; ++ ++G_DEFINE_TYPE (CcWwanData, cc_wwan_data, G_TYPE_OBJECT) ++ ++/* ++ * Default Access Point Settings Logic: ++ * For a provided SIM, all the APNs available from NetworkManager ++ * that matches the given SIM identifier (ICCID, available via ++ * mm_sim_get_identifier() or similar gdbus API) is loaded for ++ * the Device (In NetworkManager, it is saved as ‘sim-id’, if ++ * present). At a time, only one connection will be bound to ++ * a device. If there are more than one match, the item with ++ * the highest ‘route-metric’ is taken. If more matches are ++ * still available, the first item is chosen. ++ * ++ * Populating All available APNs: ++ * All Possible APNs for the given sim are populated the following ++ * way (A list of all the following avoiding duplicates) ++ * 1. The above mentioned “Default Access Point Settings Logic” ++ * 2. Get All saved Network Manager connections with the ++ * provided MCCMNC of the given SIM ++ * 3. Get All possible APNs for the MCCMNC from mobile-provider-info ++ * ++ * Testing if data is enabled: ++ * Check if any of the items from step 1 have ‘autoconnect’ set ++ * ++ * Checking/Setting current SIM for data (in case of multiple SIM): ++ * Since other networks (like wifi, ethernet) should have higher ++ * priorities we use a negative number for priority. ++ * 1. All APNs by default have priority CC_WWAN_APN_PRIORITY_LOW ++ * 2. APN of selected SIM for active data have priority of ++ * CC_WWAN_APN_PRIORITY_HIGH ++ * ++ * XXX: Since users may create custom APNs via nmtui or like tools ++ * we may have to check if there are some inconsistencies with APNs ++ * available in NetworkManager, and ask user if they have to reset ++ * the APNs that have invalid settings (basically, we care only APNs ++ * that are set to have ‘autoconnect’ enabled, and all we need is to ++ * disable autoconnect). We won’t interfere CDMA/EVDO networks. ++ */ ++struct _CcWwanDataApn { ++ GObject parent_instance; ++ ++ /* Set if the APN is from the mobile-provider-info database */ ++ NMAMobileAccessMethod *access_method; ++ ++ /* Set if the APN is saved in NetworkManager */ ++ NMConnection *nm_connection; ++ NMRemoteConnection *remote_connection; ++ ++ gboolean modified; ++}; ++ ++G_DEFINE_TYPE (CcWwanDataApn, cc_wwan_data_apn, G_TYPE_OBJECT) ++ ++enum { ++ PROP_0, ++ PROP_ERROR, ++ PROP_ENABLED, ++ N_PROPS ++}; ++ ++static GParamSpec *properties[N_PROPS]; ++ ++static void ++wwan_data_apn_reset (CcWwanDataApn *apn) ++{ ++ if (!apn) ++ return; ++ ++ g_clear_object (&apn->nm_connection); ++ g_clear_object (&apn->remote_connection); ++} ++ ++static NMConnection * ++wwan_data_get_nm_connection (CcWwanDataApn *apn) ++{ ++ NMConnection *connection; ++ NMSetting *setting; ++ g_autofree gchar *uuid = NULL; ++ ++ if (apn->nm_connection) ++ return apn->nm_connection; ++ ++ if (apn->remote_connection) ++ return NM_CONNECTION (apn->remote_connection); ++ ++ connection = nm_simple_connection_new (); ++ apn->nm_connection = connection; ++ ++ setting = nm_setting_connection_new (); ++ uuid = nm_utils_uuid_generate (); ++ g_object_set (setting, ++ NM_SETTING_CONNECTION_UUID, uuid, ++ NM_SETTING_CONNECTION_TYPE, NM_SETTING_GSM_SETTING_NAME, ++ NULL); ++ nm_connection_add_setting (connection, setting); ++ ++ setting = nm_setting_serial_new (); ++ nm_connection_add_setting (connection, setting); ++ ++ setting = nm_setting_ip4_config_new (); ++ g_object_set (setting, NM_SETTING_IP_CONFIG_METHOD, "auto", NULL); ++ nm_connection_add_setting (connection, setting); ++ ++ nm_connection_add_setting (connection, nm_setting_gsm_new ()); ++ nm_connection_add_setting (connection, nm_setting_ppp_new ()); ++ ++ return apn->nm_connection; ++} ++ ++static gboolean ++wwan_data_apn_are_same (NMRemoteConnection *remote_connection, ++ NMAMobileAccessMethod *access_method) ++{ ++ NMConnection *connection; ++ NMSetting *setting; ++ ++ if (!remote_connection) ++ return FALSE; ++ ++ connection = NM_CONNECTION (remote_connection); ++ setting = NM_SETTING (nm_connection_get_setting_gsm (connection)); ++ ++ if (g_strcmp0 (nma_mobile_access_method_get_3gpp_apn (access_method), ++ nm_setting_gsm_get_apn (NM_SETTING_GSM (setting))) != 0) ++ return FALSE; ++ ++ if (g_strcmp0 (nma_mobile_access_method_get_username (access_method), ++ nm_setting_gsm_get_username (NM_SETTING_GSM (setting))) != 0) ++ return FALSE; ++ ++ if (g_strcmp0 (nma_mobile_access_method_get_password (access_method), ++ nm_setting_gsm_get_password (NM_SETTING_GSM (setting))) != 0) ++ return FALSE; ++ ++ return TRUE; ++} ++ ++static CcWwanDataApn * ++wwan_data_find_matching_apn (CcWwanData *self, ++ NMAMobileAccessMethod *access_method) ++{ ++ CcWwanDataApn *apn; ++ guint i, n_items; ++ ++ n_items = g_list_model_get_n_items (G_LIST_MODEL (self->apn_list)); ++ ++ for (i = 0; i < n_items; i++) ++ { ++ apn = g_list_model_get_item (G_LIST_MODEL (self->apn_list), i); ++ ++ if (apn->access_method == access_method) ++ return apn; ++ ++ if (wwan_data_apn_are_same (apn->remote_connection, ++ access_method)) ++ return apn; ++ ++ g_object_unref (apn); ++ } ++ ++ return NULL; ++} ++ ++static gboolean ++wwan_data_nma_method_is_mms (NMAMobileAccessMethod *method) ++{ ++ const char *str; ++ ++ str = nma_mobile_access_method_get_3gpp_apn (method); ++ if (str && strcasestr (str, "mms")) ++ return TRUE; ++ ++ str = nma_mobile_access_method_get_name (method); ++ if (str && strcasestr (str, "mms")) ++ return TRUE; ++ ++ return FALSE; ++} ++ ++static void ++wwan_data_update_apn_list_db (CcWwanData *self) ++{ ++ GSList *apn_methods = NULL, *l; ++ g_autoptr(GError) error = NULL; ++ guint i = 0; ++ ++ if (!self->sim || !self->operator_code) ++ return; ++ ++ if (!self->apn_list) ++ self->apn_list = g_list_store_new (CC_TYPE_WWAN_DATA_APN); ++ ++ if (!self->apn_db) ++ self->apn_db = nma_mobile_providers_database_new_sync (NULL, NULL, NULL, &error); ++ ++ if (error) ++ { ++ g_warning ("%s", error->message); ++ return; ++ } ++ ++ if (!self->apn_provider) ++ self->apn_provider = nma_mobile_providers_database_lookup_3gpp_mcc_mnc (self->apn_db, ++ self->operator_code); ++ ++ if (self->apn_provider) ++ apn_methods = nma_mobile_provider_get_methods (self->apn_provider); ++ ++ for (l = apn_methods; l; l = l->next, i++) ++ { ++ g_autoptr(CcWwanDataApn) apn = NULL; ++ ++ /* We don’t list MMS APNs */ ++ if (wwan_data_nma_method_is_mms (l->data)) ++ continue; ++ ++ apn = wwan_data_find_matching_apn (self, l->data); ++ ++ /* Prepend the item in order */ ++ if (!apn) ++ { ++ apn = cc_wwan_data_apn_new (); ++ g_list_store_insert (self->apn_list, i, apn); ++ } ++ ++ apn->access_method = l->data; ++ } ++} ++ ++static void ++wwan_data_update_apn_list (CcWwanData *self) ++{ ++ const GPtrArray *nm_connections; ++ guint i; ++ ++ if (self->apn_list || !self->sim) ++ return; ++ ++ if (!self->apn_list) ++ self->apn_list = g_list_store_new (CC_TYPE_WWAN_DATA_APN); ++ ++ if (self->nm_device) ++ { ++ nm_connections = nm_device_get_available_connections (self->nm_device); ++ ++ for (i = 0; i < nm_connections->len; i++) ++ { ++ g_autoptr(CcWwanDataApn) apn = NULL; ++ ++ apn = cc_wwan_data_apn_new (); ++ apn->remote_connection = g_object_ref (nm_connections->pdata[i]); ++ g_list_store_append (self->apn_list, apn); ++ ++ /* Load the default APN */ ++ if (!self->default_apn && self->sim_id) ++ { ++ NMSettingConnection *connection_setting; ++ NMSettingIPConfig *ip_setting; ++ NMSettingGsm *setting; ++ NMConnection *connection; ++ const gchar *sim_id; ++ ++ connection = NM_CONNECTION (apn->remote_connection); ++ setting = nm_connection_get_setting_gsm (connection); ++ connection_setting = nm_connection_get_setting_connection (connection); ++ sim_id = nm_setting_gsm_get_sim_id (setting); ++ ++ if (sim_id && *sim_id && g_str_equal (sim_id, self->sim_id)) ++ { ++ self->default_apn = apn; ++ self->home_only = nm_setting_gsm_get_home_only (setting); ++ self->data_enabled = nm_setting_connection_get_autoconnect (connection_setting); ++ ++ /* If any of the APN has a high priority, the device have high priority */ ++ ip_setting = nm_connection_get_setting_ip4_config (connection); ++ if (nm_setting_ip_config_get_route_metric (ip_setting) == CC_WWAN_ROUTE_PRIORITY_HIGH) ++ self->priority = CC_WWAN_APN_PRIORITY_HIGH; ++ } ++ } ++ } ++ } ++} ++ ++static void ++wwan_device_state_changed_cb (CcWwanData *self) ++{ ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ENABLED]); ++} ++ ++static void ++cc_wwan_data_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ CcWwanData *self = (CcWwanData *)object; ++ ++ switch (prop_id) ++ { ++ case PROP_ERROR: ++ g_value_set_boolean (value, self->error != NULL); ++ break; ++ ++ case PROP_ENABLED: ++ g_value_set_boolean (value, cc_wwan_data_get_enabled (self)); ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++cc_wwan_data_dispose (GObject *object) ++{ ++ CcWwanData *self = (CcWwanData *)object; ++ ++ g_clear_pointer (&self->sim_id, g_free); ++ g_clear_pointer (&self->operator_code, g_free); ++ g_clear_error (&self->error); ++ g_clear_object (&self->apn_list); ++ g_clear_object (&self->modem); ++ g_clear_object (&self->mm_object); ++ g_clear_object (&self->nm_client); ++ g_clear_object (&self->active_connection); ++ g_clear_object (&self->apn_db); ++ ++ G_OBJECT_CLASS (cc_wwan_data_parent_class)->dispose (object); ++} ++ ++static void ++cc_wwan_data_class_init (CcWwanDataClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->get_property = cc_wwan_data_get_property; ++ object_class->dispose = cc_wwan_data_dispose; ++ ++ properties[PROP_ERROR] = ++ g_param_spec_boolean ("error", ++ "Error", ++ "Set if some Error occurs", ++ FALSE, ++ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); ++ ++ properties[PROP_ENABLED] = ++ g_param_spec_boolean ("enabled", ++ "Enabled", ++ "Get if the data is enabled", ++ FALSE, ++ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); ++ ++ g_object_class_install_properties (object_class, N_PROPS, properties); ++} ++ ++static void ++cc_wwan_data_init (CcWwanData *self) ++{ ++ self->home_only = TRUE; ++ self->priority = CC_WWAN_APN_PRIORITY_LOW; ++} ++ ++/** ++ * cc_wwan_data_new: ++ * @mm_object: An #MMObject ++ * @nm_client: An #NMClient ++ * ++ * Create a new device data representing the given ++ * @mm_object. If @mm_object isn’t a 3G/CDMA/LTE ++ * modem, %NULL will be returned ++ * ++ * Returns: A #CcWwanData or %NULL. ++ */ ++CcWwanData * ++cc_wwan_data_new (MMObject *mm_object, ++ NMClient *nm_client) ++{ ++ CcWwanData *self; ++ NMDevice *nm_device = NULL; ++ g_autoptr(MMModem) modem = NULL; ++ NMDeviceModemCapabilities capabilities = 0; ++ ++ g_return_val_if_fail (MM_IS_OBJECT (mm_object), NULL); ++ g_return_val_if_fail (NM_CLIENT (nm_client), NULL); ++ ++ modem = mm_object_get_modem (mm_object); ++ ++ if (modem) ++ nm_device = nm_client_get_device_by_iface (nm_client, ++ mm_modem_get_primary_port (modem)); ++ ++ if (NM_IS_DEVICE_MODEM (nm_device)) ++ capabilities = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (nm_device)); ++ ++ if (!(capabilities & (NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS ++ | NM_DEVICE_MODEM_CAPABILITY_LTE))) ++ return NULL; ++ ++ self = g_object_new (CC_TYPE_WWAN_DATA, NULL); ++ ++ self->nm_client = g_object_ref (nm_client); ++ self->mm_object = g_object_ref (mm_object); ++ self->modem = g_steal_pointer (&modem); ++ self->sim = mm_modem_get_sim_sync (self->modem, NULL, NULL); ++ self->sim_id = mm_sim_dup_identifier (self->sim); ++ self->operator_code = mm_sim_dup_operator_identifier (self->sim); ++ self->nm_device = g_object_ref (nm_device); ++ self->active_connection = nm_device_get_active_connection (nm_device); ++ ++ if (!self->operator_code) ++ { ++ MMModem3gpp *modem_3gpp; ++ ++ modem_3gpp = mm_object_peek_modem_3gpp (mm_object); ++ if (modem_3gpp) ++ self->operator_code = mm_modem_3gpp_dup_operator_code (modem_3gpp); ++ } ++ ++ if (self->active_connection) ++ g_object_ref (self->active_connection); ++ ++ g_signal_connect_object (self->nm_device, "notify::state", ++ G_CALLBACK (wwan_device_state_changed_cb), ++ self, G_CONNECT_SWAPPED); ++ ++ wwan_data_update_apn_list (self); ++ wwan_data_update_apn_list_db (self); ++ ++ return self; ++} ++ ++GError * ++cc_wwan_data_get_error (CcWwanData *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DATA (self), NULL); ++ ++ return self->error; ++} ++ ++const gchar * ++cc_wwan_data_get_simple_html_error (CcWwanData *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DATA (self), NULL); ++ ++ if (!self->error) ++ return NULL; ++ ++ if (g_error_matches (self->error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ return _("Operation Cancelled"); ++ ++ if (g_error_matches (self->error, G_DBUS_ERROR, G_DBUS_ERROR_ACCESS_DENIED)) ++ return _("Error: Access denied changing settings"); ++ ++ if (self->error->domain == MM_MOBILE_EQUIPMENT_ERROR) ++ return _("Error: Mobile Equipment Error"); ++ ++ return NULL; ++} ++ ++GListModel * ++cc_wwan_data_get_apn_list (CcWwanData *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DATA (self), NULL); ++ ++ if (!self->apn_list) ++ wwan_data_update_apn_list (self); ++ ++ return G_LIST_MODEL (self->apn_list); ++} ++ ++static gboolean ++wwan_data_apn_is_new (CcWwanDataApn *apn) ++{ ++ return apn->remote_connection == NULL; ++} ++ ++static void ++wwan_data_update_apn (CcWwanData *self, ++ CcWwanDataApn *apn, ++ NMConnection *connection) ++{ ++ NMSetting *setting; ++ const gchar *name, *username, *password, *apn_name; ++ gint dns_priority, route_metric; ++ ++ setting = NM_SETTING (nm_connection_get_setting_connection (connection)); ++ ++ g_object_set (setting, ++ NM_SETTING_CONNECTION_AUTOCONNECT, self->data_enabled, ++ NULL); ++ ++ setting = NM_SETTING (nm_connection_get_setting_gsm (connection)); ++ ++ g_object_set (setting, ++ NM_SETTING_GSM_HOME_ONLY, self->home_only, ++ NULL); ++ ++ setting = NM_SETTING (nm_connection_get_setting_ip4_config (connection)); ++ if (self->priority == CC_WWAN_APN_PRIORITY_HIGH && ++ self->default_apn == apn) ++ { ++ dns_priority = CC_WWAN_DNS_PRIORITY_HIGH; ++ route_metric = CC_WWAN_ROUTE_PRIORITY_HIGH; ++ } ++ else ++ { ++ dns_priority = CC_WWAN_DNS_PRIORITY_LOW; ++ route_metric = CC_WWAN_ROUTE_PRIORITY_LOW; ++ } ++ ++ g_object_set (setting, ++ NM_SETTING_IP_CONFIG_DNS_PRIORITY, dns_priority, ++ NM_SETTING_IP_CONFIG_ROUTE_METRIC, (gint64)route_metric, ++ NULL); ++ ++ if (apn->access_method && !apn->remote_connection) ++ { ++ name = nma_mobile_access_method_get_name (apn->access_method); ++ username = nma_mobile_access_method_get_username (apn->access_method); ++ password = nma_mobile_access_method_get_password (apn->access_method); ++ apn_name = nma_mobile_access_method_get_3gpp_apn (apn->access_method); ++ } ++ else ++ { ++ return; ++ } ++ ++ setting = NM_SETTING (nm_connection_get_setting_gsm (connection)); ++ g_object_set (setting, ++ NM_SETTING_GSM_USERNAME, username, ++ NM_SETTING_GSM_PASSWORD, password, ++ NM_SETTING_GSM_APN, apn_name, ++ NULL); ++ ++ setting = NM_SETTING (nm_connection_get_setting_connection (connection)); ++ ++ g_object_set (setting, ++ NM_SETTING_CONNECTION_ID, name, ++ NULL); ++} ++ ++static gint ++wwan_data_get_apn_index (CcWwanData *self, ++ CcWwanDataApn *apn) ++{ ++ GListModel *model; ++ guint i, n_items; ++ ++ model = G_LIST_MODEL (self->apn_list); ++ n_items = g_list_model_get_n_items (model); ++ ++ for (i = 0; i < n_items; i++) ++ { ++ g_autoptr(CcWwanDataApn) cached_apn = NULL; ++ ++ cached_apn = g_list_model_get_item (model, i); ++ ++ if (apn == cached_apn) ++ return i; ++ } ++ ++ return -1; ++} ++ ++static void ++cc_wwan_data_connection_updated_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ CcWwanData *self; ++ CcWwanDataApn *apn; ++ g_autoptr(GTask) task = user_data; ++ g_autoptr(GError) error = NULL; ++ ++ self = g_task_get_source_object (G_TASK (task)); ++ apn = g_task_get_task_data (G_TASK (task)); ++ ++ nm_remote_connection_commit_changes_finish (apn->remote_connection, ++ result, &error); ++ if (!error) ++ { ++ guint apn_index; ++ apn_index = wwan_data_get_apn_index (self, apn); ++ ++ if (apn_index >= 0) ++ g_list_model_items_changed (G_LIST_MODEL (self->apn_list), ++ apn_index, 1, 1); ++ else ++ g_warning ("APN ‘%s’ not in APN list", ++ cc_wwan_data_apn_get_name (apn)); ++ ++ apn->modified = FALSE; ++ g_task_return_boolean (task, TRUE); ++ } ++ else ++ { ++ g_task_return_error (task, g_steal_pointer (&error)); ++ } ++} ++ ++static void ++cc_wwan_data_new_connection_added_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ CcWwanData *self; ++ CcWwanDataApn *apn; ++ g_autoptr(GTask) task = user_data; ++ g_autoptr(GError) error = NULL; ++ ++ self = g_task_get_source_object (G_TASK (task)); ++ apn = g_task_get_task_data (G_TASK (task)); ++ apn->remote_connection = nm_client_add_connection_finish (self->nm_client, ++ result, &error); ++ if (!error) ++ { ++ apn->modified = FALSE; ++ ++ /* If APN has access method, it’s already on the list */ ++ if (!apn->access_method) ++ { ++ g_list_store_append (self->apn_list, apn); ++ g_object_unref (apn); ++ } ++ ++ g_task_return_pointer (task, apn, NULL); ++ } ++ else ++ { ++ g_task_return_error (task, g_steal_pointer (&error)); ++ } ++} ++ ++void ++cc_wwan_data_save_apn (CcWwanData *self, ++ CcWwanDataApn *apn, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data) ++{ ++ NMConnection *connection = NULL; ++ g_autoptr(GTask) task = NULL; ++ ++ g_return_if_fail (CC_IS_WWAN_DATA (self)); ++ g_return_if_fail (CC_IS_WWAN_DATA_APN (apn)); ++ g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable)); ++ ++ task = g_task_new (self, cancellable, callback, user_data); ++ g_task_set_task_data (task, apn, NULL); ++ ++ connection = wwan_data_get_nm_connection (apn); ++ ++ /* If the item has a remote connection, it should already be saved. ++ * We should save it again only if it got modified */ ++ if (apn->remote_connection && !apn->modified) ++ { ++ g_task_return_pointer (task, apn, NULL); ++ return; ++ } ++ ++ wwan_data_update_apn (self, apn, connection); ++ if (wwan_data_apn_is_new (apn)) ++ { ++ nm_client_add_connection_async (self->nm_client, apn->nm_connection, ++ TRUE, cancellable, ++ cc_wwan_data_new_connection_added_cb, ++ g_steal_pointer (&task)); ++ } ++ else ++ { ++ nm_remote_connection_commit_changes_async (apn->remote_connection, TRUE, ++ cancellable, ++ cc_wwan_data_connection_updated_cb, ++ g_steal_pointer (&task)); ++ } ++} ++ ++CcWwanDataApn * ++cc_wwan_data_save_apn_finish (CcWwanData *self, ++ GAsyncResult *result, ++ GError **error) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DATA (self), NULL); ++ g_return_val_if_fail (G_IS_TASK (result), NULL); ++ ++ return g_task_propagate_pointer (G_TASK (result), error); ++} ++ ++static void ++cc_wwan_data_activated_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ CcWwanData *self; ++ NMActiveConnection *connection; ++ g_autoptr(GTask) task = user_data; ++ g_autoptr(GError) error = NULL; ++ ++ self = g_task_get_source_object (G_TASK (task)); ++ connection = nm_client_activate_connection_finish (self->nm_client, ++ result, &error); ++ if (connection) ++ { ++ g_set_object (&self->active_connection, connection); ++ g_task_return_boolean (task, TRUE); ++ } ++ else ++ { ++ g_task_return_error (task, g_steal_pointer (&error)); ++ } ++ ++ if (error) ++ g_warning ("Error: %s", error->message); ++} ++ ++static void ++cc_wwan_data_settings_saved_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ CcWwanData *self; ++ GCancellable *cancellable; ++ g_autoptr(GTask) task = user_data; ++ g_autoptr(GError) error = NULL; ++ ++ self = g_task_get_source_object (G_TASK (task)); ++ cancellable = g_task_get_cancellable (G_TASK (task)); ++ ++ if (!cc_wwan_data_save_apn_finish (self, result, &error)) ++ { ++ g_task_return_error (task, g_steal_pointer (&error)); ++ return; ++ } ++ ++ self->default_apn->modified = FALSE; ++ ++ if (self->data_enabled) ++ { ++ nm_client_activate_connection_async (self->nm_client, ++ NM_CONNECTION (self->default_apn->remote_connection), ++ self->nm_device, ++ NULL, cancellable, ++ cc_wwan_data_activated_cb, ++ g_steal_pointer (&task)); ++ } ++ else ++ { ++ if (nm_device_disconnect (self->nm_device, cancellable, &error)) ++ { ++ g_clear_object (&self->active_connection); ++ g_task_return_boolean (task, TRUE); ++ } ++ else ++ { ++ g_task_return_error (task, g_steal_pointer (&error)); ++ } ++ } ++} ++ ++/** ++ * cc_wwan_data_save_settings: ++ * @cancellable: (nullable): a #GCancellable or %NULL ++ * @callback: a #GAsyncReadyCallback, or %NULL ++ * @user_data: closure data for @callback ++ * ++ * Save default settings to disk and apply changes. ++ * If the default APN has data enabled, the data is ++ * activated after the settings are saved. ++ * ++ * It’s a programmer error to call this function without ++ * a default APN set. ++ * Finish with cc_wwan_data_save_settings_finish(). ++ */ ++void ++cc_wwan_data_save_settings (CcWwanData *self, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data) ++{ ++ NMConnection *connection; ++ NMSetting *setting; ++ g_autoptr(GTask) task = NULL; ++ ++ g_return_if_fail (CC_IS_WWAN_DATA (self)); ++ g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable)); ++ g_return_if_fail (self->default_apn != NULL); ++ ++ task = g_task_new (self, cancellable, callback, user_data); ++ ++ /* Reset old settings to default value */ ++ if (self->old_default_apn && self->old_default_apn->remote_connection) ++ { ++ connection = NM_CONNECTION (self->old_default_apn->remote_connection); ++ ++ setting = NM_SETTING (nm_connection_get_setting_gsm (connection)); ++ g_object_set (G_OBJECT (setting), ++ NM_SETTING_GSM_HOME_ONLY, TRUE, ++ NM_SETTING_GSM_SIM_ID, NULL, ++ NULL); ++ ++ setting = NM_SETTING (nm_connection_get_setting_ip4_config (connection)); ++ g_object_set (setting, ++ NM_SETTING_IP_CONFIG_DNS_PRIORITY, CC_WWAN_DNS_PRIORITY_LOW, ++ NM_SETTING_IP_CONFIG_ROUTE_METRIC, (gint64)CC_WWAN_ROUTE_PRIORITY_LOW, ++ NULL); ++ ++ setting = NM_SETTING (nm_connection_get_setting_connection (connection)); ++ g_object_set (G_OBJECT (setting), ++ NM_SETTING_CONNECTION_AUTOCONNECT, FALSE, ++ NULL); ++ ++ nm_remote_connection_commit_changes (NM_REMOTE_CONNECTION (connection), ++ TRUE, cancellable, NULL); ++ self->old_default_apn->modified = FALSE; ++ self->old_default_apn = NULL; ++ } ++ ++ self->default_apn->modified = TRUE; ++ connection = wwan_data_get_nm_connection (self->default_apn); ++ ++ setting = NM_SETTING (nm_connection_get_setting_gsm (connection)); ++ g_object_set (G_OBJECT (setting), ++ NM_SETTING_GSM_HOME_ONLY, self->home_only, ++ NM_SETTING_GSM_SIM_ID, self->sim_id, ++ NULL); ++ ++ cc_wwan_data_save_apn (self, self->default_apn, cancellable, ++ cc_wwan_data_settings_saved_cb, ++ g_steal_pointer (&task)); ++} ++ ++gboolean ++cc_wwan_data_save_settings_finish (CcWwanData *self, ++ GAsyncResult *result, ++ GError **error) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DATA (self), FALSE); ++ g_return_val_if_fail (G_IS_TASK (result), FALSE); ++ ++ return g_task_propagate_boolean (G_TASK (result), error); ++} ++ ++gboolean ++cc_wwan_data_delete_apn (CcWwanData *self, ++ CcWwanDataApn *apn, ++ GCancellable *cancellable, ++ GError **error) ++{ ++ NMRemoteConnection *connection = NULL; ++ gboolean ret = FALSE; ++ gint apn_index; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DATA (self), FALSE); ++ g_return_val_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable), FALSE); ++ g_return_val_if_fail (CC_IS_WWAN_DATA_APN (apn), FALSE); ++ g_return_val_if_fail (error != NULL, FALSE); ++ ++ apn_index = wwan_data_get_apn_index (self, apn); ++ if (apn_index == -1) ++ { ++ g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, ++ "APN not found for the connection"); ++ return FALSE; ++ } ++ ++ connection = g_steal_pointer (&apn->remote_connection); ++ wwan_data_apn_reset (apn); ++ ++ if (connection) ++ ret = nm_remote_connection_delete (connection, cancellable, error); ++ ++ if (!ret) ++ { ++ apn->remote_connection = connection; ++ *error = g_error_new (G_IO_ERROR, G_IO_ERROR_FAILED, ++ "Deleting APN from NetworkManager failed"); ++ return ret; ++ } ++ ++ g_object_unref (connection); ++ ++ /* We remove the item only if it's not in the mobile provider database */ ++ if (!apn->access_method) ++ { ++ if (self->default_apn == apn) ++ self->default_apn = NULL; ++ ++ g_list_store_remove (self->apn_list, apn_index); ++ ++ return TRUE; ++ } ++ ++ *error = g_error_new (G_IO_ERROR, G_IO_ERROR_READ_ONLY, ++ "Deleting APN from NetworkManager failed"); ++ return FALSE; ++} ++ ++CcWwanDataApn * ++cc_wwan_data_get_default_apn (CcWwanData *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DATA (self), NULL); ++ ++ return self->default_apn; ++} ++ ++gboolean ++cc_wwan_data_set_default_apn (CcWwanData *self, ++ CcWwanDataApn *apn) ++{ ++ NMConnection *connection; ++ NMSetting *setting; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DATA (self), FALSE); ++ g_return_val_if_fail (CC_IS_WWAN_DATA_APN (apn), FALSE); ++ g_return_val_if_fail (self->sim_id != NULL, FALSE); ++ ++ if (self->default_apn == apn) ++ return FALSE; ++ ++ /* ++ * APNs are bound to the SIM, not the modem device. ++ * This will let the APN work if the same SIM inserted ++ * in a different device, and not enable data if a ++ * different SIM is inserted to the modem. ++ */ ++ apn->modified = TRUE; ++ self->old_default_apn = self->default_apn; ++ self->default_apn = apn; ++ connection = wwan_data_get_nm_connection (apn); ++ setting = NM_SETTING (nm_connection_get_setting_gsm (connection)); ++ g_object_set (G_OBJECT (setting), ++ NM_SETTING_GSM_SIM_ID, self->sim_id, NULL); ++ ++ return TRUE; ++} ++ ++gboolean ++cc_wwan_data_get_enabled (CcWwanData *self) ++{ ++ NMSettingConnection *setting; ++ NMConnection *connection; ++ NMDeviceState state; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DATA (self), FALSE); ++ ++ state = nm_device_get_state (self->nm_device); ++ ++ if (state == NM_DEVICE_STATE_DISCONNECTED || ++ state == NM_DEVICE_STATE_DEACTIVATING) ++ if (nm_device_get_state_reason (self->nm_device) == NM_DEVICE_STATE_REASON_USER_REQUESTED) ++ return FALSE; ++ ++ if (nm_device_get_active_connection (self->nm_device) != NULL) ++ return TRUE; ++ ++ if (!self->default_apn || !self->default_apn->remote_connection) ++ return FALSE; ++ ++ connection = NM_CONNECTION (self->default_apn->remote_connection); ++ setting = nm_connection_get_setting_connection (connection); ++ ++ return nm_setting_connection_get_autoconnect (setting); ++} ++ ++/** ++ * cc_wwan_data_set_enabled: ++ * @self: A #CcWwanData ++ * @enable_data: whether to enable data ++ * ++ * Enable data for the device. The settings is ++ * saved to disk only after a default APN is set. ++ * ++ * If the data is enabled, the device will automatically ++ * turn data on everytime the same SIM is available. ++ * The data set is bound to the SIM, not the modem device. ++ * ++ * Use @cc_wwan_data_save_apn() with the default APN ++ * to save the changes and really enable/disable data. ++ */ ++void ++cc_wwan_data_set_enabled (CcWwanData *self, ++ gboolean enable_data) ++{ ++ g_return_if_fail (CC_IS_WWAN_DATA (self)); ++ ++ self->data_enabled = !!enable_data; ++ ++ if (self->default_apn) ++ self->default_apn->modified = TRUE; ++} ++ ++gboolean ++cc_wwan_data_get_roaming_enabled (CcWwanData *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DATA (self), FALSE); ++ ++ if (!self->default_apn) ++ return FALSE; ++ ++ return !self->home_only; ++} ++ ++/** ++ * cc_wwan_data_apn_set_roaming_enabled: ++ * @self: A #CcWwanData ++ * @enable_roaming: whether to enable roaming or not ++ * ++ * Enable roaming for the device. The settings is ++ * saved to disk only after a default APN is set. ++ * ++ * Use @cc_wwan_data_save_apn() with the default APN ++ * to save the changes and really enable/disable data. ++ */ ++void ++cc_wwan_data_set_roaming_enabled (CcWwanData *self, ++ gboolean enable_roaming) ++{ ++ g_return_if_fail (CC_IS_WWAN_DATA (self)); ++ ++ self->home_only = !enable_roaming; ++ ++ if (self->default_apn) ++ self->default_apn->modified = TRUE; ++} ++ ++static void ++cc_wwan_data_apn_finalize (GObject *object) ++{ ++ CcWwanDataApn *apn = CC_WWAN_DATA_APN (object); ++ ++ wwan_data_apn_reset (apn); ++ g_clear_pointer (&apn->access_method, ++ nma_mobile_access_method_unref); ++ ++ G_OBJECT_CLASS (cc_wwan_data_parent_class)->finalize (object); ++} ++ ++static void ++cc_wwan_data_apn_class_init (CcWwanDataApnClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->finalize = cc_wwan_data_apn_finalize; ++} ++ ++static void ++cc_wwan_data_apn_init (CcWwanDataApn *apn) ++{ ++} ++ ++CcWwanDataApn * ++cc_wwan_data_apn_new (void) ++{ ++ return g_object_new (CC_TYPE_WWAN_DATA_APN, NULL); ++} ++ ++/** ++ * cc_wwan_data_apn_get_name: ++ * @apn: A #CcWwanDataApn ++ * ++ * Get the Name of @apn ++ * ++ * Returns: (transfer none): The Name of @apn ++ */ ++const gchar * ++cc_wwan_data_apn_get_name (CcWwanDataApn *apn) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DATA_APN (apn), ""); ++ ++ if (apn->remote_connection) ++ return nm_connection_get_id (NM_CONNECTION (apn->remote_connection)); ++ ++ if (apn->access_method) ++ return nma_mobile_access_method_get_name (apn->access_method); ++ ++ return ""; ++} ++ ++/** ++ * cc_wwan_data_apn_set_name: ++ * @apn: A #CcWwanDataApn ++ * @name: The name to be given for APN, should not ++ * be empty ++ * ++ * Set the name of @apn to be @name. ++ * ++ * @apn is only modified, use @cc_wwan_data_save_apn() ++ * to save the changes. ++ */ ++void ++cc_wwan_data_apn_set_name (CcWwanDataApn *apn, ++ const gchar *name) ++{ ++ NMConnection *connection; ++ NMSettingConnection *setting; ++ ++ g_return_if_fail (CC_IS_WWAN_DATA_APN (apn)); ++ g_return_if_fail (name != NULL); ++ g_return_if_fail (*name != '\0'); ++ ++ if (g_str_equal (cc_wwan_data_apn_get_name (apn), name)) ++ return; ++ ++ apn->modified = TRUE; ++ connection = wwan_data_get_nm_connection (apn); ++ setting = nm_connection_get_setting_connection (connection); ++ g_object_set (G_OBJECT (setting), ++ NM_SETTING_CONNECTION_ID, name, ++ NULL); ++} ++ ++/** ++ * cc_wwan_data_apn_get_apn: ++ * @apn: A #CcWwanDataApn ++ * ++ * Get the APN of @apn ++ * ++ * Returns: (transfer none): The APN of @apn ++ */ ++const gchar * ++cc_wwan_data_apn_get_apn (CcWwanDataApn *apn) ++{ ++ const gchar *apn_name = ""; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DATA_APN (apn), ""); ++ ++ if (apn->remote_connection) ++ { ++ NMSettingGsm *setting; ++ ++ setting = nm_connection_get_setting_gsm (NM_CONNECTION (apn->remote_connection)); ++ apn_name = nm_setting_gsm_get_apn (setting); ++ } ++ else if (apn->access_method) ++ { ++ apn_name = nma_mobile_access_method_get_3gpp_apn (apn->access_method); ++ } ++ ++ return apn_name ? apn_name : ""; ++} ++ ++/** ++ * cc_wwan_data_apn_set_apn: ++ * @apn: A #CcWwanDataApn ++ * @apn_name: The apn to be used, should not be ++ * empty ++ * ++ * Set the APN of @apn to @apn_name. @apn_name is ++ * usually a URL like “example.com” or a simple string ++ * like “internet” ++ * ++ * @apn is only modified, use @cc_wwan_data_save_apn() ++ * to save the changes. ++ */ ++void ++cc_wwan_data_apn_set_apn (CcWwanDataApn *apn, ++ const gchar *apn_name) ++{ ++ NMConnection *connection; ++ NMSettingGsm *setting; ++ ++ g_return_if_fail (CC_IS_WWAN_DATA_APN (apn)); ++ g_return_if_fail (apn_name != NULL); ++ g_return_if_fail (*apn_name != '\0'); ++ ++ if (g_str_equal (cc_wwan_data_apn_get_apn (apn), apn_name)) ++ return; ++ ++ apn->modified = TRUE; ++ connection = wwan_data_get_nm_connection (apn); ++ setting = nm_connection_get_setting_gsm (connection); ++ g_object_set (G_OBJECT (setting), ++ NM_SETTING_GSM_APN, apn_name, ++ NULL); ++} ++ ++/** ++ * cc_wwan_data_apn_get_username: ++ * @apn: A #CcWwanDataApn ++ * ++ * Get the Username of @apn ++ * ++ * Returns: (transfer none): The Username of @apn ++ */ ++const gchar * ++cc_wwan_data_apn_get_username (CcWwanDataApn *apn) ++{ ++ const gchar *username = ""; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DATA_APN (apn), ""); ++ ++ if (apn->remote_connection) ++ { ++ NMSettingGsm *setting; ++ ++ setting = nm_connection_get_setting_gsm (NM_CONNECTION (apn->remote_connection)); ++ username = nm_setting_gsm_get_username (setting); ++ } ++ else if (apn->access_method) ++ { ++ username = nma_mobile_access_method_get_username (apn->access_method); ++ } ++ ++ return username ? username : ""; ++} ++ ++/** ++ * cc_wwan_data_apn_set_username: ++ * @apn: A #CcWwanDataAPN ++ * @username: The username to be used ++ * ++ * Set the Username of @apn to @username. ++ * ++ * @apn is only modified, use @cc_wwan_data_save_apn() ++ * to save the changes. ++ */ ++void ++cc_wwan_data_apn_set_username (CcWwanDataApn *apn, ++ const gchar *username) ++{ ++ NMConnection *connection; ++ NMSettingGsm *setting; ++ ++ g_return_if_fail (CC_IS_WWAN_DATA_APN (apn)); ++ ++ if (username && !*username) ++ username = NULL; ++ ++ if (g_strcmp0 (cc_wwan_data_apn_get_username (apn), username) == 0) ++ return; ++ ++ apn->modified = TRUE; ++ connection = wwan_data_get_nm_connection (apn); ++ setting = nm_connection_get_setting_gsm (connection); ++ g_object_set (G_OBJECT (setting), ++ NM_SETTING_GSM_USERNAME, username, ++ NULL); ++} ++ ++/** ++ * cc_wwan_data_apn_get_password: ++ * @apn: A #CcWwanDataApn ++ * ++ * Get the Password of @apn ++ * ++ * Returns: (transfer none): The Password of @apn ++ */ ++const gchar * ++cc_wwan_data_apn_get_password (CcWwanDataApn *apn) ++{ ++ const gchar *password = ""; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DATA_APN (apn), ""); ++ ++ if (NM_IS_REMOTE_CONNECTION (apn->remote_connection)) ++ { ++ g_autoptr(GVariant) secrets = NULL; ++ g_autoptr(GError) error = NULL; ++ ++ secrets = nm_remote_connection_get_secrets (NM_REMOTE_CONNECTION (apn->remote_connection), ++ "gsm", NULL, &error); ++ ++ if (!error) ++ nm_connection_update_secrets (NM_CONNECTION (apn->remote_connection), ++ "gsm", secrets, &error); ++ ++ if (error) ++ { ++ g_warning ("Error: %s", error->message); ++ return ""; ++ } ++ } ++ ++ if (apn->remote_connection) ++ { ++ NMSettingGsm *setting; ++ ++ setting = nm_connection_get_setting_gsm (NM_CONNECTION (apn->remote_connection)); ++ password = nm_setting_gsm_get_password (setting); ++ } ++ else if (apn->access_method) ++ { ++ password = nma_mobile_access_method_get_password (apn->access_method); ++ } ++ ++ return password ? password : ""; ++ ++ if (apn->remote_connection) ++ nm_connection_clear_secrets (NM_CONNECTION (apn->remote_connection)); ++} ++ ++/** ++ * cc_wwan_data_apn_set_password: ++ * @apn: A #CcWwanDataApn ++ * @password: The password to be used ++ * ++ * Set the Password of @apn to @password. ++ * ++ * @apn is only modified, use @cc_wwan_data_save_apn() ++ * to save the changes. ++ */ ++void ++cc_wwan_data_apn_set_password (CcWwanDataApn *apn, ++ const gchar *password) ++{ ++ NMConnection *connection; ++ NMSettingGsm *setting; ++ ++ g_return_if_fail (CC_IS_WWAN_DATA_APN (apn)); ++ ++ if (password && !*password) ++ password = NULL; ++ ++ if (g_strcmp0 (cc_wwan_data_apn_get_password (apn), password) == 0) ++ return; ++ ++ apn->modified = TRUE; ++ connection = wwan_data_get_nm_connection (apn); ++ setting = nm_connection_get_setting_gsm (connection); ++ g_object_set (G_OBJECT (setting), ++ NM_SETTING_GSM_PASSWORD, password, ++ NULL); ++} ++ ++gint ++cc_wwan_data_get_priority (CcWwanData *self) ++{ ++ CcWwanDataApn *apn; ++ NMSettingIPConfig *setting; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DATA (self), ++ CC_WWAN_APN_PRIORITY_LOW); ++ ++ apn = self->default_apn; ++ ++ if (!apn || !apn->remote_connection) ++ return CC_WWAN_APN_PRIORITY_LOW; ++ ++ setting = nm_connection_get_setting_ip4_config (NM_CONNECTION (apn->remote_connection)); ++ ++ /* Lower the number, higher the priority */ ++ if (nm_setting_ip_config_get_route_metric (setting) <= CC_WWAN_ROUTE_PRIORITY_HIGH) ++ return CC_WWAN_APN_PRIORITY_HIGH; ++ else ++ return CC_WWAN_APN_PRIORITY_LOW; ++} ++ ++void ++cc_wwan_data_set_priority (CcWwanData *self, ++ int priority) ++{ ++ g_return_if_fail (CC_IS_WWAN_DATA (self)); ++ g_return_if_fail (priority == CC_WWAN_APN_PRIORITY_LOW || ++ priority == CC_WWAN_APN_PRIORITY_HIGH); ++ ++ if (self->priority == priority) ++ return; ++ ++ self->priority = priority; ++ ++ if (self->default_apn) ++ self->default_apn->modified = TRUE; ++} +diff --git a/panels/wwan/cc-wwan-data.h b/panels/wwan/cc-wwan-data.h +new file mode 100644 +index 000000000..9572b862d +--- /dev/null ++++ b/panels/wwan/cc-wwan-data.h +@@ -0,0 +1,93 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-data.h ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#pragma once ++ ++#include ++#include ++#include ++ ++G_BEGIN_DECLS ++ ++#define CC_WWAN_APN_PRIORITY_LOW (1) ++#define CC_WWAN_APN_PRIORITY_HIGH (2) ++ ++#define CC_TYPE_WWAN_DATA_APN (cc_wwan_data_apn_get_type()) ++G_DECLARE_FINAL_TYPE (CcWwanDataApn, cc_wwan_data_apn, CC, WWAN_DATA_APN, GObject) ++ ++#define CC_TYPE_WWAN_DATA (cc_wwan_data_get_type()) ++G_DECLARE_FINAL_TYPE (CcWwanData, cc_wwan_data, CC, WWAN_DATA, GObject) ++ ++CcWwanData *cc_wwan_data_new (MMObject *mm_object, ++ NMClient *nm_client); ++GError *cc_wwan_data_get_error (CcWwanData *self); ++const gchar *cc_wwan_data_get_simple_html_error (CcWwanData *self); ++GListModel *cc_wwan_data_get_apn_list (CcWwanData *self); ++void cc_wwan_data_save_apn (CcWwanData *self, ++ CcWwanDataApn *apn, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data); ++CcWwanDataApn *cc_wwan_data_save_apn_finish (CcWwanData *self, ++ GAsyncResult *result, ++ GError **error); ++void cc_wwan_data_save_settings (CcWwanData *self, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data); ++gboolean cc_wwan_data_save_settings_finish (CcWwanData *self, ++ GAsyncResult *result, ++ GError **error); ++gboolean cc_wwan_data_delete_apn (CcWwanData *self, ++ CcWwanDataApn *apn, ++ GCancellable *cancellable, ++ GError **error); ++gboolean cc_wwan_data_set_default_apn (CcWwanData *self, ++ CcWwanDataApn *apn); ++CcWwanDataApn *cc_wwan_data_get_default_apn (CcWwanData *self); ++gboolean cc_wwan_data_get_enabled (CcWwanData *self); ++void cc_wwan_data_set_enabled (CcWwanData *self, ++ gboolean enabled); ++gboolean cc_wwan_data_get_roaming_enabled (CcWwanData *self); ++void cc_wwan_data_set_roaming_enabled (CcWwanData *self, ++ gboolean enable_roaming); ++ ++CcWwanDataApn *cc_wwan_data_apn_new (void); ++const gchar *cc_wwan_data_apn_get_name (CcWwanDataApn *apn); ++void cc_wwan_data_apn_set_name (CcWwanDataApn *apn, ++ const gchar *name); ++const gchar *cc_wwan_data_apn_get_apn (CcWwanDataApn *apn); ++void cc_wwan_data_apn_set_apn (CcWwanDataApn *apn, ++ const gchar *apn_name); ++const gchar *cc_wwan_data_apn_get_username (CcWwanDataApn *apn); ++void cc_wwan_data_apn_set_username (CcWwanDataApn *apn, ++ const gchar *username); ++const gchar *cc_wwan_data_apn_get_password (CcWwanDataApn *apn); ++void cc_wwan_data_apn_set_password (CcWwanDataApn *apn, ++ const gchar *password); ++gint cc_wwan_data_get_priority (CcWwanData *self); ++void cc_wwan_data_set_priority (CcWwanData *self, ++ int priority); ++ ++G_END_DECLS +diff --git a/panels/wwan/cc-wwan-details-dialog.c b/panels/wwan/cc-wwan-details-dialog.c +new file mode 100644 +index 000000000..59e8dc361 +--- /dev/null ++++ b/panels/wwan/cc-wwan-details-dialog.c +@@ -0,0 +1,257 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-network-dialog.c ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#undef G_LOG_DOMAIN ++#define G_LOG_DOMAIN "cc-wwan-details-dialog" ++ ++#include ++#include ++#include ++ ++#include "list-box-helper.h" ++#include "cc-wwan-details-dialog.h" ++#include "cc-wwan-resources.h" ++ ++/** ++ * @short_description: Dialog to Show Device Details ++ */ ++ ++struct _CcWwanDetailsDialog ++{ ++ GtkDialog parent_instance; ++ ++ GtkLabel *device_identifier; ++ GtkLabel *device_model; ++ GtkLabel *firmware_version; ++ GtkLabel *identifier_label; ++ GtkLabel *manufacturer; ++ GtkLabel *network_status; ++ GtkLabel *network_type; ++ GtkLabel *operator_name; ++ GtkLabel *own_numbers; ++ GtkLabel *signal_strength; ++ ++ CcWwanDevice *device; ++}; ++ ++G_DEFINE_TYPE (CcWwanDetailsDialog, cc_wwan_details_dialog, GTK_TYPE_DIALOG) ++ ++ ++enum { ++ PROP_0, ++ PROP_DEVICE, ++ N_PROPS ++}; ++ ++static GParamSpec *properties[N_PROPS]; ++ ++static void ++cc_wwan_details_update_network_status (CcWwanDetailsDialog *self) ++{ ++ CcWwanState state; ++ ++ g_assert (CC_IS_WWAN_DETAILS_DIALOG (self)); ++ ++ state = cc_wwan_device_get_network_state (self->device); ++ ++ switch (state) ++ { ++ case CC_WWAN_REGISTRATION_STATE_IDLE: ++ gtk_label_set_label (self->network_status, _("Not Registered")); ++ break; ++ ++ case CC_WWAN_REGISTRATION_STATE_REGISTERED: ++ gtk_label_set_label (self->network_status, _("Registered")); ++ break; ++ ++ case CC_WWAN_REGISTRATION_STATE_ROAMING: ++ gtk_label_set_label (self->network_status, _("Roaming")); ++ break; ++ ++ case CC_WWAN_REGISTRATION_STATE_SEARCHING: ++ gtk_label_set_label (self->network_status, _("Searching")); ++ break; ++ ++ case CC_WWAN_REGISTRATION_STATE_DENIED: ++ gtk_label_set_label (self->network_status, _("Denied")); ++ break; ++ ++ default: ++ gtk_label_set_label (self->network_status, _("Unknown")); ++ break; ++ } ++} ++ ++static void ++cc_wwan_details_signal_changed_cb (CcWwanDetailsDialog *self) ++{ ++ g_autofree gchar *network_type_string = NULL; ++ g_autofree gchar *signal_string = NULL; ++ const gchar *operator_name; ++ ++ g_assert (CC_IS_WWAN_DETAILS_DIALOG (self)); ++ ++ operator_name = cc_wwan_device_get_operator_name (self->device); ++ if (operator_name) ++ gtk_label_set_label (self->operator_name, operator_name); ++ ++ network_type_string = cc_wwan_device_dup_network_type_string (self->device); ++ if (network_type_string) ++ gtk_label_set_label (self->network_type, network_type_string); ++ ++ signal_string = cc_wwan_device_dup_signal_string (self->device); ++ if (signal_string) ++ gtk_label_set_label (self->signal_strength, signal_string); ++ ++ cc_wwan_details_update_network_status (self); ++} ++ ++static void ++cc_wwan_details_update_hardware_details (CcWwanDetailsDialog *self) ++{ ++ const gchar *str; ++ ++ g_assert (CC_IS_WWAN_DETAILS_DIALOG (self)); ++ ++ str = cc_wwan_device_get_manufacturer (self->device); ++ if (str) ++ gtk_label_set_label (self->manufacturer, str); ++ ++ str = cc_wwan_device_get_model (self->device); ++ if (str) ++ gtk_label_set_label (self->device_model, str); ++ ++ str = cc_wwan_device_get_firmware_version (self->device); ++ if (str) ++ gtk_label_set_label (self->firmware_version, str); ++ ++ str = cc_wwan_device_get_identifier (self->device); ++ if (str) ++ gtk_label_set_label (self->device_identifier, str); ++} ++ ++static void ++cc_wwan_details_dialog_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ CcWwanDetailsDialog *self = CC_WWAN_DETAILS_DIALOG (object); ++ ++ switch (prop_id) ++ { ++ case PROP_DEVICE: ++ self->device = g_value_dup_object (value); ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++cc_wwan_details_dialog_constructed (GObject *object) ++{ ++ CcWwanDetailsDialog *self = CC_WWAN_DETAILS_DIALOG (object); ++ g_autofree char *numbers = NULL; ++ ++ G_OBJECT_CLASS (cc_wwan_details_dialog_parent_class)->constructed (object); ++ ++ g_signal_connect_object (self->device, "notify::signal", ++ G_CALLBACK (cc_wwan_details_signal_changed_cb), ++ self, G_CONNECT_SWAPPED); ++ ++ numbers = cc_wwan_device_dup_own_numbers (self->device); ++ gtk_widget_set_visible (GTK_WIDGET (self->own_numbers), !!numbers); ++ ++ if (numbers) ++ gtk_label_set_text (self->own_numbers, numbers); ++ ++ cc_wwan_details_signal_changed_cb (self); ++ cc_wwan_details_update_hardware_details (self); ++} ++ ++static void ++cc_wwan_details_dialog_dispose (GObject *object) ++{ ++ CcWwanDetailsDialog *self = CC_WWAN_DETAILS_DIALOG (object); ++ ++ g_clear_object (&self->device); ++ ++ G_OBJECT_CLASS (cc_wwan_details_dialog_parent_class)->dispose (object); ++} ++ ++static void ++cc_wwan_details_dialog_class_init (CcWwanDetailsDialogClass *klass) ++{ ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->set_property = cc_wwan_details_dialog_set_property; ++ object_class->constructed = cc_wwan_details_dialog_constructed; ++ object_class->dispose = cc_wwan_details_dialog_dispose; ++ ++ properties[PROP_DEVICE] = ++ g_param_spec_object ("device", ++ "Device", ++ "The WWAN Device", ++ CC_TYPE_WWAN_DEVICE, ++ G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); ++ ++ g_object_class_install_properties (object_class, N_PROPS, properties); ++ ++ gtk_widget_class_set_template_from_resource (widget_class, ++ "/org/gnome/control-center/wwan/cc-wwan-details-dialog.ui"); ++ ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDetailsDialog, device_identifier); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDetailsDialog, device_model); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDetailsDialog, firmware_version); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDetailsDialog, identifier_label); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDetailsDialog, manufacturer); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDetailsDialog, network_status); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDetailsDialog, network_type); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDetailsDialog, operator_name); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDetailsDialog, own_numbers); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDetailsDialog, signal_strength); ++} ++ ++static void ++cc_wwan_details_dialog_init (CcWwanDetailsDialog *self) ++{ ++ gtk_widget_init_template (GTK_WIDGET (self)); ++} ++ ++CcWwanDetailsDialog * ++cc_wwan_details_dialog_new (GtkWindow *parent_window, ++ CcWwanDevice *device) ++{ ++ g_return_val_if_fail (GTK_IS_WINDOW (parent_window), NULL); ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (device), NULL); ++ ++ return g_object_new (CC_TYPE_WWAN_DETAILS_DIALOG, ++ "transient-for", parent_window, ++ "use-header-bar", 1, ++ "device", device, ++ NULL); ++} +diff --git a/panels/wwan/cc-wwan-details-dialog.h b/panels/wwan/cc-wwan-details-dialog.h +new file mode 100644 +index 000000000..7e7812cde +--- /dev/null ++++ b/panels/wwan/cc-wwan-details-dialog.h +@@ -0,0 +1,40 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-details-dialog.h ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#pragma once ++ ++#include ++#include ++ ++#include "cc-wwan-device.h" ++ ++G_BEGIN_DECLS ++ ++#define CC_TYPE_WWAN_DETAILS_DIALOG (cc_wwan_details_dialog_get_type()) ++G_DECLARE_FINAL_TYPE (CcWwanDetailsDialog, cc_wwan_details_dialog, CC, WWAN_DETAILS_DIALOG, GtkDialog) ++ ++CcWwanDetailsDialog *cc_wwan_details_dialog_new (GtkWindow *parent_window, ++ CcWwanDevice *device); ++ ++G_END_DECLS +diff --git a/panels/wwan/cc-wwan-details-dialog.ui b/panels/wwan/cc-wwan-details-dialog.ui +new file mode 100644 +index 000000000..042d3ee33 +--- /dev/null ++++ b/panels/wwan/cc-wwan-details-dialog.ui +@@ -0,0 +1,320 @@ ++ ++ ++ ++ +diff --git a/panels/wwan/cc-wwan-device-page.c b/panels/wwan/cc-wwan-device-page.c +new file mode 100644 +index 000000000..0a04d3379 +--- /dev/null ++++ b/panels/wwan/cc-wwan-device-page.c +@@ -0,0 +1,634 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-device-page.c ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#undef G_LOG_DOMAIN ++#define G_LOG_DOMAIN "cc-wwan-device-page" ++ ++#include ++#include ++#include ++#define GCR_API_SUBJECT_TO_CHANGE ++#include ++ ++#include "list-box-helper.h" ++#include "cc-list-row.h" ++#include "cc-wwan-data.h" ++#include "cc-wwan-mode-dialog.h" ++#include "cc-wwan-network-dialog.h" ++#include "cc-wwan-details-dialog.h" ++#include "cc-wwan-sim-lock-dialog.h" ++#include "cc-wwan-apn-dialog.h" ++#include "cc-wwan-device-page.h" ++#include "cc-wwan-resources.h" ++ ++#include "shell/cc-application.h" ++#include "shell/cc-debug.h" ++#include "shell/cc-object-storage.h" ++ ++/** ++ * @short_description: Device settings page ++ * @include: "cc-wwan-device-page.h" ++ * ++ * The Device page allows users to configure device ++ * settings. Please note that there is no one-to-one ++ * maping for a device settings page and a physical ++ * device. Say, if a device have two SIM card slots, ++ * there should be two device pages, one for each SIM. ++ */ ++ ++struct _CcWwanDevicePage ++{ ++ GtkBox parent_instance; ++ ++ GtkListBox *advanced_settings_list; ++ CcListRow *apn_settings_row; ++ CcListRow *data_enable_row; ++ CcListRow *data_roaming_row; ++ GtkListBox *data_settings_list; ++ CcListRow *details_row; ++ GtkStack *main_stack; ++ CcListRow *network_mode_row; ++ CcListRow *network_name_row; ++ GtkListBox *network_settings_list; ++ CcListRow *sim_lock_row; ++ GtkButton *unlock_button; ++ ++ GtkLabel *notification_label; ++ ++ CcWwanDevice *device; ++ CcWwanData *wwan_data; ++ GDBusProxy *wwan_proxy; ++ ++ CcWwanApnDialog *apn_dialog; ++ CcWwanDetailsDialog *details_dialog; ++ CcWwanModeDialog *network_mode_dialog; ++ CcWwanNetworkDialog *network_dialog; ++ CcWwanSimLockDialog *sim_lock_dialog; ++ ++ gint sim_index; ++ /* Set if a change is triggered in a signal’s callback, ++ * to avoid re-triggering of callback. This is used ++ * instead of blocking handlers where the signal may be ++ * emitted async and the block/unblock may not work right ++ */ ++ gboolean is_self_change; ++ gboolean is_retry; ++}; ++ ++G_DEFINE_TYPE (CcWwanDevicePage, cc_wwan_device_page, GTK_TYPE_BOX) ++ ++enum { ++ PROP_0, ++ PROP_DEVICE, ++ N_PROPS ++}; ++ ++static GParamSpec *properties[N_PROPS]; ++ ++static void ++wwan_data_show_apn_dialog (CcWwanDevicePage *self) ++{ ++ GtkWindow *top_level; ++ ++ top_level = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))); ++ ++ if (!self->apn_dialog) ++ self->apn_dialog = cc_wwan_apn_dialog_new (top_level, self->device); ++ ++ gtk_widget_show (GTK_WIDGET (self->apn_dialog)); ++} ++ ++static GcrPrompt * ++cc_wwan_device_page_new_prompt (CcWwanDevicePage *self, ++ MMModemLock lock) ++{ ++ GcrPrompt *prompt; ++ g_autoptr(GError) error = NULL; ++ g_autofree gchar *description = NULL; ++ g_autofree gchar *warning = NULL; ++ const gchar *message = NULL; ++ guint num; ++ ++ prompt = GCR_PROMPT (gcr_system_prompt_open (-1, NULL, &error)); ++ ++ if (error) ++ { ++ g_warning ("Error opening Prompt: %s", error->message); ++ return NULL; ++ } ++ ++ gcr_prompt_set_title (prompt, _("Unlock SIM card")); ++ gcr_prompt_set_continue_label (prompt, _("Unlock")); ++ gcr_prompt_set_cancel_label (prompt, _("Cancel")); ++ ++ if (lock == MM_MODEM_LOCK_SIM_PIN) ++ { ++ description = g_strdup_printf (_("Please provide PIN code for SIM %d"), self->sim_index); ++ message = _("Enter PIN to unlock your SIM card"); ++ } ++ else if (lock == MM_MODEM_LOCK_SIM_PUK) ++ { ++ description = g_strdup_printf (_("Please provide PUK code for SIM %d"), self->sim_index); ++ message = _("Enter PUK to unlock your SIM card"); ++ } ++ else ++ { ++ g_warn_if_reached (); ++ g_object_unref (prompt); ++ ++ return NULL; ++ } ++ ++ gcr_prompt_set_description (prompt, description); ++ gcr_prompt_set_message (prompt, message); ++ ++ num = cc_wwan_device_get_unlock_retries (self->device, lock); ++ ++ if (num != MM_UNLOCK_RETRIES_UNKNOWN) ++ { ++ if (self->is_retry) ++ warning = g_strdup_printf (ngettext ("Wrong password entered. You have %1$u try left", ++ "Wrong password entered. You have %1$u tries left", num), num); ++ else ++ warning = g_strdup_printf (ngettext ("You have %u try left", ++ "You have %u tries left", num), num); ++ } ++ else if (self->is_retry) ++ { ++ warning = g_strdup (_("Wrong password entered.")); ++ } ++ ++ gcr_prompt_set_warning (prompt, warning); ++ ++ return prompt; ++} ++ ++static void ++wwan_update_unlock_button (CcWwanDevicePage *self) ++{ ++ gtk_button_set_label (self->unlock_button, _("Unlock")); ++ gtk_widget_set_sensitive (GTK_WIDGET (self->unlock_button), TRUE); ++} ++ ++static void ++cc_wwan_device_page_unlocked_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ CcWwanDevicePage *self = user_data; ++ wwan_update_unlock_button (self); ++} ++ ++static void ++wwan_device_unlock_clicked_cb (CcWwanDevicePage *self) ++{ ++ g_autoptr(GError) error = NULL; ++ GcrPrompt *prompt; ++ const gchar *password, *warning; ++ const gchar *pin = ""; ++ const gchar *puk = ""; ++ MMModemLock lock; ++ ++ lock = cc_wwan_device_get_lock (self->device); ++ password = ""; ++ ++ if (lock != MM_MODEM_LOCK_SIM_PIN && ++ lock != MM_MODEM_LOCK_SIM_PUK) ++ g_return_if_reached (); ++ ++ if (lock == MM_MODEM_LOCK_SIM_PUK) ++ { ++ prompt = cc_wwan_device_page_new_prompt (self, lock); ++ ++ warning = _("PUK code should be an 8 digit number"); ++ while (password && !cc_wwan_device_pin_valid (password, lock)) ++ { ++ password = gcr_prompt_password (prompt, NULL, &error); ++ gcr_prompt_set_warning (prompt, warning); ++ } ++ ++ puk = g_strdup (password); ++ password = ""; ++ gcr_prompt_close (prompt); ++ g_object_unref (prompt); ++ ++ if (error) ++ g_warning ("Error: %s", error->message); ++ ++ /* Error or User cancelled PUK */ ++ if (!puk) ++ return; ++ } ++ ++ prompt = cc_wwan_device_page_new_prompt (self, MM_MODEM_LOCK_SIM_PIN); ++ if (lock == MM_MODEM_LOCK_SIM_PUK) ++ { ++ gcr_prompt_set_password_new (prompt, TRUE); ++ gcr_prompt_set_message (prompt, _("Enter New PIN")); ++ gcr_prompt_set_warning (prompt, ""); ++ } ++ ++ warning = _("PIN code should be a 4-8 digit number"); ++ while (password && !cc_wwan_device_pin_valid (password, MM_MODEM_LOCK_SIM_PIN)) ++ { ++ password = gcr_prompt_password (prompt, NULL, &error); ++ gcr_prompt_set_warning (prompt, warning); ++ } ++ ++ pin = g_strdup (password); ++ gcr_prompt_close (prompt); ++ g_object_unref (prompt); ++ ++ if (error) ++ g_warning ("Error: %s", error->message); ++ ++ /* Error or User cancelled PIN */ ++ if (!pin) ++ return; ++ ++ gtk_button_set_label (self->unlock_button, _("Unlocking...")); ++ gtk_widget_set_sensitive (GTK_WIDGET (self->unlock_button), FALSE); ++ ++ if (lock == MM_MODEM_LOCK_SIM_PIN) ++ cc_wwan_device_send_pin (self->device, pin, ++ NULL, /* cancellable */ ++ cc_wwan_device_page_unlocked_cb, ++ self); ++ else if (lock == MM_MODEM_LOCK_SIM_PUK) ++ { ++ cc_wwan_device_send_puk (self->device, puk, pin, ++ NULL, /* Cancellable */ ++ cc_wwan_device_page_unlocked_cb, ++ self); ++ } ++ else ++ { ++ g_warn_if_reached (); ++ } ++} ++ ++static void ++wwan_data_settings_changed_cb (CcWwanDevicePage *self, ++ GParamSpec *pspec, ++ CcListRow *data_row) ++{ ++ gboolean active; ++ ++ if (self->is_self_change) ++ { ++ self->is_self_change = FALSE; ++ return; ++ } ++ ++ if (cc_wwan_data_get_default_apn (self->wwan_data) == NULL) ++ wwan_data_show_apn_dialog (self); ++ ++ /* The user dismissed the dialog for selecting default APN */ ++ if (cc_wwan_data_get_default_apn (self->wwan_data) == NULL) ++ { ++ self->is_self_change = TRUE; ++ gtk_widget_activate (GTK_WIDGET (data_row)); ++ ++ return; ++ } ++ ++ active = cc_list_row_get_active (data_row); ++ ++ if (data_row == self->data_enable_row) ++ cc_wwan_data_set_enabled (self->wwan_data, active); ++ else ++ cc_wwan_data_set_roaming_enabled (self->wwan_data, active); ++ ++ cc_wwan_data_save_settings (self->wwan_data, NULL, NULL, NULL); ++} ++ ++static void ++wwan_network_settings_activated_cb (CcWwanDevicePage *self, ++ CcListRow *row) ++{ ++ GtkWidget *dialog; ++ GtkWindow *top_level; ++ ++ top_level = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))); ++ ++ if (row == self->network_mode_row) ++ { ++ if (!self->network_mode_dialog) ++ self->network_mode_dialog = cc_wwan_mode_dialog_new (top_level, self->device); ++ ++ dialog = GTK_WIDGET (self->network_mode_dialog); ++ } ++ else if (row == self->network_name_row) ++ { ++ if (!self->network_dialog) ++ self->network_dialog = cc_wwan_network_dialog_new (top_level, self->device); ++ ++ dialog = GTK_WIDGET (self->network_dialog); ++ } ++ else ++ { ++ return; ++ } ++ ++ gtk_widget_show (dialog); ++} ++ ++static void ++wwan_advanced_settings_activated_cb (CcWwanDevicePage *self, ++ CcListRow *row) ++{ ++ GtkWindow *top_level; ++ ++ top_level = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))); ++ ++ if (row == self->sim_lock_row) ++ { ++ if (!self->sim_lock_dialog) ++ self->sim_lock_dialog = cc_wwan_sim_lock_dialog_new (top_level, self->device); ++ gtk_widget_show (GTK_WIDGET (self->sim_lock_dialog)); ++ } ++ else if (row == self->details_row) ++ { ++ if (!self->details_dialog) ++ self->details_dialog = cc_wwan_details_dialog_new (top_level, self->device); ++ gtk_widget_show (GTK_WIDGET (self->details_dialog)); ++ } ++ else if (row == self->apn_settings_row) ++ { ++ wwan_data_show_apn_dialog (self); ++ } ++ else ++ { ++ g_return_if_reached (); ++ } ++} ++ ++static void ++cc_wwan_device_page_update_data (CcWwanDevicePage *self) ++{ ++ gboolean has_data; ++ ++ if (self->wwan_data == cc_wwan_device_get_data (self->device)) ++ return; ++ ++ self->wwan_data = cc_wwan_device_get_data (self->device); ++ has_data = self->wwan_data != NULL; ++ ++ gtk_widget_set_sensitive (GTK_WIDGET (self->data_settings_list), has_data); ++ gtk_widget_set_sensitive (GTK_WIDGET (self->apn_settings_row), has_data); ++ ++ if (!has_data) ++ return; ++ ++ g_signal_handlers_block_by_func (self->data_roaming_row, ++ wwan_data_settings_changed_cb, self); ++ g_signal_handlers_block_by_func (self->data_enable_row, ++ wwan_data_settings_changed_cb, self); ++ ++ g_object_set (self->data_roaming_row, "active", ++ cc_wwan_data_get_roaming_enabled (self->wwan_data), NULL); ++ ++ g_object_set (self->data_enable_row, "active", ++ cc_wwan_data_get_enabled (self->wwan_data), NULL); ++ ++ g_signal_handlers_unblock_by_func (self->data_roaming_row, ++ wwan_data_settings_changed_cb, self); ++ g_signal_handlers_unblock_by_func (self->data_enable_row, ++ wwan_data_settings_changed_cb, self); ++} ++ ++static void ++cc_wwan_device_page_update (CcWwanDevicePage *self) ++{ ++ GtkStack *main_stack; ++ MMModemLock lock; ++ ++ main_stack = self->main_stack; ++ if (!cc_wwan_device_has_sim (self->device)) ++ gtk_stack_set_visible_child_name (main_stack, "no-sim-view"); ++ else if ((lock = cc_wwan_device_get_lock (self->device)) == MM_MODEM_LOCK_SIM_PIN || ++ lock == MM_MODEM_LOCK_SIM_PUK) ++ gtk_stack_set_visible_child_name (main_stack, "sim-lock-view"); ++ else ++ gtk_stack_set_visible_child_name (main_stack, "settings-view"); ++} ++ ++static void ++cc_wwan_locks_changed_cb (CcWwanDevicePage *self) ++{ ++ const gchar *label; ++ ++ if (cc_wwan_device_get_sim_lock (self->device)) ++ label = _("Enabled"); ++ else ++ label = _("Disabled"); ++ ++ cc_list_row_set_secondary_label (self->sim_lock_row, label); ++ cc_wwan_device_page_update (self); ++} ++ ++static void ++cc_wwan_device_page_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ CcWwanDevicePage *self = (CcWwanDevicePage *)object; ++ ++ switch (prop_id) ++ { ++ case PROP_DEVICE: ++ self->device = g_value_dup_object (value); ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++cc_wwan_device_page_constructed (GObject *object) ++{ ++ CcWwanDevicePage *self = (CcWwanDevicePage *)object; ++ ++ G_OBJECT_CLASS (cc_wwan_device_page_parent_class)->constructed (object); ++ ++ cc_wwan_device_page_update_data (self); ++ ++ g_object_bind_property (self->device, "operator-name", ++ self->network_name_row, "secondary-label", ++ G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); ++ ++ g_object_bind_property (self->device, "network-mode", ++ self->network_mode_row, "secondary-label", ++ G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); ++ ++ g_signal_connect_object (self->device, "notify::enabled-locks", ++ (GCallback)cc_wwan_locks_changed_cb, ++ self, G_CONNECT_SWAPPED); ++ ++ g_signal_connect_object (self->device, "notify::has-data", ++ (GCallback)cc_wwan_device_page_update_data, ++ self, G_CONNECT_SWAPPED); ++ ++ cc_wwan_device_page_update (self); ++ cc_wwan_locks_changed_cb (self); ++} ++ ++static void ++cc_wwan_device_page_dispose (GObject *object) ++{ ++ CcWwanDevicePage *self = (CcWwanDevicePage *)object; ++ ++ g_clear_pointer ((GtkWidget **)&self->apn_dialog, gtk_widget_destroy); ++ g_clear_pointer ((GtkWidget **)&self->details_dialog, gtk_widget_destroy); ++ g_clear_pointer ((GtkWidget **)&self->network_mode_dialog, gtk_widget_destroy); ++ g_clear_pointer ((GtkWidget **)&self->network_dialog, gtk_widget_destroy); ++ g_clear_pointer ((GtkWidget **)&self->sim_lock_dialog, gtk_widget_destroy); ++ ++ g_clear_object (&self->wwan_proxy); ++ g_clear_object (&self->device); ++ ++ G_OBJECT_CLASS (cc_wwan_device_page_parent_class)->dispose (object); ++} ++ ++static void ++cc_wwan_device_page_class_init (CcWwanDevicePageClass *klass) ++{ ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->set_property = cc_wwan_device_page_set_property; ++ object_class->constructed = cc_wwan_device_page_constructed; ++ object_class->dispose = cc_wwan_device_page_dispose; ++ ++ g_type_ensure (CC_TYPE_WWAN_DEVICE); ++ ++ properties[PROP_DEVICE] = ++ g_param_spec_object ("device", ++ "Device", ++ "The WWAN Device", ++ CC_TYPE_WWAN_DEVICE, ++ G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); ++ ++ g_object_class_install_properties (object_class, N_PROPS, properties); ++ ++ gtk_widget_class_set_template_from_resource (widget_class, ++ "/org/gnome/control-center/wwan/cc-wwan-device-page.ui"); ++ ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDevicePage, advanced_settings_list); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDevicePage, apn_settings_row); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDevicePage, data_enable_row); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDevicePage, data_roaming_row); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDevicePage, data_settings_list); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDevicePage, details_row); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDevicePage, main_stack); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDevicePage, network_mode_row); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDevicePage, network_name_row); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDevicePage, network_settings_list); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDevicePage, sim_lock_row); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanDevicePage, unlock_button); ++ ++ gtk_widget_class_bind_template_callback (widget_class, wwan_device_unlock_clicked_cb); ++ gtk_widget_class_bind_template_callback (widget_class, wwan_data_settings_changed_cb); ++ gtk_widget_class_bind_template_callback (widget_class, wwan_network_settings_activated_cb); ++ gtk_widget_class_bind_template_callback (widget_class, wwan_advanced_settings_activated_cb); ++} ++ ++static void ++cc_wwan_device_page_init (CcWwanDevicePage *self) ++{ ++ gtk_widget_init_template (GTK_WIDGET (self)); ++ ++ gtk_list_box_set_header_func (self->data_settings_list, ++ cc_list_box_update_header_func, ++ NULL, NULL); ++ ++ gtk_list_box_set_header_func (self->network_settings_list, ++ cc_list_box_update_header_func, ++ NULL, NULL); ++ ++ gtk_list_box_set_header_func (self->advanced_settings_list, ++ cc_list_box_update_header_func, ++ NULL, NULL); ++} ++ ++static void ++cc_wwan_error_changed_cb (CcWwanDevicePage *self) ++{ ++ const gchar *message; ++ ++ message = cc_wwan_device_get_simple_error (self->device); ++ ++ if (!message) ++ return; ++ ++ /* ++ * The label is first set to empty, which will result in ++ * the revealer to be closed. Then the real label is ++ * set. This will animate the revealer which can bring ++ * the user's attention. ++ */ ++ gtk_label_set_label (self->notification_label, ""); ++ gtk_label_set_label (self->notification_label, message); ++} ++ ++CcWwanDevicePage * ++cc_wwan_device_page_new (CcWwanDevice *device, ++ GtkWidget *notification_label) ++{ ++ CcWwanDevicePage *self; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (device), NULL); ++ ++ self = g_object_new (CC_TYPE_WWAN_DEVICE_PAGE, ++ "device", device, ++ NULL); ++ ++ self->notification_label = GTK_LABEL (notification_label); ++ ++ g_signal_connect_object (self->device, "notify::error", ++ G_CALLBACK (cc_wwan_error_changed_cb), ++ self, G_CONNECT_SWAPPED); ++ ++ return self; ++} ++ ++CcWwanDevice * ++cc_wwan_device_page_get_device (CcWwanDevicePage *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE_PAGE (self), NULL); ++ ++ return self->device; ++} ++ ++void ++cc_wwan_device_page_set_sim_index (CcWwanDevicePage *self, ++ gint sim_index) ++{ ++ g_return_if_fail (CC_IS_WWAN_DEVICE_PAGE (self)); ++ g_return_if_fail (sim_index >= 1); ++ ++ self->sim_index = sim_index; ++} +diff --git a/panels/wwan/cc-wwan-device-page.h b/panels/wwan/cc-wwan-device-page.h +new file mode 100644 +index 000000000..923346a89 +--- /dev/null ++++ b/panels/wwan/cc-wwan-device-page.h +@@ -0,0 +1,42 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-device-page.h ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#pragma once ++ ++#include ++ ++#include "cc-wwan-device.h" ++ ++G_BEGIN_DECLS ++ ++#define CC_TYPE_WWAN_DEVICE_PAGE (cc_wwan_device_page_get_type()) ++G_DECLARE_FINAL_TYPE (CcWwanDevicePage, cc_wwan_device_page, CC, WWAN_DEVICE_PAGE, GtkBox) ++ ++CcWwanDevicePage *cc_wwan_device_page_new (CcWwanDevice *device, ++ GtkWidget *notification_label); ++CcWwanDevice *cc_wwan_device_page_get_device (CcWwanDevicePage *self); ++void cc_wwan_device_page_set_sim_index (CcWwanDevicePage *self, ++ gint sim_index); ++ ++G_END_DECLS +diff --git a/panels/wwan/cc-wwan-device-page.ui b/panels/wwan/cc-wwan-device-page.ui +new file mode 100644 +index 000000000..f77bd707d +--- /dev/null ++++ b/panels/wwan/cc-wwan-device-page.ui +@@ -0,0 +1,270 @@ ++ ++ ++ ++ ++ both ++ ++ ++ ++ ++ ++ ++ +diff --git a/panels/wwan/cc-wwan-device.c b/panels/wwan/cc-wwan-device.c +new file mode 100644 +index 000000000..31baff95c +--- /dev/null ++++ b/panels/wwan/cc-wwan-device.c +@@ -0,0 +1,1355 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-device.c ++ * ++ * Copyright 2019-2020 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#undef G_LOG_DOMAIN ++#define G_LOG_DOMAIN "cc-wwan-device" ++ ++#ifdef HAVE_CONFIG_H ++# include "config.h" ++#endif ++ ++#include ++#include ++#if defined(HAVE_NETWORK_MANAGER) && defined(BUILD_NETWORK) ++# include ++# include ++#endif ++ ++#include "cc-wwan-errors-private.h" ++#include "cc-wwan-device.h" ++ ++/** ++ * @short_description: Device Object ++ * @include: "cc-wwan-device.h" ++ */ ++ ++struct _CcWwanDevice ++{ ++ GObject parent_instance; ++ ++ MMObject *mm_object; ++ MMModem *modem; ++ MMSim *sim; ++ MMModem3gpp *modem_3gpp; ++ ++ const char *operator_code; /* MCCMNC */ ++ GError *error; ++ ++ /* Building with NetworkManager is optional, ++ * so #NMclient type can’t be used here. ++ */ ++ GObject *nm_client; /* An #NMClient */ ++ CcWwanData *wwan_data; ++ ++ gulong modem_3gpp_id; ++ gulong modem_3gpp_locks_id; ++ ++ /* Enabled locks like PIN, PIN2, PUK, etc. */ ++ MMModem3gppFacility locks; ++ ++ CcWwanState registration_state; ++ gboolean network_is_manual; ++}; ++ ++G_DEFINE_TYPE (CcWwanDevice, cc_wwan_device, G_TYPE_OBJECT) ++ ++ ++enum { ++ PROP_0, ++ PROP_OPERATOR_NAME, ++ PROP_ENABLED_LOCKS, ++ PROP_ERROR, ++ PROP_HAS_DATA, ++ PROP_NETWORK_MODE, ++ PROP_REGISTRATION_STATE, ++ PROP_SIGNAL, ++ PROP_UNLOCK_REQUIRED, ++ N_PROPS ++}; ++ ++static GParamSpec *properties[N_PROPS]; ++ ++static void ++cc_wwan_device_state_changed_cb (CcWwanDevice *self) ++{ ++ MMModem3gppRegistrationState state; ++ ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_OPERATOR_NAME]); ++ ++ state = mm_modem_3gpp_get_registration_state (self->modem_3gpp); ++ ++ switch (state) ++ { ++ case MM_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN: ++ self->registration_state = CC_WWAN_REGISTRATION_STATE_UNKNOWN; ++ break; ++ ++ case MM_MODEM_3GPP_REGISTRATION_STATE_DENIED: ++ self->registration_state = CC_WWAN_REGISTRATION_STATE_DENIED; ++ break; ++ ++ case MM_MODEM_3GPP_REGISTRATION_STATE_IDLE: ++ self->registration_state = CC_WWAN_REGISTRATION_STATE_IDLE; ++ break; ++ ++ case MM_MODEM_3GPP_REGISTRATION_STATE_SEARCHING: ++ self->registration_state = CC_WWAN_REGISTRATION_STATE_SEARCHING; ++ break; ++ ++ case MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING: ++ self->registration_state = CC_WWAN_REGISTRATION_STATE_ROAMING; ++ break; ++ ++ default: ++ self->registration_state = CC_WWAN_REGISTRATION_STATE_REGISTERED; ++ break; ++ } ++ ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_REGISTRATION_STATE]); ++} ++ ++static void ++cc_wwan_device_locks_changed_cb (CcWwanDevice *self) ++{ ++ self->locks = mm_modem_3gpp_get_enabled_facility_locks (self->modem_3gpp); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ENABLED_LOCKS]); ++} ++ ++static void ++cc_wwan_device_3gpp_changed_cb (CcWwanDevice *self) ++{ ++ gulong handler_id = 0; ++ ++ if (self->modem_3gpp_id) ++ g_signal_handler_disconnect (self->modem_3gpp, self->modem_3gpp_id); ++ self->modem_3gpp_id = 0; ++ ++ if (self->modem_3gpp_locks_id) ++ g_signal_handler_disconnect (self->modem_3gpp, self->modem_3gpp_locks_id); ++ self->modem_3gpp_locks_id = 0; ++ ++ g_clear_object (&self->modem_3gpp); ++ self->modem_3gpp = mm_object_get_modem_3gpp (self->mm_object); ++ ++ if (self->modem_3gpp) ++ { ++ handler_id = g_signal_connect_object (self->modem_3gpp, "notify::registration-state", ++ G_CALLBACK (cc_wwan_device_state_changed_cb), ++ self, G_CONNECT_SWAPPED); ++ self->modem_3gpp_id = handler_id; ++ ++ handler_id = g_signal_connect_object (self->modem_3gpp, "notify::enabled-facility-locks", ++ G_CALLBACK (cc_wwan_device_locks_changed_cb), ++ self, G_CONNECT_SWAPPED); ++ self->modem_3gpp_locks_id = handler_id; ++ cc_wwan_device_locks_changed_cb (self); ++ cc_wwan_device_state_changed_cb (self); ++ } ++} ++ ++static void ++cc_wwan_device_signal_quality_changed_cb (CcWwanDevice *self) ++{ ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SIGNAL]); ++} ++ ++static void ++cc_wwan_device_mode_changed_cb (CcWwanDevice *self) ++{ ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_NETWORK_MODE]); ++} ++ ++static void ++wwan_device_emit_data_changed (CcWwanDevice *self) ++{ ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_HAS_DATA]); ++} ++ ++static void ++cc_wwan_device_unlock_required_cb (CcWwanDevice *self) ++{ ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_UNLOCK_REQUIRED]); ++} ++ ++#if defined(HAVE_NETWORK_MANAGER) && defined(BUILD_NETWORK) ++static void ++cc_wwan_device_nm_changed_cb (CcWwanDevice *self, ++ GParamSpec *pspec, ++ NMClient *client) ++{ ++ gboolean nm_is_running; ++ ++ nm_is_running = nm_client_get_nm_running (client); ++ ++ if (!nm_is_running && self->wwan_data != NULL) ++ { ++ g_clear_object (&self->wwan_data); ++ wwan_device_emit_data_changed (self); ++ } ++} ++ ++static void ++cc_wwan_device_nm_device_added_cb (CcWwanDevice *self, ++ NMDevice *nm_device) ++{ ++ if (!NM_IS_DEVICE_MODEM (nm_device)) ++ return; ++ ++ if(!self->sim || !cc_wwan_device_is_nm_device (self, G_OBJECT (nm_device))) ++ return; ++ ++ self->wwan_data = cc_wwan_data_new (self->mm_object, ++ NM_CLIENT (self->nm_client)); ++ ++ if (self->wwan_data) ++ { ++ g_signal_connect_object (self->wwan_data, "notify::enabled", ++ G_CALLBACK (wwan_device_emit_data_changed), ++ self, G_CONNECT_SWAPPED); ++ wwan_device_emit_data_changed (self); ++ } ++} ++#endif ++ ++static void ++cc_wwan_device_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ CcWwanDevice *self = (CcWwanDevice *)object; ++ MMModemMode allowed, preferred; ++ ++ switch (prop_id) ++ { ++ case PROP_OPERATOR_NAME: ++ g_value_set_string (value, cc_wwan_device_get_operator_name (self)); ++ break; ++ ++ case PROP_ERROR: ++ g_value_set_boolean (value, self->error != NULL); ++ break; ++ ++ case PROP_HAS_DATA: ++ g_value_set_boolean (value, self->wwan_data != NULL); ++ break; ++ ++ case PROP_ENABLED_LOCKS: ++ g_value_set_int (value, self->locks); ++ break; ++ ++ case PROP_NETWORK_MODE: ++ if (cc_wwan_device_get_current_mode (self, &allowed, &preferred)) ++ g_value_take_string (value, cc_wwan_device_get_string_from_mode (self, allowed, preferred)); ++ break; ++ ++ case PROP_REGISTRATION_STATE: ++ g_value_set_int (value, self->registration_state); ++ break; ++ ++ case PROP_UNLOCK_REQUIRED: ++ g_value_set_int (value, cc_wwan_device_get_lock (self)); ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++cc_wwan_device_dispose (GObject *object) ++{ ++ CcWwanDevice *self = (CcWwanDevice *)object; ++ ++ g_clear_error (&self->error); ++ g_clear_object (&self->modem); ++ g_clear_object (&self->mm_object); ++ g_clear_object (&self->sim); ++ g_clear_object (&self->modem_3gpp); ++ ++ g_clear_object (&self->nm_client); ++ g_clear_object (&self->wwan_data); ++ ++ G_OBJECT_CLASS (cc_wwan_device_parent_class)->dispose (object); ++} ++ ++static void ++cc_wwan_device_class_init (CcWwanDeviceClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->get_property = cc_wwan_device_get_property; ++ object_class->dispose = cc_wwan_device_dispose; ++ ++ properties[PROP_OPERATOR_NAME] = ++ g_param_spec_string ("operator-name", ++ "Operator Name", ++ "Operator Name the device is connected to", ++ NULL, ++ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); ++ ++ properties[PROP_ENABLED_LOCKS] = ++ g_param_spec_int ("enabled-locks", ++ "Enabled Locks", ++ "Locks Enabled in Modem", ++ MM_MODEM_3GPP_FACILITY_NONE, ++ MM_MODEM_3GPP_FACILITY_CORP_PERS, ++ MM_MODEM_3GPP_FACILITY_NONE, ++ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); ++ ++ properties[PROP_ERROR] = ++ g_param_spec_boolean ("error", ++ "Error", ++ "Set if some Error occurs", ++ FALSE, ++ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); ++ ++ properties[PROP_HAS_DATA] = ++ g_param_spec_boolean ("has-data", ++ "has-data", ++ "Data for the device", ++ FALSE, ++ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); ++ ++ properties[PROP_NETWORK_MODE] = ++ g_param_spec_string ("network-mode", ++ "Network Mode", ++ "A String representing preferred network mode", ++ NULL, ++ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); ++ ++ properties[PROP_REGISTRATION_STATE] = ++ g_param_spec_int ("registration-state", ++ "Registration State", ++ "The current network registration state", ++ CC_WWAN_REGISTRATION_STATE_UNKNOWN, ++ CC_WWAN_REGISTRATION_STATE_DENIED, ++ CC_WWAN_REGISTRATION_STATE_UNKNOWN, ++ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); ++ ++ properties[PROP_UNLOCK_REQUIRED] = ++ g_param_spec_int ("unlock-required", ++ "Unlock Required", ++ "The Modem lock status changed", ++ MM_MODEM_LOCK_UNKNOWN, ++ MM_MODEM_LOCK_PH_NETSUB_PUK, ++ MM_MODEM_LOCK_UNKNOWN, ++ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); ++ ++ properties[PROP_SIGNAL] = ++ g_param_spec_int ("signal", ++ "Signal", ++ "Get Device Signal", ++ 0, 100, 0, ++ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); ++ ++ g_object_class_install_properties (object_class, N_PROPS, properties); ++} ++ ++static void ++cc_wwan_device_init (CcWwanDevice *self) ++{ ++} ++ ++/** ++ * cc_wwan_device_new: ++ * @mm_object: (transfer full): An #MMObject ++ * ++ * Create a new device representing the given ++ * @mm_object. ++ * ++ * Returns: A #CcWwanDevice ++ */ ++CcWwanDevice * ++cc_wwan_device_new (MMObject *mm_object, ++ GObject *nm_client) ++{ ++ CcWwanDevice *self; ++ ++ g_return_val_if_fail (MM_IS_OBJECT (mm_object), NULL); ++#if defined(HAVE_NETWORK_MANAGER) && defined(BUILD_NETWORK) ++ g_return_val_if_fail (NM_IS_CLIENT (nm_client), NULL); ++#else ++ g_return_val_if_fail (!nm_client, NULL); ++#endif ++ ++ self = g_object_new (CC_TYPE_WWAN_DEVICE, NULL); ++ ++ self->mm_object = g_object_ref (mm_object); ++ self->modem = mm_object_get_modem (mm_object); ++ self->sim = mm_modem_get_sim_sync (self->modem, NULL, NULL); ++ g_set_object (&self->nm_client, nm_client); ++ if (self->sim) ++ { ++ self->operator_code = mm_sim_get_operator_identifier (self->sim); ++#if defined(HAVE_NETWORK_MANAGER) && defined(BUILD_NETWORK) ++ self->wwan_data = cc_wwan_data_new (mm_object, ++ NM_CLIENT (self->nm_client)); ++#endif ++ } ++ ++ g_signal_connect_object (self->mm_object, "notify::unlock-required", ++ G_CALLBACK (cc_wwan_device_unlock_required_cb), ++ self, G_CONNECT_SWAPPED); ++ if (self->wwan_data) ++ g_signal_connect_object (self->wwan_data, "notify::enabled", ++ G_CALLBACK (wwan_device_emit_data_changed), ++ self, G_CONNECT_SWAPPED); ++ ++#if defined(HAVE_NETWORK_MANAGER) && defined(BUILD_NETWORK) ++ g_signal_connect_object (self->nm_client, "notify::nm-running" , ++ G_CALLBACK (cc_wwan_device_nm_changed_cb), self, ++ G_CONNECT_SWAPPED); ++ ++ g_signal_connect_object (self->nm_client, "device-added", ++ G_CALLBACK (cc_wwan_device_nm_device_added_cb), ++ self, G_CONNECT_SWAPPED); ++#endif ++ ++ g_signal_connect_object (self->mm_object, "notify::modem3gpp", ++ G_CALLBACK (cc_wwan_device_3gpp_changed_cb), ++ self, G_CONNECT_SWAPPED); ++ g_signal_connect_object (self->modem, "notify::signal-quality", ++ G_CALLBACK (cc_wwan_device_signal_quality_changed_cb), ++ self, G_CONNECT_SWAPPED); ++ ++ cc_wwan_device_3gpp_changed_cb (self); ++ g_signal_connect_object (self->modem, "notify::current-modes", ++ G_CALLBACK (cc_wwan_device_mode_changed_cb), ++ self, G_CONNECT_SWAPPED); ++ ++ return self; ++} ++ ++gboolean ++cc_wwan_device_has_sim (CcWwanDevice *self) ++{ ++ MMModemStateFailedReason state_reason; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), FALSE); ++ ++ state_reason = mm_modem_get_state_failed_reason (self->modem); ++ ++ if (state_reason == MM_MODEM_STATE_FAILED_REASON_SIM_MISSING) ++ return FALSE; ++ ++ return TRUE; ++} ++ ++/** ++ * cc_wwan_device_get_lock: ++ * @self: a #CcWwanDevice ++ * ++ * Get the active device lock that is required to ++ * be unlocked for accessing device features. ++ * ++ * Returns: %TRUE if PIN enabled, %FALSE otherwise. ++ */ ++MMModemLock ++cc_wwan_device_get_lock (CcWwanDevice *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), MM_MODEM_LOCK_UNKNOWN); ++ ++ return mm_modem_get_unlock_required (self->modem); ++} ++ ++ ++/** ++ * cc_wwan_device_get_sim_lock: ++ * @self: a #CcWwanDevice ++ * ++ * Get if SIM lock with PIN is enabled. SIM PIN ++ * enabled doesn’t mean that SIM is locked. ++ * See cc_wwan_device_get_lock(). ++ * ++ * Returns: %TRUE if PIN enabled, %FALSE otherwise. ++ */ ++gboolean ++cc_wwan_device_get_sim_lock (CcWwanDevice *self) ++{ ++ gboolean sim_lock; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), FALSE); ++ ++ sim_lock = self->locks & MM_MODEM_3GPP_FACILITY_SIM; ++ ++ return !!sim_lock; ++} ++ ++guint ++cc_wwan_device_get_unlock_retries (CcWwanDevice *self, ++ MMModemLock lock) ++{ ++ MMUnlockRetries *retries; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), 0); ++ ++ retries = mm_modem_get_unlock_retries (self->modem); ++ ++ return mm_unlock_retries_get (retries, lock); ++} ++ ++static void ++cc_wwan_device_pin_sent_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ CcWwanDevice *self; ++ MMSim *sim = (MMSim *)object; ++ g_autoptr(GTask) task = user_data; ++ g_autoptr(GError) error = NULL; ++ ++ if (!mm_sim_send_pin_finish (sim, result, &error)) ++ { ++ self = g_task_get_source_object (G_TASK (task)); ++ ++ g_clear_error (&self->error); ++ self->error = g_error_copy (error); ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ERROR]); ++ ++ g_task_return_error (task, g_steal_pointer (&error)); ++ } ++ else ++ { ++ g_task_return_boolean (task, TRUE); ++ } ++} ++ ++void ++cc_wwan_device_send_pin (CcWwanDevice *self, ++ const gchar *pin, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data) ++{ ++ g_autoptr(GTask) task = NULL; ++ ++ g_return_if_fail (CC_IS_WWAN_DEVICE (self)); ++ g_return_if_fail (MM_IS_SIM (self->sim)); ++ g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable)); ++ g_return_if_fail (pin && *pin); ++ ++ task = g_task_new (self, cancellable, callback, user_data); ++ ++ mm_sim_send_pin (self->sim, pin, cancellable, ++ cc_wwan_device_pin_sent_cb, ++ g_steal_pointer (&task)); ++} ++ ++gboolean ++cc_wwan_device_send_pin_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), FALSE); ++ g_return_val_if_fail (G_IS_TASK (result), FALSE); ++ ++ return g_task_propagate_boolean (G_TASK (result), error); ++} ++ ++static void ++cc_wwan_device_puk_sent_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ CcWwanDevice *self; ++ MMSim *sim = (MMSim *)object; ++ g_autoptr(GTask) task = user_data; ++ g_autoptr(GError) error = NULL; ++ ++ if (!mm_sim_send_puk_finish (sim, result, &error)) ++ { ++ self = g_task_get_source_object (G_TASK (task)); ++ ++ g_clear_error (&self->error); ++ self->error = g_error_copy (error); ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ERROR]); ++ ++ g_task_return_error (task, g_steal_pointer (&error)); ++ } ++ else ++ { ++ g_task_return_boolean (task, TRUE); ++ } ++} ++ ++void ++cc_wwan_device_send_puk (CcWwanDevice *self, ++ const gchar *puk, ++ const gchar *pin, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data) ++{ ++ g_autoptr(GTask) task = NULL; ++ ++ g_return_if_fail (CC_IS_WWAN_DEVICE (self)); ++ g_return_if_fail (MM_IS_SIM (self->sim)); ++ g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable)); ++ g_return_if_fail (puk && *puk); ++ g_return_if_fail (pin && *pin); ++ ++ task = g_task_new (self, cancellable, callback, user_data); ++ ++ mm_sim_send_puk (self->sim, puk, pin, cancellable, ++ cc_wwan_device_puk_sent_cb, ++ g_steal_pointer (&task)); ++} ++ ++gboolean ++cc_wwan_device_send_puk_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), FALSE); ++ g_return_val_if_fail (G_IS_TASK (result), FALSE); ++ ++ return g_task_propagate_boolean (G_TASK (result), error); ++} ++ ++static void ++cc_wwan_device_enable_pin_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ CcWwanDevice *self; ++ MMSim *sim = (MMSim *)object; ++ g_autoptr(GTask) task = user_data; ++ g_autoptr(GError) error = NULL; ++ ++ if (!mm_sim_enable_pin_finish (sim, result, &error)) ++ { ++ self = g_task_get_source_object (G_TASK (task)); ++ ++ g_clear_error (&self->error); ++ self->error = g_error_copy (error); ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ERROR]); ++ ++ g_task_return_error (task, g_steal_pointer (&error)); ++ } ++ else ++ { ++ g_task_return_boolean (task, TRUE); ++ } ++} ++ ++void ++cc_wwan_device_enable_pin (CcWwanDevice *self, ++ const gchar *pin, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data) ++{ ++ g_autoptr(GTask) task = NULL; ++ ++ g_return_if_fail (CC_IS_WWAN_DEVICE (self)); ++ g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable)); ++ g_return_if_fail (pin && *pin); ++ ++ task = g_task_new (self, cancellable, callback, user_data); ++ ++ mm_sim_enable_pin (self->sim, pin, cancellable, ++ cc_wwan_device_enable_pin_cb, ++ g_steal_pointer (&task)); ++} ++ ++gboolean ++cc_wwan_device_enable_pin_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), FALSE); ++ g_return_val_if_fail (G_IS_TASK (result), FALSE); ++ ++ return g_task_propagate_boolean (G_TASK (result), error); ++} ++ ++static void ++cc_wwan_device_disable_pin_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ CcWwanDevice *self; ++ MMSim *sim = (MMSim *)object; ++ g_autoptr(GTask) task = user_data; ++ g_autoptr(GError) error = NULL; ++ ++ if (!mm_sim_disable_pin_finish (sim, result, &error)) ++ { ++ self = g_task_get_source_object (G_TASK (task)); ++ ++ g_clear_error (&self->error); ++ self->error = g_error_copy (error); ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ERROR]); ++ ++ g_task_return_error (task, g_steal_pointer (&error)); ++ } ++ else ++ { ++ g_task_return_boolean (task, TRUE); ++ } ++} ++ ++void ++cc_wwan_device_disable_pin (CcWwanDevice *self, ++ const gchar *pin, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data) ++{ ++ g_autoptr(GTask) task = NULL; ++ ++ g_return_if_fail (CC_IS_WWAN_DEVICE (self)); ++ g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable)); ++ g_return_if_fail (pin && *pin); ++ ++ task = g_task_new (self, cancellable, callback, user_data); ++ ++ mm_sim_disable_pin (self->sim, pin, cancellable, ++ cc_wwan_device_disable_pin_cb, ++ g_steal_pointer (&task)); ++} ++ ++gboolean ++cc_wwan_device_disable_pin_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), FALSE); ++ g_return_val_if_fail (G_IS_TASK (result), FALSE); ++ ++ return g_task_propagate_boolean (G_TASK (result), error); ++} ++ ++static void ++cc_wwan_device_change_pin_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ CcWwanDevice *self; ++ MMSim *sim = (MMSim *)object; ++ g_autoptr(GTask) task = user_data; ++ g_autoptr(GError) error = NULL; ++ ++ if (!mm_sim_change_pin_finish (sim, result, &error)) ++ { ++ self = g_task_get_source_object (G_TASK (task)); ++ ++ g_clear_error (&self->error); ++ self->error = g_error_copy (error); ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ERROR]); ++ ++ g_task_return_error (task, g_steal_pointer (&error)); ++ } ++ else ++ { ++ g_task_return_boolean (task, TRUE); ++ } ++} ++ ++void ++cc_wwan_device_change_pin (CcWwanDevice *self, ++ const gchar *old_pin, ++ const gchar *new_pin, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data) ++{ ++ g_autoptr(GTask) task = NULL; ++ ++ g_return_if_fail (CC_IS_WWAN_DEVICE (self)); ++ g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable)); ++ g_return_if_fail (old_pin && *old_pin); ++ g_return_if_fail (new_pin && *new_pin); ++ ++ task = g_task_new (self, cancellable, callback, user_data); ++ ++ mm_sim_change_pin (self->sim, old_pin, new_pin, cancellable, ++ cc_wwan_device_change_pin_cb, ++ g_steal_pointer (&task)); ++} ++ ++gboolean ++cc_wwan_device_change_pin_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), FALSE); ++ g_return_val_if_fail (G_IS_TASK (result), FALSE); ++ ++ return g_task_propagate_boolean (G_TASK (result), error); ++} ++ ++static void ++cc_wwan_device_network_mode_set_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ CcWwanDevice *self; ++ MMModem *modem = (MMModem *)object; ++ g_autoptr(GTask) task = user_data; ++ g_autoptr(GError) error = NULL; ++ ++ if (!mm_modem_set_current_modes_finish (modem, result, &error)) ++ { ++ self = g_task_get_source_object (G_TASK (task)); ++ ++ g_clear_error (&self->error); ++ self->error = g_error_copy (error); ++ g_warning ("Error: %s", error->message); ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ERROR]); ++ ++ g_task_return_error (task, g_steal_pointer (&error)); ++ } ++ else ++ { ++ g_task_return_boolean (task, TRUE); ++ } ++} ++ ++/** ++ * cc_wwan_device_set_network_mode: ++ * @self: a #CcWwanDevice ++ * @allowed: The allowed #MMModemModes ++ * @preferred: The preferred #MMModemMode ++ * @cancellable: (nullable): a #GCancellable or %NULL ++ * @callback: (nullable): a #GAsyncReadyCallback or %NULL ++ * @user_data: (nullable): closure data for @callback ++ * ++ * Asynchronously set preferred network mode. ++ * ++ * Call @cc_wwan_device_set_current_mode_finish() ++ * in @callback to get the result of operation. ++ */ ++void ++cc_wwan_device_set_current_mode (CcWwanDevice *self, ++ MMModemMode allowed, ++ MMModemMode preferred, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data) ++{ ++ g_autoptr(GTask) task = NULL; ++ GPermission *permission; ++ g_autoptr(GError) error = NULL; ++ ++ g_return_if_fail (CC_IS_WWAN_DEVICE (self)); ++ g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable)); ++ ++ task = g_task_new (self, cancellable, callback, user_data); ++ permission = polkit_permission_new_sync ("org.freedesktop.ModemManager1.Device.Control", ++ NULL, cancellable, &error); ++ if (permission) ++ g_task_set_task_data (task, permission, g_object_unref); ++ ++ if (error) ++ g_warning ("error: %s", error->message); ++ ++ if (error) ++ { ++ g_task_return_error (task, g_steal_pointer (&error)); ++ } ++ else if (!g_permission_get_allowed (permission)) ++ { ++ error = g_error_new (G_IO_ERROR, ++ G_IO_ERROR_PERMISSION_DENIED, ++ "Access Denied"); ++ g_clear_error (&self->error); ++ self->error = g_error_copy (error); ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ERROR]); ++ ++ g_task_return_error (task, g_steal_pointer (&error)); ++ } ++ else ++ { ++ mm_modem_set_current_modes (self->modem, allowed, preferred, ++ cancellable, cc_wwan_device_network_mode_set_cb, ++ g_steal_pointer (&task)); ++ } ++} ++ ++/** ++ * cc_wwan_device_set_current_mode_finish: ++ * @self: a #CcWwanDevice ++ * @result: a #GAsyncResult ++ * @error: a location for #GError or %NULL ++ * ++ * Get the status whether setting network mode ++ * succeeded ++ * ++ * Returns: %TRUE if network mode was successfully set, ++ * %FALSE otherwise. ++ */ ++gboolean ++cc_wwan_device_set_current_mode_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), FALSE); ++ g_return_val_if_fail (G_IS_TASK (result), FALSE); ++ ++ return g_task_propagate_boolean (G_TASK (result), error); ++} ++ ++gboolean ++cc_wwan_device_get_current_mode (CcWwanDevice *self, ++ MMModemMode *allowed, ++ MMModemMode *preferred) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), FALSE); ++ ++ return mm_modem_get_current_modes (self->modem, allowed, preferred); ++} ++ ++gboolean ++cc_wwan_device_is_auto_network (CcWwanDevice *self) ++{ ++ /* ++ * XXX: ModemManager Doesn’t have a true API to check ++ * if registration is automatic or manual. So Let’s ++ * do some guess work. ++ */ ++ if (self->registration_state == CC_WWAN_REGISTRATION_STATE_DENIED) ++ return FALSE; ++ ++ return !self->network_is_manual; ++} ++ ++CcWwanState ++cc_wwan_device_get_network_state (CcWwanDevice *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), 0); ++ ++ return self->registration_state; ++} ++ ++gboolean ++cc_wwan_device_get_supported_modes (CcWwanDevice *self, ++ MMModemMode *allowed, ++ MMModemMode *preferred) ++{ ++ g_autofree MMModemModeCombination *modes = NULL; ++ guint n_modes, i; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), FALSE); ++ ++ if (!mm_modem_get_supported_modes (self->modem, &modes, &n_modes)) ++ return FALSE; ++ ++ if (allowed) ++ *allowed = 0; ++ if (preferred) ++ *preferred = 0; ++ ++ for (i = 0; i < n_modes; i++) ++ { ++ if (allowed) ++ *allowed = *allowed | modes[i].allowed; ++ if (preferred) ++ *preferred = *preferred | modes[i].preferred; ++ } ++ ++ return TRUE; ++} ++ ++#define APPEND_MODE_TO_STRING(_str, _now, _preferred, _mode_str) do { \ ++ if (_str->len > 0) \ ++ g_string_append (_str, ", "); \ ++ g_string_append (_str, _mode_str); \ ++ if (_preferred == _now) \ ++ g_string_append (_str, _(" (Preferred)")); \ ++ } while (0) ++ ++gchar * ++cc_wwan_device_get_string_from_mode (CcWwanDevice *self, ++ MMModemMode allowed, ++ MMModemMode preferred) ++{ ++ GString *str; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), NULL); ++ g_return_val_if_fail (allowed != 0, NULL); ++ ++ str = g_string_sized_new (10); ++ ++ if (allowed & MM_MODEM_MODE_2G) ++ APPEND_MODE_TO_STRING (str, MM_MODEM_MODE_2G, preferred, "2G"); ++ if (allowed & MM_MODEM_MODE_3G) ++ APPEND_MODE_TO_STRING (str, MM_MODEM_MODE_3G, preferred, "3G"); ++ if (allowed & MM_MODEM_MODE_4G) ++ APPEND_MODE_TO_STRING (str, MM_MODEM_MODE_4G, preferred, "4G"); ++ ++ if (allowed == MM_MODEM_MODE_2G || ++ allowed == MM_MODEM_MODE_3G || ++ allowed == MM_MODEM_MODE_4G) ++ g_string_append (str, _(" Only")); ++ ++ if (str->len == 0) ++ return g_string_free (str, TRUE); ++ else ++ return g_string_free (str, FALSE); ++} ++#undef APPEND_MODE_TO_STRING ++ ++static void ++wwan_network_list_free (GList *network_list) ++{ ++ g_list_free_full (network_list, (GDestroyNotify)mm_modem_3gpp_network_free); ++} ++ ++static void ++cc_wwan_device_scan_complete_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ MMModem3gpp *modem_3gpp = (MMModem3gpp *)object; ++ g_autoptr(GTask) task = user_data; ++ g_autoptr(GError) error = NULL; ++ GList *network_list; ++ ++ network_list = mm_modem_3gpp_scan_finish (modem_3gpp, result, &error); ++ ++ if (error) ++ g_task_return_error (task, g_steal_pointer (&error)); ++ else ++ g_task_return_pointer (task, network_list, (GDestroyNotify)wwan_network_list_free); ++} ++ ++void ++cc_wwan_device_scan_networks (CcWwanDevice *self, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data) ++{ ++ g_autoptr(GTask) task = NULL; ++ ++ g_return_if_fail (CC_IS_WWAN_DEVICE (self)); ++ g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable)); ++ ++ task = g_task_new (self, cancellable, callback, user_data); ++ ++ mm_modem_3gpp_scan (self->modem_3gpp, cancellable, ++ cc_wwan_device_scan_complete_cb, ++ g_steal_pointer (&task)); ++} ++ ++GList * ++cc_wwan_device_scan_networks_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), FALSE); ++ g_return_val_if_fail (G_IS_TASK (result), FALSE); ++ ++ return g_task_propagate_pointer (G_TASK (result), error); ++} ++ ++static void ++cc_wwan_device_register_network_complete_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ CcWwanDevice *self; ++ MMModem3gpp *modem_3gpp = (MMModem3gpp *)object; ++ g_autoptr(GTask) task = user_data; ++ g_autoptr(GError) error = NULL; ++ ++ if (!mm_modem_3gpp_register_finish (modem_3gpp, result, &error)) ++ { ++ self = g_task_get_source_object (G_TASK (task)); ++ ++ g_clear_error (&self->error); ++ self->error = g_error_copy (error); ++ g_warning ("Error: %s", error->message); ++ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ERROR]); ++ ++ g_task_return_error (task, g_steal_pointer (&error)); ++ } ++ else ++ { ++ g_task_return_boolean (task, TRUE); ++ } ++} ++ ++void ++cc_wwan_device_register_network (CcWwanDevice *self, ++ const gchar *network_id, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data) ++{ ++ g_autoptr(GTask) task = NULL; ++ ++ g_return_if_fail (CC_IS_WWAN_DEVICE (self)); ++ g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable)); ++ ++ task = g_task_new (self, cancellable, callback, user_data); ++ ++ if (network_id && *network_id) ++ self->network_is_manual = TRUE; ++ else ++ self->network_is_manual = FALSE; ++ ++ mm_modem_3gpp_register (self->modem_3gpp, network_id, cancellable, ++ cc_wwan_device_register_network_complete_cb, ++ g_steal_pointer (&task)); ++} ++ ++gboolean ++cc_wwan_device_register_network_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), FALSE); ++ g_return_val_if_fail (G_IS_TASK (result), FALSE); ++ ++ return g_task_propagate_boolean (G_TASK (result), error); ++} ++ ++/** ++ * cc_wwan_device_get_operator_name: ++ * @self: a #CcWwanDevice ++ * ++ * Get the human readable network operator name ++ * currently the device is connected to. ++ * ++ * Returns: (nullable): The operator name or %NULL ++ */ ++const gchar * ++cc_wwan_device_get_operator_name (CcWwanDevice *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), NULL); ++ ++ if (!self->modem_3gpp) ++ return NULL; ++ ++ return mm_modem_3gpp_get_operator_name (self->modem_3gpp); ++} ++ ++gchar * ++cc_wwan_device_dup_own_numbers (CcWwanDevice *self) ++{ ++ const char *const *own_numbers; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), NULL); ++ ++ own_numbers = mm_modem_get_own_numbers (self->modem); ++ ++ if (!own_numbers) ++ return NULL; ++ ++ return g_strjoinv ("\n", (char **)own_numbers); ++} ++ ++gchar * ++cc_wwan_device_dup_network_type_string (CcWwanDevice *self) ++{ ++ MMModemAccessTechnology type; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), NULL); ++ ++ type = mm_modem_get_access_technologies (self->modem); ++ ++ return mm_modem_access_technology_build_string_from_mask (type); ++} ++ ++gchar * ++cc_wwan_device_dup_signal_string (CcWwanDevice *self) ++{ ++ MMModemSignal *modem_signal; ++ MMSignal *signal; ++ GString *str; ++ gdouble value; ++ gboolean recent; ++ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), NULL); ++ ++ modem_signal = mm_object_peek_modem_signal (self->mm_object); ++ ++ if (!modem_signal) ++ return g_strdup_printf ("%d%%", mm_modem_get_signal_quality (self->modem, &recent)); ++ ++ str = g_string_new (""); ++ ++ /* Adapted from ModemManager mmcli-modem-signal.c */ ++ signal = mm_modem_signal_peek_cdma (modem_signal); ++ if (signal) ++ { ++ if ((value = mm_signal_get_rssi (signal)) != MM_SIGNAL_UNKNOWN) ++ g_string_append_printf (str, "rssi: %.2g dBm ", value); ++ if ((value = mm_signal_get_ecio (signal)) != MM_SIGNAL_UNKNOWN) ++ g_string_append_printf (str, "ecio: %.2g dBm ", value); ++ } ++ ++ signal = mm_modem_signal_peek_evdo (modem_signal); ++ if (signal) ++ { ++ if ((value = mm_signal_get_rssi (signal)) != MM_SIGNAL_UNKNOWN) ++ g_string_append_printf (str, "rssi: %.2g dBm ", value); ++ if ((value = mm_signal_get_ecio (signal)) != MM_SIGNAL_UNKNOWN) ++ g_string_append_printf (str, "ecio: %.2g dBm ", value); ++ if ((value = mm_signal_get_sinr (signal)) != MM_SIGNAL_UNKNOWN) ++ g_string_append_printf (str, "sinr: %.2g dB ", value); ++ if ((value = mm_signal_get_io (signal)) != MM_SIGNAL_UNKNOWN) ++ g_string_append_printf (str, "io: %.2g dBm ", value); ++ } ++ ++ signal = mm_modem_signal_peek_gsm (modem_signal); ++ if (signal) ++ if ((value = mm_signal_get_rssi (signal)) != MM_SIGNAL_UNKNOWN) ++ g_string_append_printf (str, "rssi: %.2g dBm ", value); ++ ++ signal = mm_modem_signal_peek_umts (modem_signal); ++ if (signal) ++ { ++ if ((value = mm_signal_get_rssi (signal)) != MM_SIGNAL_UNKNOWN) ++ g_string_append_printf (str, "rssi: %.2g dBm ", value); ++ if ((value = mm_signal_get_rscp (signal)) != MM_SIGNAL_UNKNOWN) ++ g_string_append_printf (str, "rscp: %.2g dBm ", value); ++ if ((value = mm_signal_get_ecio (signal)) != MM_SIGNAL_UNKNOWN) ++ g_string_append_printf (str, "ecio: %.2g dBm ", value); ++ } ++ ++ signal = mm_modem_signal_peek_lte (modem_signal); ++ if (signal) ++ { ++ if ((value = mm_signal_get_rssi (signal)) != MM_SIGNAL_UNKNOWN) ++ g_string_append_printf (str, "rssi: %.2g dBm ", value); ++ if ((value = mm_signal_get_rsrq (signal)) != MM_SIGNAL_UNKNOWN) ++ g_string_append_printf (str, "rsrq: %.2g dB ", value); ++ if ((value = mm_signal_get_rsrp (signal)) != MM_SIGNAL_UNKNOWN) ++ g_string_append_printf (str, "rsrp: %.2g dBm ", value); ++ if ((value = mm_signal_get_snr (signal)) != MM_SIGNAL_UNKNOWN) ++ g_string_append_printf (str, "snr: %.2g dB ", value); ++ } ++ ++ return g_string_free (str, FALSE); ++} ++ ++const gchar * ++cc_wwan_device_get_manufacturer (CcWwanDevice *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), NULL); ++ ++ return mm_modem_get_manufacturer (self->modem); ++} ++ ++const gchar * ++cc_wwan_device_get_model (CcWwanDevice *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), NULL); ++ ++ return mm_modem_get_model (self->modem); ++} ++ ++const gchar * ++cc_wwan_device_get_firmware_version (CcWwanDevice *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), NULL); ++ ++ return mm_modem_get_revision (self->modem); ++} ++ ++const gchar * ++cc_wwan_device_get_identifier (CcWwanDevice *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), NULL); ++ ++ return mm_modem_get_equipment_identifier (self->modem); ++} ++ ++const gchar * ++cc_wwan_device_get_simple_error (CcWwanDevice *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), NULL); ++ ++ if (!self->error) ++ return NULL; ++ ++ return cc_wwan_error_get_message (self->error); ++} ++ ++gboolean ++cc_wwan_device_is_nm_device (CcWwanDevice *self, ++ GObject *nm_device) ++{ ++#if defined(HAVE_NETWORK_MANAGER) && defined(BUILD_NETWORK) ++ g_return_val_if_fail (NM_IS_DEVICE (nm_device), FALSE); ++ ++ return g_str_equal (mm_modem_get_primary_port (self->modem), ++ nm_device_get_iface (NM_DEVICE (nm_device))); ++#else ++ return FALSE; ++#endif ++} ++ ++const gchar * ++cc_wwan_device_get_path (CcWwanDevice *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), ""); ++ ++ return mm_object_get_path (self->mm_object); ++} ++ ++CcWwanData * ++cc_wwan_device_get_data (CcWwanDevice *self) ++{ ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), NULL); ++ ++ return self->wwan_data; ++} ++ ++gboolean ++cc_wwan_device_pin_valid (const gchar *password, ++ MMModemLock lock) ++{ ++ size_t len; ++ ++ g_return_val_if_fail (lock == MM_MODEM_LOCK_SIM_PIN || ++ lock == MM_MODEM_LOCK_SIM_PIN2 || ++ lock == MM_MODEM_LOCK_SIM_PUK || ++ lock == MM_MODEM_LOCK_SIM_PUK2, FALSE); ++ if (!password) ++ return FALSE; ++ ++ len = strlen (password); ++ ++ if (len < 4 || len > 8) ++ return FALSE; ++ ++ if (strspn (password, "0123456789") != len) ++ return FALSE; ++ ++ /* ++ * XXX: Can PUK code be something other than 8 digits? ++ * 3GPP standard seems mum on this ++ */ ++ if (lock == MM_MODEM_LOCK_SIM_PUK || ++ lock == MM_MODEM_LOCK_SIM_PUK2) ++ if (len != 8) ++ return FALSE; ++ ++ return TRUE; ++} +diff --git a/panels/wwan/cc-wwan-device.h b/panels/wwan/cc-wwan-device.h +new file mode 100644 +index 000000000..e484bcf30 +--- /dev/null ++++ b/panels/wwan/cc-wwan-device.h +@@ -0,0 +1,152 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-device.h ++ * ++ * Copyright 2019-2020 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#pragma once ++ ++#include ++#include ++ ++#if defined(HAVE_NETWORK_MANAGER) && defined(BUILD_NETWORK) ++# include "cc-wwan-data.h" ++#endif ++ ++G_BEGIN_DECLS ++ ++typedef enum ++{ ++ CC_WWAN_REGISTRATION_STATE_UNKNOWN, ++ CC_WWAN_REGISTRATION_STATE_IDLE, ++ CC_WWAN_REGISTRATION_STATE_REGISTERED, ++ CC_WWAN_REGISTRATION_STATE_ROAMING, ++ CC_WWAN_REGISTRATION_STATE_SEARCHING, ++ CC_WWAN_REGISTRATION_STATE_DENIED ++} CcWwanState; ++ ++typedef struct _CcWwanData CcWwanData; ++ ++#define CC_TYPE_WWAN_DEVICE (cc_wwan_device_get_type()) ++G_DECLARE_FINAL_TYPE (CcWwanDevice, cc_wwan_device, CC, WWAN_DEVICE, GObject) ++ ++CcWwanDevice *cc_wwan_device_new (MMObject *mm_object, ++ GObject *nm_client); ++gboolean cc_wwan_device_has_sim (CcWwanDevice *self); ++MMModemLock cc_wwan_device_get_lock (CcWwanDevice *self); ++gboolean cc_wwan_device_get_sim_lock (CcWwanDevice *self); ++guint cc_wwan_device_get_unlock_retries (CcWwanDevice *self, ++ MMModemLock lock); ++void cc_wwan_device_enable_pin (CcWwanDevice *self, ++ const gchar *pin, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data); ++gboolean cc_wwan_device_enable_pin_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error); ++void cc_wwan_device_disable_pin (CcWwanDevice *self, ++ const gchar *pin, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data); ++gboolean cc_wwan_device_disable_pin_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error); ++void cc_wwan_device_send_pin (CcWwanDevice *self, ++ const gchar *pin, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data); ++gboolean cc_wwan_device_send_pin_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error); ++void cc_wwan_device_send_puk (CcWwanDevice *self, ++ const gchar *puk, ++ const gchar *pin, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data); ++gboolean cc_wwan_device_send_puk_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error); ++void cc_wwan_device_change_pin (CcWwanDevice *self, ++ const gchar *old_pin, ++ const gchar *new_pin, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data); ++gboolean cc_wwan_device_change_pin_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error); ++const gchar *cc_wwan_device_get_operator_name (CcWwanDevice *self); ++gchar *cc_wwan_device_dup_own_numbers (CcWwanDevice *self); ++gchar *cc_wwan_device_dup_network_type_string (CcWwanDevice *self); ++gchar *cc_wwan_device_dup_signal_string (CcWwanDevice *self); ++const gchar *cc_wwan_device_get_manufacturer (CcWwanDevice *self); ++const gchar *cc_wwan_device_get_model (CcWwanDevice *self); ++const gchar *cc_wwan_device_get_firmware_version (CcWwanDevice *self); ++const gchar *cc_wwan_device_get_identifier (CcWwanDevice *self); ++gboolean cc_wwan_device_get_current_mode (CcWwanDevice *self, ++ MMModemMode *allowed, ++ MMModemMode *preferred); ++gboolean cc_wwan_device_is_auto_network (CcWwanDevice *self); ++CcWwanState cc_wwan_device_get_network_state (CcWwanDevice *self); ++gboolean cc_wwan_device_get_supported_modes (CcWwanDevice *self, ++ MMModemMode *allowed, ++ MMModemMode *preferred); ++void cc_wwan_device_set_current_mode (CcWwanDevice *self, ++ MMModemMode allowed, ++ MMModemMode preferred, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data); ++gboolean cc_wwan_device_set_current_mode_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error); ++gchar *cc_wwan_device_get_string_from_mode (CcWwanDevice *self, ++ MMModemMode allowed, ++ MMModemMode preferred); ++void cc_wwan_device_scan_networks (CcWwanDevice *self, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data); ++GList *cc_wwan_device_scan_networks_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error); ++void cc_wwan_device_register_network (CcWwanDevice *self, ++ const gchar *network_id, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data); ++gboolean cc_wwan_device_register_network_finish (CcWwanDevice *self, ++ GAsyncResult *result, ++ GError **error); ++const gchar *cc_wwan_device_get_simple_error (CcWwanDevice *self); ++GSList *cc_wwan_device_get_apn_list (CcWwanDevice *self); ++gboolean cc_wwan_device_is_nm_device (CcWwanDevice *self, ++ GObject *nm_device); ++const gchar *cc_wwan_device_get_path (CcWwanDevice *self); ++CcWwanData *cc_wwan_device_get_data (CcWwanDevice *self); ++gboolean cc_wwan_device_pin_valid (const gchar *password, ++ MMModemLock lock); ++ ++G_END_DECLS +diff --git a/panels/wwan/cc-wwan-errors-private.h b/panels/wwan/cc-wwan-errors-private.h +new file mode 100644 +index 000000000..761b82f35 +--- /dev/null ++++ b/panels/wwan/cc-wwan-errors-private.h +@@ -0,0 +1,104 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-errors-private.h ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * Modified from mm-error-helpers.c from ModemManager ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#pragma once ++ ++#include ++#include ++#include ++ ++typedef struct { ++ guint code; ++ const gchar *message; ++} ErrorTable; ++ ++ ++static ErrorTable me_errors[] = { ++ { MM_MOBILE_EQUIPMENT_ERROR_PHONE_FAILURE, N_("Phone failure") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NO_CONNECTION, N_("No connection to phone") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_LINK_RESERVED, N_("Phone-adaptor link reserved") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NOT_ALLOWED, N_("Operation not allowed") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NOT_SUPPORTED, N_("Operation not supported") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_PH_SIM_PIN, N_("PH-SIM PIN required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_PH_FSIM_PIN, N_("PH-FSIM PIN required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_PH_FSIM_PUK, N_("PH-FSIM PUK required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_SIM_NOT_INSERTED, N_("SIM not inserted") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_SIM_PIN, N_("SIM PIN required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_SIM_PUK, N_("SIM PUK required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_SIM_FAILURE, N_("SIM failure") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_SIM_BUSY, N_("SIM busy") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_SIM_WRONG, N_("SIM wrong") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_INCORRECT_PASSWORD, N_("Incorrect password") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_SIM_PIN2, N_("SIM PIN2 required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_SIM_PUK2, N_("SIM PUK2 required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_MEMORY_FULL, N_("Memory full") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_INVALID_INDEX, N_("Invalid index") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NOT_FOUND, N_("Not found") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_MEMORY_FAILURE, N_("Memory failure") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NO_NETWORK, N_("No network service") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_TIMEOUT, N_("Network timeout") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_NOT_ALLOWED, N_("Network not allowed - emergency calls only") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_PIN, N_("Network personalization PIN required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_PUK, N_("Network personalization PUK required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_SUBSET_PIN, N_("Network subset personalization PIN required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_SUBSET_PUK, N_("Network subset personalization PUK required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_SERVICE_PIN, N_("Service provider personalization PIN required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_SERVICE_PUK, N_("Service provider personalization PUK required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_CORP_PIN, N_("Corporate personalization PIN required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_CORP_PUK, N_("Corporate personalization PUK required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_UNKNOWN, N_("Unknown error") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_ILLEGAL_MS, N_("Illegal MS") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_ILLEGAL_ME, N_("Illegal ME") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_SERVICE_NOT_ALLOWED, N_("GPRS services not allowed") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_PLMN_NOT_ALLOWED, N_("PLMN not allowed") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_LOCATION_NOT_ALLOWED, N_("Location area not allowed") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_ROAMING_NOT_ALLOWED, N_("Roaming not allowed in this location area") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_SERVICE_OPTION_NOT_SUPPORTED, N_("Service option not supported") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_SERVICE_OPTION_NOT_SUBSCRIBED, N_("Requested service option not subscribed") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_SERVICE_OPTION_OUT_OF_ORDER, N_("Service option temporarily out of order") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_UNKNOWN, N_("Unspecified GPRS error") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_PDP_AUTH_FAILURE, N_("PDP authentication failure") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_INVALID_MOBILE_CLASS, N_("Invalid mobile class") }, ++}; ++ ++static inline const gchar * ++cc_wwan_error_get_message (GError *error) ++{ ++ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ return _("Action Cancelled"); ++ ++ if (g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_ACCESS_DENIED)) ++ return _("Access denied"); ++ ++ if (error->domain != MM_MOBILE_EQUIPMENT_ERROR) ++ return error->message; ++ ++ for (guint i = 0; i < G_N_ELEMENTS (me_errors); i++) ++ if (me_errors[i].code == error->code) ++ return _(me_errors[i].message); ++ ++ return _("Unknown Error"); ++} +diff --git a/panels/wwan/cc-wwan-mode-dialog.c b/panels/wwan/cc-wwan-mode-dialog.c +new file mode 100644 +index 000000000..e5917a41c +--- /dev/null ++++ b/panels/wwan/cc-wwan-mode-dialog.c +@@ -0,0 +1,327 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-mode-dialog.c ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#undef G_LOG_DOMAIN ++#define G_LOG_DOMAIN "cc-network-mode-dialog" ++ ++#include ++#include ++#include ++ ++#include "list-box-helper.h" ++#include "cc-wwan-mode-dialog.h" ++#include "cc-wwan-resources.h" ++ ++/** ++ * @short_description: WWAN network type selection dialog ++ */ ++ ++#define CC_TYPE_WWAN_MODE_ROW (cc_wwan_mode_row_get_type()) ++G_DECLARE_FINAL_TYPE (CcWwanModeRow, cc_wwan_mode_row, CC, WWAN_MODE_ROW, GtkListBoxRow) ++ ++struct _CcWwanModeDialog ++{ ++ GtkDialog parent_instance; ++ ++ CcWwanDevice *device; ++ GtkListBox *network_mode_list; ++ CcWwanModeRow *selected_row; ++ ++ MMModemMode preferred; ++ MMModemMode allowed; ++ MMModemMode new_allowed; ++ MMModemMode new_preferred; ++}; ++ ++G_DEFINE_TYPE (CcWwanModeDialog, cc_wwan_mode_dialog, GTK_TYPE_DIALOG) ++ ++ ++enum { ++ PROP_0, ++ PROP_DEVICE, ++ N_PROPS ++}; ++ ++static GParamSpec *properties[N_PROPS]; ++ ++struct _CcWwanModeRow ++{ ++ GtkListBoxRow parent_instance; ++ GtkImage *ok_emblem; ++ MMModemMode allowed; ++ MMModemMode preferred; ++}; ++ ++G_DEFINE_TYPE (CcWwanModeRow, cc_wwan_mode_row, GTK_TYPE_LIST_BOX_ROW) ++ ++static void ++cc_wwan_mode_row_class_init (CcWwanModeRowClass *klass) ++{ ++} ++ ++static void ++cc_wwan_mode_row_init (CcWwanModeRow *row) ++{ ++} ++ ++static void ++cc_wwan_mode_changed_cb (CcWwanModeDialog *self, ++ CcWwanModeRow *row) ++{ ++ g_assert (CC_IS_WWAN_MODE_DIALOG (self)); ++ g_assert (CC_IS_WWAN_MODE_ROW (row)); ++ ++ if (row == self->selected_row) ++ return; ++ ++ gtk_widget_show (GTK_WIDGET (row->ok_emblem)); ++ ++ if (self->selected_row) ++ gtk_widget_hide (GTK_WIDGET (self->selected_row->ok_emblem)); ++ ++ self->selected_row = row; ++} ++ ++static void ++cc_wwan_mode_dialog_ok_clicked_cb (CcWwanModeDialog *self) ++{ ++ g_assert (CC_IS_WWAN_MODE_DIALOG (self)); ++ ++ if (self->selected_row) ++ { ++ cc_wwan_device_set_current_mode (self->device, ++ self->selected_row->allowed, ++ self->selected_row->preferred, ++ NULL, NULL, NULL); ++ } ++ else ++ { ++ g_return_if_reached (); ++ } ++ ++ gtk_widget_hide (GTK_WIDGET (self)); ++} ++ ++static GtkWidget * ++cc_wwan_mode_dialog_row_new (CcWwanModeDialog *self, ++ MMModemMode allowed, ++ MMModemMode preferred) ++{ ++ CcWwanModeRow *row; ++ GtkWidget *box, *label, *image; ++ g_autofree gchar *mode = NULL; ++ ++ g_assert (CC_WWAN_MODE_DIALOG (self)); ++ ++ row = g_object_new (CC_TYPE_WWAN_MODE_ROW, NULL); ++ row->allowed = allowed; ++ row->preferred = preferred; ++ ++ box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); ++ gtk_widget_show (box); ++ g_object_set (box, "margin", 18, NULL); ++ gtk_container_add (GTK_CONTAINER (row), box); ++ ++ mode = cc_wwan_device_get_string_from_mode (self->device, allowed, preferred); ++ label = gtk_label_new (mode); ++ gtk_widget_show (label); ++ gtk_widget_set_hexpand (label, TRUE); ++ gtk_widget_set_halign (label, GTK_ALIGN_START); ++ gtk_container_add (GTK_CONTAINER (box), label); ++ ++ /* image should be hidden by default */ ++ image = gtk_image_new_from_icon_name ("emblem-ok-symbolic", GTK_ICON_SIZE_BUTTON); ++ gtk_container_add (GTK_CONTAINER (box), image); ++ row->ok_emblem = GTK_IMAGE (image); ++ ++ return GTK_WIDGET (row); ++} ++ ++static void ++cc_wwan_mode_dialog_update (CcWwanModeDialog *self) ++{ ++ MMModemMode allowed; ++ MMModemMode modes[][2] = { ++ {MM_MODEM_MODE_2G | MM_MODEM_MODE_3G | MM_MODEM_MODE_4G, MM_MODEM_MODE_4G}, ++ {MM_MODEM_MODE_2G | MM_MODEM_MODE_3G | MM_MODEM_MODE_4G, 0}, ++ {MM_MODEM_MODE_3G | MM_MODEM_MODE_4G, MM_MODEM_MODE_4G}, ++ {MM_MODEM_MODE_3G | MM_MODEM_MODE_4G, 0}, ++ {MM_MODEM_MODE_2G | MM_MODEM_MODE_3G, MM_MODEM_MODE_3G}, ++ {MM_MODEM_MODE_2G | MM_MODEM_MODE_3G, 0}, ++ {MM_MODEM_MODE_4G, 0}, ++ {MM_MODEM_MODE_3G, 0}, ++ {MM_MODEM_MODE_2G, 0}, ++ }; ++ size_t i; ++ ++ g_assert (CC_IS_WWAN_MODE_DIALOG (self)); ++ ++ if (!cc_wwan_device_get_supported_modes (self->device, &allowed, NULL)) ++ { ++ g_warning ("No modes supported by modem"); ++ return; ++ } ++ ++ for (i = 0; i < G_N_ELEMENTS (modes); i++) ++ { ++ GtkWidget *row; ++ ++ if ((modes[i][0] & allowed) != modes[i][0]) ++ continue; ++ ++ if (modes[i][1] && !(modes[i][1] & allowed)) ++ continue; ++ ++ row = cc_wwan_mode_dialog_row_new (self, modes[i][0], modes[i][1]); ++ gtk_widget_show (row); ++ gtk_container_add (GTK_CONTAINER (self->network_mode_list), row); ++ } ++} ++ ++static void ++cc_wwan_mode_dialog_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ CcWwanModeDialog *self = CC_WWAN_MODE_DIALOG (object); ++ ++ switch (prop_id) ++ { ++ case PROP_DEVICE: ++ self->device = g_value_dup_object (value); ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++cc_wwan_mode_dialog_constructed (GObject *object) ++{ ++ CcWwanModeDialog *self = CC_WWAN_MODE_DIALOG (object); ++ ++ G_OBJECT_CLASS (cc_wwan_mode_dialog_parent_class)->constructed (object); ++ ++ if(!cc_wwan_device_get_current_mode (self->device, &self->allowed, &self->preferred)) ++ g_warning ("Can't get allowed and preferred wwan modes"); ++ ++ cc_wwan_mode_dialog_update (self); ++} ++ ++static void ++cc_wwan_mode_dialog_dispose (GObject *object) ++{ ++ CcWwanModeDialog *self = CC_WWAN_MODE_DIALOG (object); ++ ++ g_clear_object (&self->device); ++ ++ G_OBJECT_CLASS (cc_wwan_mode_dialog_parent_class)->dispose (object); ++} ++ ++static void ++cc_wwan_mode_dialog_update_mode (CcWwanModeRow *row, ++ CcWwanModeDialog *self) ++{ ++ if (self->allowed == row->allowed && self->preferred == row->preferred) ++ { ++ self->selected_row = row; ++ gtk_widget_show (GTK_WIDGET (row->ok_emblem)); ++ } ++ else ++ gtk_widget_hide (GTK_WIDGET (row->ok_emblem)); ++} ++ ++static void ++cc_wwan_mode_dialog_show (GtkWidget *widget) ++{ ++ CcWwanModeDialog *self = CC_WWAN_MODE_DIALOG (widget); ++ ++ if(!cc_wwan_device_get_current_mode (self->device, &self->allowed, &self->preferred)) ++ { ++ g_warning ("Can't get allowed and preferred wwan modes"); ++ goto end; ++ } ++ ++ gtk_container_foreach (GTK_CONTAINER (self->network_mode_list), ++ (GtkCallback)cc_wwan_mode_dialog_update_mode, ++ self); ++ end: ++ GTK_WIDGET_CLASS (cc_wwan_mode_dialog_parent_class)->show (widget); ++} ++ ++static void ++cc_wwan_mode_dialog_class_init (CcWwanModeDialogClass *klass) ++{ ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->set_property = cc_wwan_mode_dialog_set_property; ++ object_class->constructed = cc_wwan_mode_dialog_constructed; ++ object_class->dispose = cc_wwan_mode_dialog_dispose; ++ ++ widget_class->show = cc_wwan_mode_dialog_show; ++ ++ properties[PROP_DEVICE] = ++ g_param_spec_object ("device", ++ "Device", ++ "The WWAN Device", ++ CC_TYPE_WWAN_DEVICE, ++ G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); ++ ++ g_object_class_install_properties (object_class, N_PROPS, properties); ++ ++ gtk_widget_class_set_template_from_resource (widget_class, ++ "/org/gnome/control-center/wwan/cc-wwan-mode-dialog.ui"); ++ ++ gtk_widget_class_bind_template_child (widget_class, CcWwanModeDialog, network_mode_list); ++ ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_mode_changed_cb); ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_mode_dialog_ok_clicked_cb); ++} ++ ++static void ++cc_wwan_mode_dialog_init (CcWwanModeDialog *self) ++{ ++ gtk_widget_init_template (GTK_WIDGET (self)); ++ ++ gtk_list_box_set_header_func (self->network_mode_list, ++ cc_list_box_update_header_func, ++ NULL, NULL); ++} ++ ++CcWwanModeDialog * ++cc_wwan_mode_dialog_new (GtkWindow *parent_window, ++ CcWwanDevice *device) ++{ ++ g_return_val_if_fail (GTK_IS_WINDOW (parent_window), NULL); ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (device), NULL); ++ ++ return g_object_new (CC_TYPE_WWAN_MODE_DIALOG, ++ "transient-for", parent_window, ++ "use-header-bar", 1, ++ "device", device, ++ NULL); ++} +diff --git a/panels/wwan/cc-wwan-mode-dialog.h b/panels/wwan/cc-wwan-mode-dialog.h +new file mode 100644 +index 000000000..2399f0b7b +--- /dev/null ++++ b/panels/wwan/cc-wwan-mode-dialog.h +@@ -0,0 +1,40 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-mode-dialog.h ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#pragma once ++ ++#include ++#include ++ ++#include "cc-wwan-device.h" ++ ++G_BEGIN_DECLS ++ ++#define CC_TYPE_WWAN_MODE_DIALOG (cc_wwan_mode_dialog_get_type()) ++G_DECLARE_FINAL_TYPE (CcWwanModeDialog, cc_wwan_mode_dialog, CC, WWAN_MODE_DIALOG, GtkDialog) ++ ++CcWwanModeDialog *cc_wwan_mode_dialog_new (GtkWindow *parent_window, ++ CcWwanDevice *device); ++ ++G_END_DECLS +diff --git a/panels/wwan/cc-wwan-mode-dialog.ui b/panels/wwan/cc-wwan-mode-dialog.ui +new file mode 100644 +index 000000000..e0a924a39 +--- /dev/null ++++ b/panels/wwan/cc-wwan-mode-dialog.ui +@@ -0,0 +1,57 @@ ++ ++ ++ ++ +diff --git a/panels/wwan/cc-wwan-network-dialog.c b/panels/wwan/cc-wwan-network-dialog.c +new file mode 100644 +index 000000000..1c8883b88 +--- /dev/null ++++ b/panels/wwan/cc-wwan-network-dialog.c +@@ -0,0 +1,443 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-network-dialog.c ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#undef G_LOG_DOMAIN ++#define G_LOG_DOMAIN "cc-wwan-network-dialog" ++ ++#include ++#include ++#include ++ ++#include "list-box-helper.h" ++#include "cc-list-row.h" ++#include "cc-wwan-errors-private.h" ++#include "cc-wwan-network-dialog.h" ++#include "cc-wwan-resources.h" ++ ++/** ++ * @short_description: WWAN network operator selection dialog ++ */ ++ ++#define CC_TYPE_WWAN_NETWORK_ROW (cc_wwan_network_row_get_type()) ++G_DECLARE_FINAL_TYPE (CcWwanNetworkRow, cc_wwan_network_row, CC, WWAN_NETWORK_ROW, GtkListBoxRow) ++ ++struct _CcWwanNetworkDialog ++{ ++ GtkDialog parent_instance; ++ ++ CcListRow *automatic_row; ++ GtkButton *button_apply; ++ GtkSpinner *loading_spinner; ++ GtkBox *network_search_title; ++ GtkLabel *notification_label; ++ GtkRevealer *notification_revealer; ++ GtkListBox *operator_list_box; ++ GtkButton *refresh_button; ++ ++ CcWwanDevice *device; ++ GList *operator_list; ++ ++ CcWwanNetworkRow *selected_row; ++ ++ GCancellable *search_cancellable; ++ ++ guint revealer_timeout_id; ++ gboolean no_update_network; ++}; ++ ++G_DEFINE_TYPE (CcWwanNetworkDialog, cc_wwan_network_dialog, GTK_TYPE_DIALOG) ++ ++ ++enum { ++ PROP_0, ++ PROP_DEVICE, ++ N_PROPS ++}; ++ ++static GParamSpec *properties[N_PROPS]; ++ ++struct _CcWwanNetworkRow ++{ ++ GtkListBoxRow parent_instance; ++ GtkImage *ok_emblem; ++ gchar *operator_code; ++}; ++ ++G_DEFINE_TYPE (CcWwanNetworkRow, cc_wwan_network_row, GTK_TYPE_LIST_BOX_ROW) ++ ++static void ++cc_wwan_network_row_finalize (GObject *object) ++{ ++ CcWwanNetworkRow *row = (CcWwanNetworkRow *)object; ++ ++ g_free (row->operator_code); ++ ++ G_OBJECT_CLASS (cc_wwan_network_row_parent_class)->finalize (object); ++} ++ ++static void ++cc_wwan_network_row_class_init (CcWwanNetworkRowClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->finalize = cc_wwan_network_row_finalize; ++} ++ ++static void ++cc_wwan_network_row_init (CcWwanNetworkRow *row) ++{ ++} ++ ++static void ++cc_wwan_on_notification_closed (CcWwanNetworkDialog *self, ++ GtkWidget *button) ++{ ++ g_assert (CC_IS_WWAN_NETWORK_DIALOG (self)); ++ ++ gtk_revealer_set_reveal_child (GTK_REVEALER (self->notification_revealer), FALSE); ++ ++ if (self->revealer_timeout_id != 0) ++ g_source_remove (self->revealer_timeout_id); ++ ++ self->revealer_timeout_id = 0; ++} ++ ++static gboolean ++cc_wwan_on_notification_timeout (gpointer user_data) ++{ ++ cc_wwan_on_notification_closed (user_data, NULL); ++ ++ return G_SOURCE_REMOVE; ++} ++ ++static void ++cc_wwan_network_changed_cb (CcWwanNetworkDialog *self, ++ CcWwanNetworkRow *row) ++{ ++ if (row == self->selected_row) ++ return; ++ ++ gtk_widget_set_sensitive (GTK_WIDGET (self->button_apply), TRUE); ++ gtk_widget_show (GTK_WIDGET (row->ok_emblem)); ++ ++ if (self->selected_row) ++ gtk_widget_hide (GTK_WIDGET (self->selected_row->ok_emblem)); ++ ++ self->selected_row = row; ++} ++ ++/* ++ * cc_wwan_network_dialog_row_new: ++ * @self: a #CcWwanNetworkDialog ++ * @operator_name: (transfer full): The long operator name ++ * @operator_id: (transfer full): operator id ++ */ ++static CcWwanNetworkRow * ++cc_wwan_network_dialog_row_new (CcWwanNetworkDialog *self, ++ const gchar *operator_name, ++ const gchar *operator_code) ++{ ++ CcWwanNetworkRow *row; ++ GtkWidget *box, *label, *image; ++ ++ row = g_object_new (CC_TYPE_WWAN_NETWORK_ROW, NULL); ++ ++ box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); ++ gtk_widget_show (box); ++ g_object_set (box, "margin", 18, NULL); ++ gtk_container_add (GTK_CONTAINER (row), box); ++ ++ label = gtk_label_new (operator_name); ++ gtk_widget_show (label); ++ gtk_widget_set_hexpand (label, TRUE); ++ gtk_widget_set_halign (label, GTK_ALIGN_START); ++ gtk_container_add (GTK_CONTAINER (box), label); ++ ++ image = gtk_image_new_from_icon_name ("emblem-ok-symbolic", GTK_ICON_SIZE_BUTTON); ++ row->ok_emblem = GTK_IMAGE (image); ++ gtk_container_add (GTK_CONTAINER (box), GTK_WIDGET (row->ok_emblem)); ++ ++ row->operator_code = g_strdup (operator_code); ++ ++ return row; ++} ++ ++static void ++cc_wwan_network_dialog_update_current_network (CcWwanNetworkDialog *self) ++{ ++ CcWwanNetworkRow *row; ++ const gchar *operator_name; ++ ++ operator_name = cc_wwan_device_get_operator_name (self->device); ++ ++ if (!operator_name || operator_name[0] == '\0') ++ return; ++ ++ gtk_container_foreach (GTK_CONTAINER (self->operator_list_box), ++ (GtkCallback)gtk_widget_destroy, NULL); ++ ++ row = cc_wwan_network_dialog_row_new (self, operator_name, ""); ++ self->selected_row = row; ++ gtk_container_add (GTK_CONTAINER (self->operator_list_box), GTK_WIDGET (row)); ++ gtk_widget_show_all (GTK_WIDGET (self->operator_list_box)); ++} ++ ++static void ++cc_wwan_network_dialog_update (CcWwanNetworkDialog *self) ++{ ++ CcWwanNetworkRow *row; ++ GList *item; ++ const gchar *operator_code, *operator_name; ++ ++ gtk_container_foreach (GTK_CONTAINER (self->operator_list_box), ++ (GtkCallback)gtk_widget_destroy, NULL); ++ ++ for (item = self->operator_list; item; item = item->next) ++ { ++ operator_code = mm_modem_3gpp_network_get_operator_code (item->data); ++ operator_name = mm_modem_3gpp_network_get_operator_long (item->data); ++ ++ row = cc_wwan_network_dialog_row_new (self, operator_name, operator_code); ++ gtk_widget_show (GTK_WIDGET (row)); ++ gtk_container_add (GTK_CONTAINER (self->operator_list_box), GTK_WIDGET (row)); ++ } ++} ++ ++static void ++cc_wwan_network_scan_complete_cb (GObject *object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ g_autoptr(CcWwanNetworkDialog) self = user_data; ++ g_autoptr(GError) error = NULL; ++ ++ if (self->operator_list) ++ g_list_free_full (self->operator_list, (GDestroyNotify)mm_modem_3gpp_network_free); ++ ++ gtk_widget_set_sensitive (GTK_WIDGET (self->refresh_button), TRUE); ++ gtk_spinner_stop (self->loading_spinner); ++ self->operator_list = cc_wwan_device_scan_networks_finish (self->device, result, &error); ++ gtk_widget_set_sensitive (GTK_WIDGET (self->operator_list_box), !error); ++ ++ if (!error) ++ { ++ cc_wwan_network_dialog_update (self); ++ gtk_widget_show (GTK_WIDGET (self->operator_list_box)); ++ } ++ else if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ { ++ self->no_update_network = TRUE; ++ gtk_widget_activate (GTK_WIDGET (self->automatic_row)); ++ gtk_widget_set_sensitive (GTK_WIDGET (self->operator_list_box), FALSE); ++ ++ gtk_label_set_label (self->notification_label, ++ cc_wwan_error_get_message (error)); ++ gtk_revealer_set_reveal_child (self->notification_revealer, TRUE); ++ self->revealer_timeout_id = g_timeout_add_seconds (5, cc_wwan_on_notification_timeout, self); ++ ++ gtk_widget_show (GTK_WIDGET (self->operator_list_box)); ++ g_warning ("Error: scanning networks failed: %s", error->message); ++ } ++} ++ ++static void ++cc_wwan_network_dialog_refresh_networks (CcWwanNetworkDialog *self) ++{ ++ gtk_widget_set_sensitive (GTK_WIDGET (self->refresh_button), FALSE); ++ gtk_spinner_start (self->loading_spinner); ++ cc_wwan_device_scan_networks (self->device, self->search_cancellable, ++ (GAsyncReadyCallback)cc_wwan_network_scan_complete_cb, ++ g_object_ref (self)); ++} ++ ++static void ++cc_wwan_network_dialog_apply_clicked_cb (CcWwanNetworkDialog *self) ++{ ++ gboolean is_auto; ++ ++ g_assert (CC_IS_WWAN_NETWORK_DIALOG (self)); ++ ++ is_auto = cc_list_row_get_active (self->automatic_row); ++ ++ if (is_auto) ++ cc_wwan_device_register_network (self->device, "", NULL, NULL, NULL); ++ else if (self->selected_row) ++ cc_wwan_device_register_network (self->device, self->selected_row->operator_code, NULL, NULL, self); ++ else ++ g_warn_if_reached (); ++ ++ gtk_widget_hide (GTK_WIDGET (self)); ++} ++ ++static void ++cc_wwan_auto_network_changed_cb (CcWwanNetworkDialog *self, ++ GParamSpec *pspec, ++ CcListRow *auto_network_row) ++{ ++ gboolean is_auto; ++ ++ g_assert (CC_IS_WWAN_NETWORK_DIALOG (self)); ++ g_assert (CC_IS_LIST_ROW (auto_network_row)); ++ ++ is_auto = cc_list_row_get_active (auto_network_row); ++ gtk_widget_set_sensitive (GTK_WIDGET (self->button_apply), is_auto); ++ ++ if (self->no_update_network) ++ { ++ self->no_update_network = FALSE; ++ return; ++ } ++ ++ self->selected_row = NULL; ++ gtk_widget_set_visible (GTK_WIDGET (self->network_search_title), !is_auto); ++ gtk_widget_set_sensitive (GTK_WIDGET (self->operator_list_box), !is_auto); ++ gtk_widget_hide (GTK_WIDGET (self->operator_list_box)); ++ ++ if (is_auto) ++ { ++ g_cancellable_cancel (self->search_cancellable); ++ g_cancellable_reset (self->search_cancellable); ++ } ++ else ++ { ++ cc_wwan_network_dialog_refresh_networks (self); ++ } ++} ++ ++static void ++cc_wwan_network_dialog_show (GtkWidget *widget) ++{ ++ CcWwanNetworkDialog *self = (CcWwanNetworkDialog *)widget; ++ gboolean is_auto; ++ ++ is_auto = cc_wwan_device_is_auto_network (self->device); ++ ++ g_object_set (self->automatic_row, "active", is_auto, NULL); ++ ++ cc_wwan_network_dialog_update_current_network (self); ++ ++ GTK_WIDGET_CLASS (cc_wwan_network_dialog_parent_class)->show (widget); ++} ++ ++static void ++cc_wwan_network_dialog_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ CcWwanNetworkDialog *self = (CcWwanNetworkDialog *)object; ++ ++ switch (prop_id) ++ { ++ case PROP_DEVICE: ++ self->device = g_value_dup_object (value); ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++cc_wwan_network_dialog_dispose (GObject *object) ++{ ++ CcWwanNetworkDialog *self = (CcWwanNetworkDialog *)object; ++ ++ if (self->revealer_timeout_id != 0) ++ g_source_remove (self->revealer_timeout_id); ++ ++ self->revealer_timeout_id = 0; ++ ++ g_cancellable_cancel (self->search_cancellable); ++ ++ g_clear_object (&self->search_cancellable); ++ g_clear_object (&self->device); ++ ++ G_OBJECT_CLASS (cc_wwan_network_dialog_parent_class)->dispose (object); ++} ++ ++static void ++cc_wwan_network_dialog_class_init (CcWwanNetworkDialogClass *klass) ++{ ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->set_property = cc_wwan_network_dialog_set_property; ++ object_class->dispose = cc_wwan_network_dialog_dispose; ++ ++ widget_class->show = cc_wwan_network_dialog_show; ++ ++ properties[PROP_DEVICE] = ++ g_param_spec_object ("device", ++ "Device", ++ "The WWAN Device", ++ CC_TYPE_WWAN_DEVICE, ++ G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); ++ ++ g_object_class_install_properties (object_class, N_PROPS, properties); ++ ++ gtk_widget_class_set_template_from_resource (widget_class, ++ "/org/gnome/control-center/wwan/cc-wwan-network-dialog.ui"); ++ ++ gtk_widget_class_bind_template_child (widget_class, CcWwanNetworkDialog, automatic_row); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanNetworkDialog, button_apply); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanNetworkDialog, loading_spinner); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanNetworkDialog, network_search_title); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanNetworkDialog, notification_label); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanNetworkDialog, notification_revealer); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanNetworkDialog, operator_list_box); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanNetworkDialog, refresh_button); ++ ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_network_changed_cb); ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_on_notification_closed); ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_auto_network_changed_cb); ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_network_dialog_refresh_networks); ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_network_dialog_apply_clicked_cb); ++} ++ ++static void ++cc_wwan_network_dialog_init (CcWwanNetworkDialog *self) ++{ ++ gtk_widget_init_template (GTK_WIDGET (self)); ++ ++ self->search_cancellable = g_cancellable_new (); ++ ++ gtk_list_box_set_header_func (self->operator_list_box, ++ cc_list_box_update_header_func, ++ NULL, NULL); ++} ++ ++CcWwanNetworkDialog * ++cc_wwan_network_dialog_new (GtkWindow *parent_window, ++ CcWwanDevice *device) ++{ ++ g_return_val_if_fail (GTK_IS_WINDOW (parent_window), NULL); ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (device), NULL); ++ ++ return g_object_new (CC_TYPE_WWAN_NETWORK_DIALOG, ++ "transient-for", parent_window, ++ "use-header-bar", 1, ++ "device", device, ++ NULL); ++} +diff --git a/panels/wwan/cc-wwan-network-dialog.h b/panels/wwan/cc-wwan-network-dialog.h +new file mode 100644 +index 000000000..1818a0876 +--- /dev/null ++++ b/panels/wwan/cc-wwan-network-dialog.h +@@ -0,0 +1,40 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-network-dialog.h ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#pragma once ++ ++#include ++#include ++ ++#include "cc-wwan-device.h" ++ ++G_BEGIN_DECLS ++ ++#define CC_TYPE_WWAN_NETWORK_DIALOG (cc_wwan_network_dialog_get_type()) ++G_DECLARE_FINAL_TYPE (CcWwanNetworkDialog, cc_wwan_network_dialog, CC, WWAN_NETWORK_DIALOG, GtkDialog) ++ ++CcWwanNetworkDialog *cc_wwan_network_dialog_new (GtkWindow *parent_window, ++ CcWwanDevice *device); ++ ++G_END_DECLS +diff --git a/panels/wwan/cc-wwan-network-dialog.ui b/panels/wwan/cc-wwan-network-dialog.ui +new file mode 100644 +index 000000000..03223b333 +--- /dev/null ++++ b/panels/wwan/cc-wwan-network-dialog.ui +@@ -0,0 +1,188 @@ ++ ++ ++ ++ +diff --git a/panels/wwan/cc-wwan-panel.c b/panels/wwan/cc-wwan-panel.c +new file mode 100644 +index 000000000..963c46900 +--- /dev/null ++++ b/panels/wwan/cc-wwan-panel.c +@@ -0,0 +1,929 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-panel.c ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#undef G_LOG_DOMAIN ++#define G_LOG_DOMAIN "cc-wwan-panel" ++ ++#include ++#include ++#include ++ ++#include "cc-wwan-device.h" ++#include "cc-wwan-data.h" ++#include "cc-wwan-device-page.h" ++#include "cc-wwan-panel.h" ++#include "cc-wwan-resources.h" ++ ++#include "shell/cc-application.h" ++#include "shell/cc-debug.h" ++#include "shell/cc-object-storage.h" ++ ++typedef enum { ++ OPERATION_NULL, ++ OPERATION_SHOW_DEVICE, ++} CmdlineOperation; ++ ++struct _CcWwanPanel ++{ ++ CcPanel parent_instance; ++ ++ GtkListBox *data_select_listbox; ++ GtkPopover *data_select_popover; ++ GtkLabel *data_sim_label; ++ GtkListBox *data_sim_select_listbox; ++ GtkStack *devices_stack; ++ GtkStackSwitcher *devices_switcher; ++ GtkSwitch *enable_switch; ++ GtkStack *main_stack; ++ GtkRevealer *multi_device_revealer; ++ GtkLabel *notification_label; ++ GtkRevealer *notification_revealer; ++ ++ GDBusProxy *rfkill_proxy; ++ MMManager *mm_manager; ++ NMClient *nm_client; ++ ++ /* The default device that will be used for data */ ++ CcWwanDevice *data_device; ++ GListStore *devices; ++ GListStore *data_devices; ++ GCancellable *cancellable; ++ ++ CmdlineOperation arg_operation; ++ char *arg_device; ++ ++ guint revealer_timeout_id; ++}; ++ ++enum { ++ PROP_0, ++ PROP_PARAMETERS ++}; ++ ++G_DEFINE_TYPE (CcWwanPanel, cc_wwan_panel, CC_TYPE_PANEL) ++ ++ ++#define CC_TYPE_DATA_DEVICE_ROW (cc_data_device_row_get_type()) ++G_DECLARE_FINAL_TYPE (CcDataDeviceRow, cc_data_device_row, CC, DATA_DEVICE_ROW, GtkListBoxRow) ++ ++struct _CcDataDeviceRow ++{ ++ GtkListBoxRow parent_instance; ++ ++ GtkImage *ok_emblem; ++ CcWwanDevice *device; ++}; ++ ++G_DEFINE_TYPE (CcDataDeviceRow, cc_data_device_row, GTK_TYPE_LIST_BOX_ROW) ++ ++static void ++cc_data_device_row_class_init (CcDataDeviceRowClass *klass) ++{ ++} ++ ++static void ++cc_data_device_row_init (CcDataDeviceRow *row) ++{ ++} ++ ++static CmdlineOperation ++cmdline_operation_from_string (const gchar *str) ++{ ++ if (g_strcmp0 (str, "show-device") == 0) ++ return OPERATION_SHOW_DEVICE; ++ ++ g_warning ("Invalid additional argument %s", str); ++ return OPERATION_NULL; ++} ++ ++static void ++reset_command_line_args (CcWwanPanel *self) ++{ ++ self->arg_operation = OPERATION_NULL; ++ g_clear_pointer (&self->arg_device, g_free); ++} ++ ++static gboolean ++verify_argv (CcWwanPanel *self, ++ const char **args) ++{ ++ switch (self->arg_operation) ++ { ++ case OPERATION_SHOW_DEVICE: ++ if (self->arg_device == NULL) ++ { ++ g_warning ("Operation %s requires an object path", args[0]); ++ return FALSE; ++ } ++ default: ++ return TRUE; ++ } ++} ++ ++static void ++handle_argv (CcWwanPanel *self) ++{ ++ if (self->arg_operation == OPERATION_SHOW_DEVICE && ++ self->arg_operation) ++ { ++ g_autoptr(GList) pages = NULL; ++ ++ pages = gtk_container_get_children (GTK_CONTAINER (self->devices_stack)); ++ ++ for (GList *page = pages; page; page = page->next) ++ { ++ CcWwanDevice *device; ++ ++ device = cc_wwan_device_page_get_device (page->data); ++ ++ if (g_strcmp0 (cc_wwan_device_get_path (device), self->arg_device) == 0) ++ { ++ gtk_stack_set_visible_child (GTK_STACK (self->devices_stack), page->data); ++ g_debug ("Opening device %s", self->arg_device); ++ reset_command_line_args (self); ++ return; ++ } ++ } ++ } ++} ++ ++static gboolean ++wwan_panel_device_is_supported (GDBusObject *object) ++{ ++ MMObject *mm_object; ++ MMModem *modem; ++ MMModemCapability capability; ++ ++ g_assert (G_IS_DBUS_OBJECT (object)); ++ ++ mm_object = MM_OBJECT (object); ++ modem = mm_object_get_modem (mm_object); ++ capability = mm_modem_get_current_capabilities (modem); ++ ++ /* We Support only GSM/3G/LTE devices */ ++ if (capability & (MM_MODEM_CAPABILITY_GSM_UMTS | ++ MM_MODEM_CAPABILITY_LTE | ++ MM_MODEM_CAPABILITY_LTE_ADVANCED)) ++ return TRUE; ++ ++ return FALSE; ++} ++ ++static gint ++wwan_model_get_item_index (GListModel *model, ++ gpointer item) ++{ ++ guint i, n_items; ++ ++ g_assert (G_IS_LIST_MODEL (model)); ++ g_assert (G_IS_OBJECT (item)); ++ ++ n_items = g_list_model_get_n_items (model); ++ ++ for (i = 0; i < n_items; i++) ++ { ++ g_autoptr(GObject) object = NULL; ++ ++ object = g_list_model_get_item (model, i); ++ ++ if (object == item) ++ return i; ++ } ++ ++ return -1; ++} ++ ++static CcWwanDevice * ++wwan_model_get_item_from_mm_object (GListModel *model, ++ MMObject *mm_object) ++{ ++ const gchar *modem_path, *device_path; ++ guint i, n_items; ++ ++ n_items = g_list_model_get_n_items (model); ++ modem_path = mm_object_get_path (mm_object); ++ ++ for (i = 0; i < n_items; i++) ++ { ++ g_autoptr(CcWwanDevice) device = NULL; ++ ++ device = g_list_model_get_item (model, i); ++ device_path = cc_wwan_device_get_path (device); ++ ++ if (g_str_equal (modem_path, device_path)) ++ return g_steal_pointer (&device); ++ } ++ ++ return NULL; ++} ++ ++static CcDataDeviceRow * ++cc_data_device_row_new (CcWwanDevice *device, ++ CcWwanPanel *self) ++{ ++ CcDataDeviceRow *row; ++ GtkWidget *box, *label, *image; ++ g_autofree gchar *operator = NULL; ++ gint index; ++ ++ row = g_object_new (CC_TYPE_DATA_DEVICE_ROW, NULL); ++ row->device = device; ++ ++ box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); ++ gtk_widget_show (box); ++ g_object_set (box, "margin", 12, NULL); ++ gtk_container_add (GTK_CONTAINER (row), box); ++ ++ index = wwan_model_get_item_index (G_LIST_MODEL (self->devices), device); ++ operator = g_strdup_printf ("SIM %d", index + 1); ++ label = gtk_label_new (operator); ++ gtk_widget_show (label); ++ gtk_container_add (GTK_CONTAINER (box), label); ++ ++ image = gtk_image_new_from_icon_name ("emblem-ok-symbolic", GTK_ICON_SIZE_BUTTON); ++ row->ok_emblem = GTK_IMAGE (image); ++ gtk_container_add (GTK_CONTAINER (box), image); ++ ++ return row; ++} ++ ++static void ++wwan_notification_close_clicked_cb (CcWwanPanel *self) ++{ ++ gtk_revealer_set_reveal_child (self->notification_revealer, FALSE); ++ ++ if (self->revealer_timeout_id != 0) ++ g_source_remove (self->revealer_timeout_id); ++ ++ self->revealer_timeout_id = 0; ++} ++ ++static void ++wwan_data_selector_clicked_cb (CcWwanPanel *self) ++{ ++ if (gtk_widget_is_visible (GTK_WIDGET (self->data_select_popover))) ++ gtk_popover_popdown (self->data_select_popover); ++ else ++ gtk_popover_popup (self->data_select_popover); ++} ++ ++static void ++cc_wwan_panel_update_data_selection (CcDataDeviceRow *row, ++ CcWwanPanel *self) ++{ ++ if (self->data_device == row->device) ++ { ++ g_autofree gchar *str = NULL; ++ gint i; ++ ++ i = wwan_model_get_item_index (G_LIST_MODEL (self->devices), row->device); ++ g_assert (i >= 0); ++ ++ /* Human index starts from 1 */ ++ str = g_strdup_printf ("SIM %d", i + 1); ++ gtk_label_set_label (self->data_sim_label, str); ++ ++ gtk_widget_show (GTK_WIDGET (row->ok_emblem)); ++ } ++ else ++ { ++ gtk_widget_hide (GTK_WIDGET (row->ok_emblem)); ++ } ++} ++ ++static void ++cc_wwan_data_item_activate_cb (CcWwanPanel *self, ++ CcDataDeviceRow *row) ++{ ++ CcWwanData *data; ++ ++ gtk_popover_popdown (self->data_select_popover); ++ ++ if (row->device == self->data_device) ++ return; ++ ++ /* Set lower priority for previously selected APN */ ++ data = cc_wwan_device_get_data (self->data_device); ++ cc_wwan_data_set_priority (data, CC_WWAN_APN_PRIORITY_LOW); ++ cc_wwan_data_save_settings (data, NULL, NULL, NULL); ++ ++ /* Set high priority for currently selected APN */ ++ data = cc_wwan_device_get_data (row->device); ++ cc_wwan_data_set_priority (data, CC_WWAN_APN_PRIORITY_HIGH); ++ cc_wwan_data_save_settings (data, NULL, NULL, NULL); ++ ++ self->data_device = row->device; ++ gtk_container_foreach (GTK_CONTAINER (self->data_select_listbox), ++ (GtkCallback) cc_wwan_panel_update_data_selection, self); ++} ++ ++static void ++wwan_on_airplane_off_clicked_cb (CcWwanPanel *self) ++{ ++ g_debug ("Airplane Mode Off clicked, disabling airplane mode"); ++ g_dbus_proxy_call (self->rfkill_proxy, ++ "org.freedesktop.DBus.Properties.Set", ++ g_variant_new_parsed ("('org.gnome.SettingsDaemon.Rfkill'," ++ "'AirplaneMode', %v)", ++ g_variant_new_boolean (FALSE)), ++ G_DBUS_CALL_FLAGS_NONE, ++ -1, ++ self->cancellable, ++ NULL, ++ NULL); ++} ++ ++static gboolean ++cc_wwan_panel_get_cached_dbus_property (GDBusProxy *proxy, ++ const gchar *property) ++{ ++ g_autoptr(GVariant) result = NULL; ++ ++ g_assert (G_IS_DBUS_PROXY (proxy)); ++ g_assert (property && *property); ++ ++ result = g_dbus_proxy_get_cached_property (proxy, property); ++ g_assert (!result || g_variant_is_of_type (result, G_VARIANT_TYPE_BOOLEAN)); ++ ++ return result ? g_variant_get_boolean (result) : FALSE; ++} ++ ++static void ++cc_wwan_panel_update_view (CcWwanPanel *self) ++{ ++ gboolean has_airplane, is_airplane = FALSE, enabled = FALSE; ++ ++ has_airplane = cc_wwan_panel_get_cached_dbus_property (self->rfkill_proxy, "HasAirplaneMode"); ++ has_airplane &= cc_wwan_panel_get_cached_dbus_property (self->rfkill_proxy, "ShouldShowAirplaneMode"); ++ ++ if (has_airplane) ++ { ++ is_airplane = cc_wwan_panel_get_cached_dbus_property (self->rfkill_proxy, "AirplaneMode"); ++ is_airplane |= cc_wwan_panel_get_cached_dbus_property (self->rfkill_proxy, "HardwareAirplaneMode"); ++ } ++ ++ if (self->nm_client) ++ enabled = nm_client_wwan_get_enabled (self->nm_client); ++ ++ if (has_airplane && is_airplane) ++ gtk_stack_set_visible_child_name (self->main_stack, "airplane-mode"); ++ else if (enabled && g_list_model_get_n_items (G_LIST_MODEL (self->devices)) > 0) ++ gtk_stack_set_visible_child_name (self->main_stack, "device-settings"); ++ else ++ gtk_stack_set_visible_child_name (self->main_stack, "no-wwan-devices"); ++ ++ gtk_widget_set_sensitive (GTK_WIDGET (self->enable_switch), !is_airplane); ++ ++ if (enabled) ++ gtk_revealer_set_reveal_child (self->multi_device_revealer, ++ g_list_model_get_n_items (G_LIST_MODEL (self->devices)) > 1); ++} ++ ++static void ++cc_wwan_panel_on_notification_closed (CcWwanPanel *self, ++ GtkWidget *button) ++{ ++ gtk_revealer_set_reveal_child (self->notification_revealer, FALSE); ++ ++ if (self->revealer_timeout_id != 0) ++ g_source_remove (self->revealer_timeout_id); ++ ++ self->revealer_timeout_id = 0; ++} ++ ++static gboolean ++cc_wwan_panel_on_notification_timeout (gpointer user_data) ++{ ++ cc_wwan_panel_on_notification_closed (user_data, NULL); ++ ++ return G_SOURCE_REMOVE; ++} ++ ++static void ++cc_wwan_panel_notification_changed_cb (CcWwanPanel *self) ++{ ++ const gchar *label; ++ ++ label = gtk_label_get_label (self->notification_label); ++ ++ if (label && *label) ++ { ++ gtk_revealer_set_reveal_child (self->notification_revealer, TRUE); ++ self->revealer_timeout_id = g_timeout_add_seconds (5, cc_wwan_panel_on_notification_timeout, self); ++ } ++ else ++ { ++ cc_wwan_panel_on_notification_closed (self, NULL); ++ } ++} ++ ++static void ++cc_wwan_panel_add_device (CcWwanPanel *self, ++ CcWwanDevice *device) ++{ ++ CcWwanDevicePage *device_page; ++ g_autofree gchar *operator_name = NULL; ++ g_autofree gchar *stack_name = NULL; ++ guint n_items; ++ ++ g_list_store_append (self->devices, device); ++ ++ n_items = g_list_model_get_n_items (G_LIST_MODEL (self->devices)); ++ operator_name = g_strdup_printf (_("SIM %d"), n_items); ++ stack_name = g_strdup_printf ("sim-%d", n_items); ++ ++ device_page = cc_wwan_device_page_new (device, GTK_WIDGET (self->notification_label)); ++ cc_wwan_device_page_set_sim_index (device_page, n_items); ++ gtk_stack_add_titled (self->devices_stack, ++ GTK_WIDGET (device_page), stack_name, operator_name); ++} ++ ++static void ++cc_wwan_panel_update_page_title (CcWwanDevicePage *device_page, ++ CcWwanPanel *self) ++{ ++ g_autofree gchar *title = NULL; ++ g_autofree gchar *name = NULL; ++ CcWwanDevice *device; ++ GtkWidget *parent; ++ gint index; ++ ++ device = cc_wwan_device_page_get_device (device_page); ++ ++ parent = gtk_widget_get_parent (GTK_WIDGET (device_page)); ++ index = wwan_model_get_item_index (G_LIST_MODEL (self->devices), device); ++ ++ if (index == -1) ++ g_return_if_reached (); ++ ++ /* index starts with 0, but we need human readable index to be 1+ */ ++ cc_wwan_device_page_set_sim_index (device_page, index + 1); ++ title = g_strdup_printf (_("SIM %d"), index + 1); ++ name = g_strdup_printf ("sim-%d", index + 1); ++ gtk_container_child_set (GTK_CONTAINER (parent), ++ GTK_WIDGET (device_page), ++ "title", title, ++ "name", name, ++ NULL); ++} ++ ++static void ++cc_wwan_panel_remove_mm_object (CcWwanPanel *self, ++ MMObject *mm_object) ++{ ++ g_autoptr(CcWwanDevice) device = NULL; ++ GtkWidget *device_page; ++ g_autofree gchar *stack_name = NULL; ++ guint n_items; ++ gint index; ++ ++ device = wwan_model_get_item_from_mm_object (G_LIST_MODEL (self->devices), mm_object); ++ ++ if (!device) ++ return; ++ ++ index = wwan_model_get_item_index (G_LIST_MODEL (self->data_devices), device); ++ if (index != -1) ++ g_list_store_remove (self->data_devices, index); ++ ++ index = wwan_model_get_item_index (G_LIST_MODEL (self->devices), device); ++ if (index == -1) ++ return; ++ ++ g_list_store_remove (self->devices, index); ++ stack_name = g_strdup_printf ("sim-%d", index + 1); ++ device_page = gtk_stack_get_child_by_name (self->devices_stack, stack_name); ++ gtk_container_remove (GTK_CONTAINER (self->devices_stack), device_page); ++ ++ n_items = g_list_model_get_n_items (G_LIST_MODEL (self->data_devices)); ++ g_list_model_items_changed (G_LIST_MODEL (self->data_devices), 0, n_items, n_items); ++ gtk_container_foreach (GTK_CONTAINER (self->devices_stack), ++ (GtkCallback)cc_wwan_panel_update_page_title, ++ self); ++} ++ ++static void ++cc_wwan_panel_update_data_connections (CcWwanPanel *self) ++{ ++ CcWwanData *device_data, *active_data = NULL; ++ guint n_items; ++ gint i; ++ ++ /* ++ * We can’t predict the order in which the data of device is enabled. ++ * But we have to keep data store in the same order as device store. ++ * So let’s remove every data device and re-add. ++ */ ++ g_list_store_remove_all (self->data_devices); ++ n_items = g_list_model_get_n_items (G_LIST_MODEL (self->devices)); ++ ++ for (i = 0; i < n_items; i++) ++ { ++ g_autoptr(CcWwanDevice) device = NULL; ++ ++ device = g_list_model_get_item (G_LIST_MODEL (self->devices), i); ++ device_data = cc_wwan_device_get_data (device); ++ ++ if (!device_data) ++ continue; ++ ++ if ((!active_data || ++ cc_wwan_data_get_priority (device_data) > cc_wwan_data_get_priority (active_data)) && ++ cc_wwan_data_get_enabled (device_data)) ++ { ++ active_data = device_data; ++ self->data_device = device; ++ } ++ ++ if (cc_wwan_data_get_enabled (device_data)) ++ g_list_store_append (self->data_devices, device); ++ } ++ ++ gtk_widget_set_sensitive (GTK_WIDGET (self->data_sim_select_listbox), ++ g_list_model_get_n_items (G_LIST_MODEL (self->data_devices)) > 1); ++ if (active_data) ++ gtk_container_foreach (GTK_CONTAINER (self->data_select_listbox), ++ (GtkCallback)cc_wwan_panel_update_data_selection, self); ++ else ++ gtk_label_set_label (self->data_sim_label, ""); ++} ++ ++static void ++cc_wwan_panel_update_devices (CcWwanPanel *self) ++{ ++ GList *devices, *iter; ++ ++ devices = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (self->mm_manager)); ++ ++ for (iter = devices; iter; iter = iter->next) ++ { ++ MMObject *mm_object = iter->data; ++ CcWwanDevice *device; ++ ++ if(!wwan_panel_device_is_supported (iter->data)) ++ continue; ++ ++ device = cc_wwan_device_new (mm_object, G_OBJECT (self->nm_client)); ++ cc_wwan_panel_add_device (self, device); ++ g_signal_connect_object (device, "notify::has-data", ++ G_CALLBACK (cc_wwan_panel_update_data_connections), ++ self, G_CONNECT_SWAPPED); ++ ++ if (cc_wwan_device_get_data (device)) ++ g_list_store_append (self->data_devices, device); ++ } ++ ++ cc_wwan_panel_update_data_connections (self); ++ handle_argv (self); ++} ++ ++static void ++wwan_panel_device_added_cb (CcWwanPanel *self, ++ GDBusObject *object) ++{ ++ CcWwanDevice *device; ++ ++ if(!wwan_panel_device_is_supported (object)) ++ return; ++ ++ device = cc_wwan_device_new (MM_OBJECT (object), G_OBJECT (self->nm_client)); ++ cc_wwan_panel_add_device (self, device); ++ g_signal_connect_object (device, "notify::has-data", ++ G_CALLBACK (cc_wwan_panel_update_data_connections), ++ self, G_CONNECT_SWAPPED); ++ cc_wwan_panel_update_view (self); ++ handle_argv (self); ++} ++ ++static void ++wwan_panel_device_removed_cb (CcWwanPanel *self, ++ GDBusObject *object) ++{ ++ if (!wwan_panel_device_is_supported (object)) ++ return; ++ ++ cc_wwan_panel_remove_mm_object (self, MM_OBJECT (object)); ++ ++ gtk_revealer_set_reveal_child (self->multi_device_revealer, ++ g_list_model_get_n_items (G_LIST_MODEL (self->devices)) > 1); ++} ++ ++static GPtrArray * ++variant_av_to_string_array (GVariant *array) ++{ ++ GVariant *v; ++ GPtrArray *strv; ++ GVariantIter iter; ++ gsize count; ++ ++ count = g_variant_iter_init (&iter, array); ++ strv = g_ptr_array_sized_new (count + 1); ++ ++ while (g_variant_iter_next (&iter, "v", &v)) ++ { ++ g_ptr_array_add (strv, (gpointer)g_variant_get_string (v, NULL)); ++ g_variant_unref (v); ++ } ++ g_ptr_array_add (strv, NULL); /* NULL-terminate the strv data array */ ++ ++ return strv; ++} ++ ++static void ++cc_wwan_panel_set_property (GObject *object, ++ guint property_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ CcWwanPanel *self = CC_WWAN_PANEL (object); ++ ++ switch (property_id) ++ { ++ case PROP_PARAMETERS: ++ { ++ GVariant *parameters; ++ ++ reset_command_line_args (self); ++ ++ parameters = g_value_get_variant (value); ++ if (parameters) ++ { ++ g_autoptr(GPtrArray) array = NULL; ++ const gchar **args; ++ ++ array = variant_av_to_string_array (parameters); ++ args = (const gchar **) array->pdata; ++ ++ g_debug ("Invoked with operation %s", args[0]); ++ ++ if (args[0]) ++ self->arg_operation = cmdline_operation_from_string (args[0]); ++ if (args[0] && args[1]) ++ self->arg_device = g_strdup (args[1]); ++ ++ if (!verify_argv (self, (const char **) args)) ++ { ++ reset_command_line_args (self); ++ return; ++ } ++ g_debug ("Calling handle_argv() after setting property"); ++ handle_argv (self); ++ } ++ break; ++ } ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); ++ } ++} ++ ++static void ++cc_wwan_panel_constructed (GObject *object) ++{ ++ CcWwanPanel *self = (CcWwanPanel *)object; ++ ++ G_OBJECT_CLASS (cc_wwan_panel_parent_class)->constructed (object); ++ ++ cc_shell_embed_widget_in_header (cc_panel_get_shell (CC_PANEL (self)), ++ GTK_WIDGET (self->enable_switch), GTK_POS_RIGHT); ++ ++ if (self->nm_client) ++ { ++ g_object_bind_property (self->nm_client, "wwan-enabled", ++ self->enable_switch, "active", ++ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); ++ } ++} ++ ++static void ++cc_wwan_panel_dispose (GObject *object) ++{ ++ CcWwanPanel *self = (CcWwanPanel *)object; ++ ++ if (self->revealer_timeout_id != 0) ++ g_source_remove (self->revealer_timeout_id); ++ ++ self->revealer_timeout_id = 0; ++ ++ g_cancellable_cancel (self->cancellable); ++ ++ g_clear_object (&self->devices); ++ g_clear_object (&self->data_devices); ++ g_clear_object (&self->mm_manager); ++ g_clear_object (&self->nm_client); ++ g_clear_object (&self->cancellable); ++ g_clear_object (&self->rfkill_proxy); ++ g_clear_pointer (&self->arg_device, g_free); ++ ++ G_OBJECT_CLASS (cc_wwan_panel_parent_class)->dispose (object); ++} ++ ++static void ++cc_wwan_panel_class_init (CcWwanPanelClass *klass) ++{ ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->set_property = cc_wwan_panel_set_property; ++ object_class->constructed = cc_wwan_panel_constructed; ++ object_class->dispose = cc_wwan_panel_dispose; ++ ++ g_object_class_override_property (object_class, PROP_PARAMETERS, "parameters"); ++ ++ gtk_widget_class_set_template_from_resource (widget_class, ++ "/org/gnome/control-center/wwan/cc-wwan-panel.ui"); ++ ++ gtk_widget_class_bind_template_child (widget_class, CcWwanPanel, data_select_listbox); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanPanel, data_select_popover); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanPanel, data_sim_label); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanPanel, data_sim_select_listbox); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanPanel, devices_stack); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanPanel, devices_switcher); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanPanel, enable_switch); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanPanel, main_stack); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanPanel, multi_device_revealer); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanPanel, notification_label); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanPanel, notification_revealer); ++ ++ gtk_widget_class_bind_template_callback (widget_class, wwan_on_airplane_off_clicked_cb); ++ gtk_widget_class_bind_template_callback (widget_class, wwan_notification_close_clicked_cb); ++ gtk_widget_class_bind_template_callback (widget_class, wwan_data_selector_clicked_cb); ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_data_item_activate_cb); ++} ++ ++static void ++cc_wwan_panel_init (CcWwanPanel *self) ++{ ++ g_autoptr(GError) error = NULL; ++ ++ g_resources_register (cc_wwan_get_resource ()); ++ ++ gtk_widget_init_template (GTK_WIDGET (self)); ++ ++ self->cancellable = g_cancellable_new (); ++ self->devices = g_list_store_new (CC_TYPE_WWAN_DEVICE); ++ self->data_devices = g_list_store_new (CC_TYPE_WWAN_DEVICE); ++ gtk_list_box_bind_model (GTK_LIST_BOX (self->data_select_listbox), ++ G_LIST_MODEL (self->data_devices), ++ (GtkListBoxCreateWidgetFunc) cc_data_device_row_new, ++ self, NULL); ++ ++ g_signal_connect_object (self->notification_label, "notify::label", ++ G_CALLBACK (cc_wwan_panel_notification_changed_cb), ++ self, G_CONNECT_SWAPPED); ++ ++ if (cc_object_storage_has_object (CC_OBJECT_NMCLIENT)) ++ { ++ self->nm_client = cc_object_storage_get_object (CC_OBJECT_NMCLIENT); ++ g_signal_connect_object (self->nm_client, ++ "notify::wwan-enabled", ++ G_CALLBACK (cc_wwan_panel_update_view), ++ self, G_CONNECT_SWAPPED); ++ ++ } ++ else ++ { ++ g_warn_if_reached (); ++ } ++ ++ if (cc_object_storage_has_object ("CcObjectStorage::mm-manager")) ++ { ++ self->mm_manager = cc_object_storage_get_object ("CcObjectStorage::mm-manager"); ++ ++ g_signal_connect_object (self->mm_manager, "object-added", ++ G_CALLBACK (wwan_panel_device_added_cb), ++ self, G_CONNECT_SWAPPED); ++ g_signal_connect_object (self->mm_manager, "object-removed", ++ G_CALLBACK (wwan_panel_device_removed_cb), ++ self, G_CONNECT_SWAPPED); ++ ++ cc_wwan_panel_update_devices (self); ++ } ++ else ++ { ++ g_warn_if_reached (); ++ } ++ ++ /* Acquire Airplane Mode proxy */ ++ self->rfkill_proxy = cc_object_storage_create_dbus_proxy_sync (G_BUS_TYPE_SESSION, ++ G_DBUS_PROXY_FLAGS_NONE, ++ "org.gnome.SettingsDaemon.Rfkill", ++ "/org/gnome/SettingsDaemon/Rfkill", ++ "org.gnome.SettingsDaemon.Rfkill", ++ self->cancellable, ++ &error); ++ ++ if (error) ++ { ++ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ g_printerr ("Error creating rfkill proxy: %s\n", error->message); ++ } ++ else ++ { ++ g_signal_connect_object (self->rfkill_proxy, ++ "g-properties-changed", ++ G_CALLBACK (cc_wwan_panel_update_view), ++ self, G_CONNECT_SWAPPED); ++ ++ cc_wwan_panel_update_view (self); ++ } ++} ++ ++static void ++wwan_update_panel_visibility (MMManager *mm_manager) ++{ ++ CcApplication *application; ++ GList *devices; ++ gboolean has_wwan; ++ ++ g_assert (MM_IS_MANAGER (mm_manager)); ++ ++ CC_TRACE_MSG ("Updating WWAN panel visibility"); ++ ++ has_wwan = FALSE; ++ devices = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (mm_manager)); ++ ++ for (GList *item = devices; item != NULL; item = item->next) ++ { ++ if(wwan_panel_device_is_supported (item->data)) ++ { ++ has_wwan = TRUE; ++ break; ++ } ++ } ++ ++ /* Set the new visibility */ ++ application = CC_APPLICATION (g_application_get_default ()); ++ cc_shell_model_set_panel_visibility (cc_application_get_model (application), ++ "wwan", ++ has_wwan ? CC_PANEL_VISIBLE : CC_PANEL_VISIBLE_IN_SEARCH); ++ ++ g_debug ("WWAN panel visible: %s", has_wwan ? "yes" : "no"); ++ ++ g_list_free_full (devices, (GDestroyNotify)g_object_unref); ++} ++ ++void ++cc_wwan_panel_static_init_func (void) ++{ ++ g_autoptr(GDBusConnection) system_bus = NULL; ++ g_autoptr(MMManager) mm_manager = NULL; ++ g_autoptr(GError) error = NULL; ++ ++ /* ++ * There could be other modems that are only handled by rfkill, ++ * and not available via ModemManager. But as this panel ++ * makes use of ModemManager APIs, we only care devices ++ * supported by ModemManager. ++ */ ++ system_bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error); ++ if (system_bus == NULL) ++ g_warning ("Error connecting to system D-Bus: %s", error->message); ++ else ++ mm_manager = mm_manager_new_sync (system_bus, ++ G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE, ++ NULL, &error); ++ ++ if (mm_manager == NULL) ++ { ++ CcApplication *application; ++ ++ g_warning ("Error connecting to ModemManager: %s", error->message); ++ ++ application = CC_APPLICATION (g_application_get_default ()); ++ cc_shell_model_set_panel_visibility (cc_application_get_model (application), ++ "wwan", FALSE); ++ return; ++ } ++ else ++ { ++ cc_object_storage_add_object ("CcObjectStorage::mm-manager", mm_manager); ++ } ++ ++ g_debug ("Monitoring ModemManager for WWAN devices"); ++ ++ g_signal_connect (mm_manager, "object-added", G_CALLBACK (wwan_update_panel_visibility), NULL); ++ g_signal_connect (mm_manager, "object-removed", G_CALLBACK (wwan_update_panel_visibility), NULL); ++ ++ wwan_update_panel_visibility (mm_manager); ++} +diff --git a/panels/wwan/cc-wwan-panel.h b/panels/wwan/cc-wwan-panel.h +new file mode 100644 +index 000000000..57d2dae26 +--- /dev/null ++++ b/panels/wwan/cc-wwan-panel.h +@@ -0,0 +1,36 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-panel.h ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#pragma once ++ ++#include ++ ++G_BEGIN_DECLS ++ ++#define CC_TYPE_WWAN_PANEL (cc_wwan_panel_get_type()) ++G_DECLARE_FINAL_TYPE (CcWwanPanel, cc_wwan_panel, CC, WWAN_PANEL, CcPanel) ++ ++void cc_wwan_panel_static_init_func (void); ++ ++G_END_DECLS +diff --git a/panels/wwan/cc-wwan-panel.ui b/panels/wwan/cc-wwan-panel.ui +new file mode 100644 +index 000000000..5258c42c3 +--- /dev/null ++++ b/panels/wwan/cc-wwan-panel.ui +@@ -0,0 +1,336 @@ ++ ++ ++ ++ ++ ++ bottom ++ popover_arrow ++ ++ ++ 1 ++ none ++ ++ ++ ++ ++ ++ ++ ++ 1 ++ ++ ++ Enable Mobile Network ++ ++ ++ ++ +diff --git a/panels/wwan/cc-wwan-sim-lock-dialog.c b/panels/wwan/cc-wwan-sim-lock-dialog.c +new file mode 100644 +index 000000000..14adbf415 +--- /dev/null ++++ b/panels/wwan/cc-wwan-sim-lock-dialog.c +@@ -0,0 +1,310 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-network-dialog.c ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#undef G_LOG_DOMAIN ++#define G_LOG_DOMAIN "cc-wwan-sim-lock-dialog" ++ ++#include ++#include ++#include ++ ++#include "list-box-helper.h" ++#include "cc-list-row.h" ++#include "cc-wwan-sim-lock-dialog.h" ++#include "cc-wwan-resources.h" ++ ++/** ++ * @short_description: Dialog to manage SIM Locks like PIN ++ */ ++ ++#define PIN_MINIMUM_LENGTH 4 ++#define PIN_MAXIMUM_LENGTH 8 ++ ++struct _CcWwanSimLockDialog ++{ ++ GtkDialog parent_instance; ++ ++ CcWwanDevice *device; ++ ++ GtkButton *apply_button; ++ GtkStack *button_stack; ++ GtkGrid *lock_change_grid; ++ CcListRow *lock_row; ++ GtkEntry *new_pin_entry; ++ GtkButton *next_button; ++ GtkEntry *pin_confirm_entry; ++ GtkEntry *pin_entry; ++ GtkStack *pin_settings_stack; ++}; ++ ++G_DEFINE_TYPE (CcWwanSimLockDialog, cc_wwan_sim_lock_dialog, GTK_TYPE_DIALOG) ++ ++ ++enum { ++ PROP_0, ++ PROP_DEVICE, ++ N_PROPS ++}; ++ ++static GParamSpec *properties[N_PROPS]; ++ ++static void ++cc_wwan_sim_lock_changed_cb (CcWwanSimLockDialog *self) ++{ ++ gboolean row_enabled, lock_enabled; ++ ++ lock_enabled = cc_wwan_device_get_sim_lock (self->device); ++ row_enabled = cc_list_row_get_active (self->lock_row); ++ ++ gtk_widget_set_sensitive (GTK_WIDGET (self->next_button), lock_enabled != row_enabled); ++ gtk_widget_set_visible (GTK_WIDGET (self->lock_change_grid), row_enabled && lock_enabled); ++} ++ ++static void ++cc_wwan_pin_next_clicked_cb (CcWwanSimLockDialog *self) ++{ ++ gtk_stack_set_visible_child_name (self->pin_settings_stack, "pin-entry"); ++ gtk_entry_set_text (self->pin_entry, ""); ++ ++ gtk_widget_set_sensitive (GTK_WIDGET (self->apply_button), FALSE); ++ gtk_stack_set_visible_child (self->button_stack, ++ GTK_WIDGET (self->apply_button)); ++} ++ ++static void ++cc_wwan_pin_apply_clicked_cb (CcWwanSimLockDialog *self) ++{ ++ const gchar *pin, *new_pin; ++ gboolean row_enabled, lock_enabled; ++ ++ gtk_widget_hide (GTK_WIDGET (self)); ++ ++ lock_enabled = cc_wwan_device_get_sim_lock (self->device); ++ row_enabled = cc_list_row_get_active (self->lock_row); ++ pin = gtk_entry_get_text (self->pin_entry); ++ new_pin = gtk_entry_get_text (self->new_pin_entry); ++ ++ if (lock_enabled != row_enabled) ++ { ++ if (row_enabled) ++ cc_wwan_device_enable_pin (self->device, pin, NULL, NULL, NULL); ++ else ++ cc_wwan_device_disable_pin (self->device, pin, NULL, NULL, NULL); ++ ++ return; ++ } ++ ++ cc_wwan_device_change_pin (self->device, pin, new_pin, NULL, NULL, NULL); ++} ++ ++static void ++cc_wwan_pin_entry_text_inserted_cb (CcWwanSimLockDialog *self, ++ gchar *new_text, ++ gint new_text_length, ++ gpointer position, ++ GtkEditable *editable) ++{ ++ size_t digit_end; ++ size_t len; ++ ++ if (!new_text || !*new_text) ++ return; ++ ++ if (new_text_length == 1 && g_ascii_isdigit (*new_text)) ++ return; ++ ++ if (new_text_length == -1) ++ len = strlen (new_text); ++ else ++ len = new_text_length; ++ ++ if (len == 1 && g_ascii_isdigit (*new_text)) ++ return; ++ ++ digit_end = strspn (new_text, "1234567890"); ++ ++ /* The maximum length possible for PIN is 8 */ ++ if (len <= 8 && digit_end == len) ++ return; ++ ++ g_signal_stop_emission_by_name (editable, "insert-text"); ++ gtk_widget_error_bell (GTK_WIDGET (editable)); ++} ++ ++static void ++cc_wwan_pin_entry_changed_cb (CcWwanSimLockDialog *self) ++{ ++ const gchar *new_pin, *confirm_pin; ++ ++ new_pin = gtk_entry_get_text (self->new_pin_entry); ++ confirm_pin = gtk_entry_get_text (self->pin_confirm_entry); ++ gtk_widget_set_sensitive (GTK_WIDGET (self->next_button), FALSE); ++ ++ /* A PIN should have a minimum length of 4 */ ++ if (!new_pin || !confirm_pin || strlen (new_pin) < 4) ++ return; ++ ++ if (g_str_equal (new_pin, confirm_pin)) ++ gtk_widget_set_sensitive (GTK_WIDGET (self->next_button), TRUE); ++} ++ ++ ++static void ++cc_wwan_pin_entered_cb (CcWwanSimLockDialog *self) ++{ ++ const gchar *pin; ++ gsize len; ++ gboolean enable_apply; ++ ++ pin = gtk_entry_get_text (self->pin_entry); ++ ++ if (!pin || !*pin) ++ { ++ gtk_widget_set_sensitive (GTK_WIDGET (self->apply_button), FALSE); ++ return; ++ } ++ ++ len = strlen (pin); ++ enable_apply = len >= PIN_MINIMUM_LENGTH && len <= PIN_MAXIMUM_LENGTH; ++ ++ gtk_widget_set_sensitive (GTK_WIDGET (self->apply_button), enable_apply); ++} ++ ++static void ++cc_wwan_sim_lock_dialog_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ CcWwanSimLockDialog *self = (CcWwanSimLockDialog *)object; ++ ++ switch (prop_id) ++ { ++ case PROP_DEVICE: ++ self->device = g_value_dup_object (value); ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++cc_wwan_sim_lock_dialog_show (GtkWidget *widget) ++{ ++ CcWwanSimLockDialog *self = (CcWwanSimLockDialog *)widget; ++ gboolean lock_enabled; ++ ++ gtk_entry_set_text (self->pin_entry, ""); ++ gtk_widget_set_sensitive (GTK_WIDGET (self->next_button), FALSE); ++ gtk_widget_set_sensitive (GTK_WIDGET (self->apply_button), FALSE); ++ ++ lock_enabled = cc_wwan_device_get_sim_lock (self->device); ++ g_object_set (self->lock_row, "active", lock_enabled, NULL); ++ gtk_widget_set_visible (GTK_WIDGET (self->lock_change_grid), lock_enabled); ++ ++ gtk_widget_set_sensitive (GTK_WIDGET (self->next_button), FALSE); ++ gtk_stack_set_visible_child (self->button_stack, ++ GTK_WIDGET (self->next_button)); ++ gtk_button_set_label (self->apply_button, _("_Set")); ++ ++ gtk_stack_set_visible_child_name (self->pin_settings_stack, "pin-settings"); ++ ++ gtk_entry_set_text (self->pin_entry, ""); ++ gtk_entry_set_text (self->new_pin_entry, ""); ++ gtk_entry_set_text (self->pin_confirm_entry, ""); ++ ++ GTK_WIDGET_CLASS (cc_wwan_sim_lock_dialog_parent_class)->show (widget); ++} ++ ++static void ++cc_wwan_sim_lock_dialog_dispose (GObject *object) ++{ ++ CcWwanSimLockDialog *self = (CcWwanSimLockDialog *)object; ++ ++ g_clear_object (&self->device); ++ ++ G_OBJECT_CLASS (cc_wwan_sim_lock_dialog_parent_class)->dispose (object); ++} ++ ++static void ++cc_wwan_sim_lock_dialog_class_init (CcWwanSimLockDialogClass *klass) ++{ ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->set_property = cc_wwan_sim_lock_dialog_set_property; ++ object_class->dispose = cc_wwan_sim_lock_dialog_dispose; ++ ++ widget_class->show = cc_wwan_sim_lock_dialog_show; ++ ++ properties[PROP_DEVICE] = ++ g_param_spec_object ("device", ++ "Device", ++ "The WWAN Device", ++ CC_TYPE_WWAN_DEVICE, ++ G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); ++ ++ g_object_class_install_properties (object_class, N_PROPS, properties); ++ ++ gtk_widget_class_set_template_from_resource (widget_class, ++ "/org/gnome/control-center/wwan/cc-wwan-sim-lock-dialog.ui"); ++ ++ gtk_widget_class_bind_template_child (widget_class, CcWwanSimLockDialog, apply_button); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanSimLockDialog, button_stack); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanSimLockDialog, lock_change_grid); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanSimLockDialog, lock_row); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanSimLockDialog, new_pin_entry); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanSimLockDialog, next_button); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanSimLockDialog, pin_confirm_entry); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanSimLockDialog, pin_entry); ++ gtk_widget_class_bind_template_child (widget_class, CcWwanSimLockDialog, pin_settings_stack); ++ ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_sim_lock_changed_cb); ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_pin_next_clicked_cb); ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_pin_apply_clicked_cb); ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_pin_entry_text_inserted_cb); ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_pin_entry_changed_cb); ++ gtk_widget_class_bind_template_callback (widget_class, cc_wwan_pin_entered_cb); ++} ++ ++static void ++cc_wwan_sim_lock_dialog_init (CcWwanSimLockDialog *self) ++{ ++ gtk_widget_init_template (GTK_WIDGET (self)); ++} ++ ++CcWwanSimLockDialog * ++cc_wwan_sim_lock_dialog_new (GtkWindow *parent_window, ++ CcWwanDevice *device) ++{ ++ g_return_val_if_fail (GTK_IS_WINDOW (parent_window), NULL); ++ g_return_val_if_fail (CC_IS_WWAN_DEVICE (device), NULL); ++ ++ return g_object_new (CC_TYPE_WWAN_SIM_LOCK_DIALOG, ++ "transient-for", parent_window, ++ "use-header-bar", 1, ++ "device", device, ++ NULL); ++} +diff --git a/panels/wwan/cc-wwan-sim-lock-dialog.h b/panels/wwan/cc-wwan-sim-lock-dialog.h +new file mode 100644 +index 000000000..b6d1d5a9e +--- /dev/null ++++ b/panels/wwan/cc-wwan-sim-lock-dialog.h +@@ -0,0 +1,40 @@ ++/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* cc-wwan-sim-lock-dialog.h ++ * ++ * Copyright 2019 Purism SPC ++ * ++ * 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 3 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, see . ++ * ++ * Author(s): ++ * Mohammed Sadiq ++ * ++ * SPDX-License-Identifier: GPL-3.0-or-later ++ */ ++ ++#pragma once ++ ++#include ++#include ++ ++#include "cc-wwan-device.h" ++ ++G_BEGIN_DECLS ++ ++#define CC_TYPE_WWAN_SIM_LOCK_DIALOG (cc_wwan_sim_lock_dialog_get_type()) ++G_DECLARE_FINAL_TYPE (CcWwanSimLockDialog, cc_wwan_sim_lock_dialog, CC, WWAN_SIM_LOCK_DIALOG, GtkDialog) ++ ++CcWwanSimLockDialog *cc_wwan_sim_lock_dialog_new (GtkWindow *parent_window, ++ CcWwanDevice *device); ++ ++G_END_DECLS +diff --git a/panels/wwan/cc-wwan-sim-lock-dialog.ui b/panels/wwan/cc-wwan-sim-lock-dialog.ui +new file mode 100644 +index 000000000..48a946be4 +--- /dev/null ++++ b/panels/wwan/cc-wwan-sim-lock-dialog.ui +@@ -0,0 +1,306 @@ ++ ++ ++ ++ +diff --git a/panels/wwan/gnome-wwan-panel.desktop.in.in b/panels/wwan/gnome-wwan-panel.desktop.in.in +new file mode 100644 +index 000000000..351a8edde +--- /dev/null ++++ b/panels/wwan/gnome-wwan-panel.desktop.in.in +@@ -0,0 +1,16 @@ ++[Desktop Entry] ++Name=Mobile Network ++Comment=Configure Telephony and mobile data connections ++Exec=gnome-control-center wwan ++# FIXME ++# Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++Icon=network-cellular-signal-excellent ++Terminal=false ++Type=Application ++NoDisplay=true ++StartupNotify=true ++Categories=GNOME;GTK;Settings;X-GNOME-NetworkSettings;HardwareSettings;X-GNOME-Settings-Panel;X-GNOME-ConnectivitySettings; ++OnlyShowIn=GNOME;Unity; ++StartupNotify=true ++# Translators: Search terms to find the WWAN panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++Keywords=cellular;wwan;telephony;sim;mobile; +diff --git a/panels/wwan/meson.build b/panels/wwan/meson.build +new file mode 100644 +index 000000000..8c1b02f26 +--- /dev/null ++++ b/panels/wwan/meson.build +@@ -0,0 +1,61 @@ ++gcr_dep = [dependency('gcr-3')] ++ ++deps = common_deps + network_manager_deps + gcr_dep + [polkit_gobject_dep] ++panels_list += cappletname ++desktop = 'gnome-@0@-panel.desktop'.format(cappletname) ++ ++desktop_in = configure_file( ++ input : desktop + '.in.in', ++ output : desktop + '.in', ++ configuration : desktop_conf ++) ++ ++i18n.merge_file( ++ desktop, ++ type : 'desktop', ++ input : desktop_in, ++ output : desktop, ++ po_dir : po_dir, ++ install : true, ++ install_dir : control_center_desktopdir ++) ++ ++sources = files( ++ 'cc-wwan-panel.c', ++ 'cc-wwan-device.c', ++ 'cc-wwan-data.c', ++ 'cc-wwan-device-page.c', ++ 'cc-wwan-mode-dialog.c', ++ 'cc-wwan-network-dialog.c', ++ 'cc-wwan-details-dialog.c', ++ 'cc-wwan-sim-lock-dialog.c', ++ 'cc-wwan-apn-dialog.c', ++) ++ ++resource_data = files( ++ 'cc-wwan-panel.ui', ++ 'cc-wwan-device-page.ui', ++ 'cc-wwan-mode-dialog.ui', ++ 'cc-wwan-network-dialog.ui', ++ 'cc-wwan-details-dialog.ui', ++ 'cc-wwan-sim-lock-dialog.ui', ++ 'cc-wwan-apn-dialog.ui', ++) ++ ++sources += gnome.compile_resources( ++ 'cc-' + cappletname + '-resources', ++ cappletname + '.gresource.xml', ++ c_name : 'cc_' + cappletname, ++ dependencies : resource_data, ++ export : true ++) ++ ++cflags += '-DGNOMELOCALEDIR="@0@"'.format(control_center_localedir) ++ ++panels_libs += static_library( ++ cappletname, ++ sources : sources, ++ include_directories : [ top_inc, common_inc ], ++ dependencies : deps, ++ c_args : cflags ++) +diff --git a/panels/wwan/wwan.gresource.xml b/panels/wwan/wwan.gresource.xml +new file mode 100644 +index 000000000..f128a164a +--- /dev/null ++++ b/panels/wwan/wwan.gresource.xml +@@ -0,0 +1,12 @@ ++ ++ ++ ++ cc-wwan-panel.ui ++ cc-wwan-device-page.ui ++ cc-wwan-mode-dialog.ui ++ cc-wwan-network-dialog.ui ++ cc-wwan-details-dialog.ui ++ cc-wwan-sim-lock-dialog.ui ++ cc-wwan-apn-dialog.ui ++ ++ +diff --git a/shell/cc-panel-list.c b/shell/cc-panel-list.c +index e23da0b87..e6659b789 100644 +--- a/shell/cc-panel-list.c ++++ b/shell/cc-panel-list.c +@@ -381,6 +381,7 @@ static const gchar * const panel_order[] = { + /* Main page */ + "wifi", + "network", ++ "wwan", + "mobile-broadband", + "bluetooth", + "background", +diff --git a/shell/cc-panel-loader.c b/shell/cc-panel-loader.c +index f20384394..65b6555a1 100644 +--- a/shell/cc-panel-loader.c ++++ b/shell/cc-panel-loader.c +@@ -64,6 +64,9 @@ extern GType cc_user_panel_get_type (void); + #ifdef BUILD_WACOM + extern GType cc_wacom_panel_get_type (void); + #endif /* BUILD_WACOM */ ++#ifdef BUILD_WWAN ++extern GType cc_wwan_panel_get_type (void); ++#endif /* BUILD_WWAN */ + extern GType cc_location_panel_get_type (void); + extern GType cc_camera_panel_get_type (void); + extern GType cc_microphone_panel_get_type (void); +@@ -79,6 +82,9 @@ extern void cc_wifi_panel_static_init_func (void); + #ifdef BUILD_WACOM + extern void cc_wacom_panel_static_init_func (void); + #endif /* BUILD_WACOM */ ++#ifdef BUILD_WWAN ++extern void cc_wwan_panel_static_init_func (void); ++#endif /* BUILD_WWAN */ + + #define PANEL_TYPE(name, get_type, init_func) { name, get_type, init_func } + +@@ -129,6 +135,9 @@ static CcPanelLoaderVtable default_panels[] = + #ifdef BUILD_WACOM + PANEL_TYPE("wacom", cc_wacom_panel_get_type, cc_wacom_panel_static_init_func), + #endif ++#ifdef BUILD_WWAN ++ PANEL_TYPE("wwan", cc_wwan_panel_get_type, cc_wwan_panel_static_init_func), ++#endif + }; + + /* Override for the panel vtable. When NULL, the default_panels will +-- +2.32.0 + + +From 610bf914b5c745c87b0be5c827515e82c07317f9 Mon Sep 17 00:00:00 2001 +From: Mohammed Sadiq +Date: Fri, 4 Oct 2019 16:02:23 +0530 +Subject: [PATCH 3/7] network: Don't show modems supported by cellular panel + +Cellular panel is already handling it +--- + panels/network/cc-network-panel.c | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +diff --git a/panels/network/cc-network-panel.c b/panels/network/cc-network-panel.c +index 01b164ea0..bd4e55df8 100644 +--- a/panels/network/cc-network-panel.c ++++ b/panels/network/cc-network-panel.c +@@ -382,6 +382,27 @@ update_bluetooth_section (CcNetworkPanel *self) + gtk_widget_set_visible (self->container_bluetooth, self->bluetooth_devices->len > 0); + } + ++static gboolean ++wwan_panel_supports_modem (GDBusObject *object) ++{ ++ MMObject *mm_object; ++ MMModem *modem; ++ MMModemCapability capability, supported_capabilities; ++ ++ g_assert (G_IS_DBUS_OBJECT (object)); ++ ++ supported_capabilities = MM_MODEM_CAPABILITY_GSM_UMTS | MM_MODEM_CAPABILITY_LTE; ++#if MM_CHECK_VERSION (1,14,0) ++ supported_capabilities |= MM_MODEM_CAPABILITY_5GNR; ++#endif ++ ++ mm_object = MM_OBJECT (object); ++ modem = mm_object_get_modem (mm_object); ++ capability = mm_modem_get_current_capabilities (modem); ++ ++ return capability & supported_capabilities; ++} ++ + static void + panel_add_device (CcNetworkPanel *self, NMDevice *device) + { +@@ -425,6 +446,10 @@ panel_add_device (CcNetworkPanel *self, NMDevice *device) + nm_device_get_udi (device)); + return; + } ++ ++ /* This will be handled by cellular panel */ ++ if (wwan_panel_supports_modem (modem_object)) ++ return; + } + + device_mobile = net_device_mobile_new (self->client, device, modem_object); +-- +2.32.0 + + +From b7a3b8b84641fdc600cc2ab3683da57023ef5e65 Mon Sep 17 00:00:00 2001 +From: Kyle Rankin +Date: Fri, 21 Feb 2020 01:28:13 +0000 +Subject: [PATCH 4/7] Lower WWAN DNS Priority + +The current DNS priority settings for WWAN were set far too low. Most +connections (including WiFi) do not set DNS priority (set to 0) and per +https://developer.gnome.org/NetworkManager/stable/nm-settings.html : + +"A lower value is better (higher priority). Zero selects a globally +configured default value. If the latter is missing or zero too, it +defaults to 50 for VPNs and 100 for other connections." + +By setting both the "low" and "high" settings to 15 and 20 respectively, +the WWAN DNS servers were always appearing above WiFi, even though WiFi +had routing priority. This caused latency and other problems when the +wwan connection was slow because the system would query those DNS +servers before WiFi ones. Beyond that, it would even cause WWAN to +override VPN DNS settings which isn't what we want. + +This change puts the "low priority" setting above the default 100 that +connections get when they don't otherwise set a priority, and the "high +priority" slightly below 100. I did this instead of setting the values +to 0 because I noticed that NM doesn't seem to be aware it should +prioritize WiFi in that case so WWAN DNS servers were still sometimes +taking precedence. +--- + panels/wwan/cc-wwan-data.c | 17 ++++++++++++++--- + 1 file changed, 14 insertions(+), 3 deletions(-) + +diff --git a/panels/wwan/cc-wwan-data.c b/panels/wwan/cc-wwan-data.c +index 0be8f3403..4062d78fd 100644 +--- a/panels/wwan/cc-wwan-data.c ++++ b/panels/wwan/cc-wwan-data.c +@@ -47,9 +47,20 @@ + * of #CcWwanData changes when SIM is changed. + */ + +-/* Priority for connections. larger the number, lower the priority */ +-#define CC_WWAN_DNS_PRIORITY_LOW (20) +-#define CC_WWAN_DNS_PRIORITY_HIGH (15) ++/* ++ * Priority for connections. The larger the number, the lower the priority ++ * https://developer.gnome.org/NetworkManager/stable/nm-settings.html: ++ * ++ * A lower value is better (higher priority). Zero selects a globally ++ * configured default value. If the latter is missing or zero too, it ++ * defaults to 50 for VPNs and 100 for other connections. ++ * ++ * Since WiFi and other network connections will likely get the default ++ * setting of 100, set WWAN DNS priorities higher than the default, with ++ * room to allow multiple modems to set priority above/below each other. ++ */ ++#define CC_WWAN_DNS_PRIORITY_LOW (120) ++#define CC_WWAN_DNS_PRIORITY_HIGH (115) + + /* These are to be set as route metric */ + #define CC_WWAN_ROUTE_PRIORITY_LOW (1050) +-- +2.32.0 + + +From 0f38f32b98ae946b8259e3232e311d4f743acaba Mon Sep 17 00:00:00 2001 +From: Sebastian Krzyszkowiak +Date: Mon, 6 Jul 2020 04:33:30 +0200 +Subject: [PATCH 5/7] wwan: Fix signal strength display when extended signal + retrieval is disabled + +MMModemSignal interface is used to retrieve extended signal information that +requires periodic polling. Therefore, it needs to be manually enabled in order +to use. There if a fallback to use mm_modem_get_signal_quality when MMModemSignal +interface is unavailable, but it didn't check whether it's actually enabled, +leaving the UI with empty label. +--- + panels/wwan/cc-wwan-device.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/panels/wwan/cc-wwan-device.c b/panels/wwan/cc-wwan-device.c +index 31baff95c..55a627a5a 100644 +--- a/panels/wwan/cc-wwan-device.c ++++ b/panels/wwan/cc-wwan-device.c +@@ -1183,12 +1183,16 @@ cc_wwan_device_dup_signal_string (CcWwanDevice *self) + GString *str; + gdouble value; + gboolean recent; ++ guint refresh_rate; + + g_return_val_if_fail (CC_IS_WWAN_DEVICE (self), NULL); + + modem_signal = mm_object_peek_modem_signal (self->mm_object); + +- if (!modem_signal) ++ if (modem_signal) ++ refresh_rate = mm_modem_signal_get_rate (modem_signal); ++ ++ if (!modem_signal || !refresh_rate) + return g_strdup_printf ("%d%%", mm_modem_get_signal_quality (self->modem, &recent)); + + str = g_string_new (""); +-- +2.32.0 + + +From 99bbe06a25a523898dde7370274430e7502be53e Mon Sep 17 00:00:00 2001 +From: Mohammed Sadiq +Date: Sat, 14 Aug 2021 13:39:33 +0530 +Subject: [PATCH 6/7] wwan: Fix a typo + +Fixes https://gitlab.gnome.org/GNOME/gnome-control-center/-/commit/dc840f0aec346f3fb297789eb1641255574c47a4#note_1249116 +--- + panels/wwan/cc-wwan-apn-dialog.ui | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/panels/wwan/cc-wwan-apn-dialog.ui b/panels/wwan/cc-wwan-apn-dialog.ui +index fb8432bc6..9ac07ce38 100644 +--- a/panels/wwan/cc-wwan-apn-dialog.ui ++++ b/panels/wwan/cc-wwan-apn-dialog.ui +@@ -211,7 +211,7 @@ + 1 + end + center +- Passsword ++ Password + +-- +2.32.0 + + +From b1cf8916b2569aa6c3b7f724eff37f198ed37b73 Mon Sep 17 00:00:00 2001 +From: Mohammed Sadiq +Date: Sat, 14 Aug 2021 13:54:33 +0530 +Subject: [PATCH 7/7] wwan: Avoid translation of some strings + +Many strings are not shown in the UI. Let's not overwhelm translators +--- + panels/wwan/cc-wwan-errors-private.h | 50 ++++++++++++++-------------- + 1 file changed, 25 insertions(+), 25 deletions(-) + +diff --git a/panels/wwan/cc-wwan-errors-private.h b/panels/wwan/cc-wwan-errors-private.h +index 761b82f35..076482d1f 100644 +--- a/panels/wwan/cc-wwan-errors-private.h ++++ b/panels/wwan/cc-wwan-errors-private.h +@@ -39,12 +39,12 @@ typedef struct { + static ErrorTable me_errors[] = { + { MM_MOBILE_EQUIPMENT_ERROR_PHONE_FAILURE, N_("Phone failure") }, + { MM_MOBILE_EQUIPMENT_ERROR_NO_CONNECTION, N_("No connection to phone") }, +- { MM_MOBILE_EQUIPMENT_ERROR_LINK_RESERVED, N_("Phone-adaptor link reserved") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_LINK_RESERVED, "Phone-adaptor link reserved" }, + { MM_MOBILE_EQUIPMENT_ERROR_NOT_ALLOWED, N_("Operation not allowed") }, + { MM_MOBILE_EQUIPMENT_ERROR_NOT_SUPPORTED, N_("Operation not supported") }, +- { MM_MOBILE_EQUIPMENT_ERROR_PH_SIM_PIN, N_("PH-SIM PIN required") }, +- { MM_MOBILE_EQUIPMENT_ERROR_PH_FSIM_PIN, N_("PH-FSIM PIN required") }, +- { MM_MOBILE_EQUIPMENT_ERROR_PH_FSIM_PUK, N_("PH-FSIM PUK required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_PH_SIM_PIN, "PH-SIM PIN required" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_PH_FSIM_PIN, "PH-FSIM PIN required" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_PH_FSIM_PUK, "PH-FSIM PUK required" }, + { MM_MOBILE_EQUIPMENT_ERROR_SIM_NOT_INSERTED, N_("SIM not inserted") }, + { MM_MOBILE_EQUIPMENT_ERROR_SIM_PIN, N_("SIM PIN required") }, + { MM_MOBILE_EQUIPMENT_ERROR_SIM_PUK, N_("SIM PUK required") }, +@@ -54,34 +54,34 @@ static ErrorTable me_errors[] = { + { MM_MOBILE_EQUIPMENT_ERROR_INCORRECT_PASSWORD, N_("Incorrect password") }, + { MM_MOBILE_EQUIPMENT_ERROR_SIM_PIN2, N_("SIM PIN2 required") }, + { MM_MOBILE_EQUIPMENT_ERROR_SIM_PUK2, N_("SIM PUK2 required") }, +- { MM_MOBILE_EQUIPMENT_ERROR_MEMORY_FULL, N_("Memory full") }, +- { MM_MOBILE_EQUIPMENT_ERROR_INVALID_INDEX, N_("Invalid index") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_MEMORY_FULL, "Memory full" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_INVALID_INDEX, "Invalid index" }, + { MM_MOBILE_EQUIPMENT_ERROR_NOT_FOUND, N_("Not found") }, +- { MM_MOBILE_EQUIPMENT_ERROR_MEMORY_FAILURE, N_("Memory failure") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_MEMORY_FAILURE, "Memory failure" }, + { MM_MOBILE_EQUIPMENT_ERROR_NO_NETWORK, N_("No network service") }, + { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_TIMEOUT, N_("Network timeout") }, +- { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_NOT_ALLOWED, N_("Network not allowed - emergency calls only") }, +- { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_PIN, N_("Network personalization PIN required") }, +- { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_PUK, N_("Network personalization PUK required") }, +- { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_SUBSET_PIN, N_("Network subset personalization PIN required") }, +- { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_SUBSET_PUK, N_("Network subset personalization PUK required") }, +- { MM_MOBILE_EQUIPMENT_ERROR_SERVICE_PIN, N_("Service provider personalization PIN required") }, +- { MM_MOBILE_EQUIPMENT_ERROR_SERVICE_PUK, N_("Service provider personalization PUK required") }, +- { MM_MOBILE_EQUIPMENT_ERROR_CORP_PIN, N_("Corporate personalization PIN required") }, +- { MM_MOBILE_EQUIPMENT_ERROR_CORP_PUK, N_("Corporate personalization PUK required") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_NOT_ALLOWED, "Network not allowed - emergency calls only" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_PIN, "Network personalization PIN required" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_PUK, "Network personalization PUK required" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_SUBSET_PIN, "Network subset personalization PIN required" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_NETWORK_SUBSET_PUK, "Network subset personalization PUK required" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_SERVICE_PIN, "Service provider personalization PIN required" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_SERVICE_PUK, "Service provider personalization PUK required" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_CORP_PIN, "Corporate personalization PIN required" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_CORP_PUK, "Corporate personalization PUK required" }, + { MM_MOBILE_EQUIPMENT_ERROR_UNKNOWN, N_("Unknown error") }, +- { MM_MOBILE_EQUIPMENT_ERROR_GPRS_ILLEGAL_MS, N_("Illegal MS") }, +- { MM_MOBILE_EQUIPMENT_ERROR_GPRS_ILLEGAL_ME, N_("Illegal ME") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_ILLEGAL_MS, "Illegal MS" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_ILLEGAL_ME, "Illegal ME" }, + { MM_MOBILE_EQUIPMENT_ERROR_GPRS_SERVICE_NOT_ALLOWED, N_("GPRS services not allowed") }, +- { MM_MOBILE_EQUIPMENT_ERROR_GPRS_PLMN_NOT_ALLOWED, N_("PLMN not allowed") }, +- { MM_MOBILE_EQUIPMENT_ERROR_GPRS_LOCATION_NOT_ALLOWED, N_("Location area not allowed") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_PLMN_NOT_ALLOWED, "PLMN not allowed" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_LOCATION_NOT_ALLOWED, "Location area not allowed" }, + { MM_MOBILE_EQUIPMENT_ERROR_GPRS_ROAMING_NOT_ALLOWED, N_("Roaming not allowed in this location area") }, +- { MM_MOBILE_EQUIPMENT_ERROR_GPRS_SERVICE_OPTION_NOT_SUPPORTED, N_("Service option not supported") }, +- { MM_MOBILE_EQUIPMENT_ERROR_GPRS_SERVICE_OPTION_NOT_SUBSCRIBED, N_("Requested service option not subscribed") }, +- { MM_MOBILE_EQUIPMENT_ERROR_GPRS_SERVICE_OPTION_OUT_OF_ORDER, N_("Service option temporarily out of order") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_SERVICE_OPTION_NOT_SUPPORTED, "Service option not supported" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_SERVICE_OPTION_NOT_SUBSCRIBED, "Requested service option not subscribed" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_SERVICE_OPTION_OUT_OF_ORDER, "Service option temporarily out of order" }, + { MM_MOBILE_EQUIPMENT_ERROR_GPRS_UNKNOWN, N_("Unspecified GPRS error") }, +- { MM_MOBILE_EQUIPMENT_ERROR_GPRS_PDP_AUTH_FAILURE, N_("PDP authentication failure") }, +- { MM_MOBILE_EQUIPMENT_ERROR_GPRS_INVALID_MOBILE_CLASS, N_("Invalid mobile class") }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_PDP_AUTH_FAILURE, "PDP authentication failure" }, ++ { MM_MOBILE_EQUIPMENT_ERROR_GPRS_INVALID_MOBILE_CLASS, "Invalid mobile class" }, + }; + + static inline const gchar * +-- +2.32.0 + -- Gitee