From b4c6e9d8ef9d245e6076f7f8bde66c86757ce71f Mon Sep 17 00:00:00 2001 From: Matheus Polkorny Date: Fri, 7 Jul 2023 23:34:31 +0000 Subject: [PATCH 01/15] Update pt_BR translation --- po/pt_BR.po | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/po/pt_BR.po b/po/pt_BR.po index 51dc139..34ab117 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -404,10 +404,18 @@ msgstr "" msgid "Create _Child User" msgstr "_Criar usuário filho" +#: malcontent-control/main.ui:182 +msgid "No Standard User Accounts" +msgstr "Não há conta de usuário padrão" + #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "Carregando…" +#: malcontent-control/main.ui:210 +msgid "_User Settings" +msgstr "Configurações do _Usuário" + #: malcontent-control/main.ui:265 msgid "_Help" msgstr "Aj_uda" From f763d71cd2f894af6709c633a89fa8e60fab9895 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 12 Oct 2023 11:48:30 +0100 Subject: [PATCH 02/15] user-controls: Tweak a string to improve understandability Signed-off-by: Philip Withnall Fixes: #56 --- libmalcontent-ui/user-controls.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmalcontent-ui/user-controls.ui b/libmalcontent-ui/user-controls.ui index 5e948c1..887bc2d 100644 --- a/libmalcontent-ui/user-controls.ui +++ b/libmalcontent-ui/user-controls.ui @@ -99,7 +99,7 @@ Application _Suitability True oars_button - Restricts browsing or installation of applications to applications suitable for certain ages or above. + Restricts the browsing or installation of applications unsuitable for this age or younger. 0 False From 537d4bf7910433991bdbb2e1fed143be8840f1b1 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Fri, 13 Oct 2023 11:23:31 +0100 Subject: [PATCH 03/15] restrict-applications-selector: Move GListStore to UI file This simplifies the code a little and will allow binding to it in an upcoming commit. It introduces no functional changes. Signed-off-by: Philip Withnall Helps: #31 --- libmalcontent-ui/restrict-applications-selector.c | 7 ++----- libmalcontent-ui/restrict-applications-selector.ui | 4 ++++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/libmalcontent-ui/restrict-applications-selector.c b/libmalcontent-ui/restrict-applications-selector.c index 2da2eee..735dc96 100644 --- a/libmalcontent-ui/restrict-applications-selector.c +++ b/libmalcontent-ui/restrict-applications-selector.c @@ -64,7 +64,7 @@ struct _MctRestrictApplicationsSelector GtkLabel *placeholder; GList *cached_apps; /* (nullable) (owned) (element-type GAppInfo) */ - GListStore *apps; /* (owned) */ + GListStore *apps; GAppInfoMonitor *app_info_monitor; /* (owned) */ gulong app_info_monitor_changed_id; GHashTable *blocklisted_apps; /* (owned) (element-type GAppInfo) */ @@ -156,7 +156,6 @@ mct_restrict_applications_selector_dispose (GObject *object) MctRestrictApplicationsSelector *self = (MctRestrictApplicationsSelector *)object; g_clear_pointer (&self->blocklisted_apps, g_hash_table_unref); - g_clear_object (&self->apps); g_clear_list (&self->cached_apps, g_object_unref); if (self->app_info_monitor != NULL && self->app_info_monitor_changed_id != 0) @@ -225,6 +224,7 @@ mct_restrict_applications_selector_class_init (MctRestrictApplicationsSelectorCl gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, listbox); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, placeholder); + gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, apps); } static void @@ -234,9 +234,6 @@ mct_restrict_applications_selector_init (MctRestrictApplicationsSelector *self) gtk_widget_init_template (GTK_WIDGET (self)); - self->apps = g_list_store_new (G_TYPE_APP_INFO); - self->cached_apps = NULL; - self->app_info_monitor = g_app_info_monitor_get (); self->app_info_monitor_changed_id = g_signal_connect (self->app_info_monitor, "changed", diff --git a/libmalcontent-ui/restrict-applications-selector.ui b/libmalcontent-ui/restrict-applications-selector.ui index aabda5c..52adf25 100644 --- a/libmalcontent-ui/restrict-applications-selector.ui +++ b/libmalcontent-ui/restrict-applications-selector.ui @@ -20,4 +20,8 @@ + + + GAppInfo + From 13c8a88e17fc80ec5a9a875b1846fb47af2fb29f Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Fri, 13 Oct 2023 11:24:50 +0100 Subject: [PATCH 04/15] restrict-applications-selector: Fix display of placeholder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `GtkListBox` already correctly works out when to show/hide the placeholder; we don’t need to do that ourselves. It actually breaks things if we hide the placeholder, since `GtkListBox` then doesn’t re-show it. Signed-off-by: Philip Withnall --- libmalcontent-ui/restrict-applications-selector.c | 6 ------ libmalcontent-ui/restrict-applications-selector.ui | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/libmalcontent-ui/restrict-applications-selector.c b/libmalcontent-ui/restrict-applications-selector.c index 735dc96..30f2dd9 100644 --- a/libmalcontent-ui/restrict-applications-selector.c +++ b/libmalcontent-ui/restrict-applications-selector.c @@ -61,7 +61,6 @@ struct _MctRestrictApplicationsSelector GtkBox parent_instance; GtkListBox *listbox; - GtkLabel *placeholder; GList *cached_apps; /* (nullable) (owned) (element-type GAppInfo) */ GListStore *apps; @@ -223,7 +222,6 @@ mct_restrict_applications_selector_class_init (MctRestrictApplicationsSelectorCl gtk_widget_class_set_template_from_resource (widget_class, "/org/freedesktop/MalcontentUi/ui/restrict-applications-selector.ui"); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, listbox); - gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, placeholder); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, apps); } @@ -245,10 +243,6 @@ mct_restrict_applications_selector_init (MctRestrictApplicationsSelector *self) self, NULL); - /* Hide placeholder if not empty */ - n_apps = g_list_model_get_n_items (G_LIST_MODEL (self->apps)); - gtk_widget_set_visible (GTK_WIDGET (self->placeholder), n_apps != 0); - self->blocklisted_apps = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, diff --git a/libmalcontent-ui/restrict-applications-selector.ui b/libmalcontent-ui/restrict-applications-selector.ui index 52adf25..ccb7e92 100644 --- a/libmalcontent-ui/restrict-applications-selector.ui +++ b/libmalcontent-ui/restrict-applications-selector.ui @@ -9,7 +9,7 @@ none - + No applications found to restrict. From a58c660dca01dccfdc5edd21ef64d37bd6b2b263 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Fri, 13 Oct 2023 11:25:48 +0100 Subject: [PATCH 05/15] restrict-applications-selector: Add more spacing around placeholder label This makes it look nicer. Signed-off-by: Philip Withnall --- libmalcontent-ui/restrict-applications-selector.ui | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libmalcontent-ui/restrict-applications-selector.ui b/libmalcontent-ui/restrict-applications-selector.ui index ccb7e92..a45ea64 100644 --- a/libmalcontent-ui/restrict-applications-selector.ui +++ b/libmalcontent-ui/restrict-applications-selector.ui @@ -11,6 +11,8 @@ No applications found to restrict. + 12 + 12 From 4a1cc8a830c2aec505c78d3db84287731e1b12f7 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Fri, 13 Oct 2023 11:32:13 +0100 Subject: [PATCH 06/15] user-controls: Fix a minor string leak Signed-off-by: Philip Withnall --- libmalcontent-ui/user-controls.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libmalcontent-ui/user-controls.c b/libmalcontent-ui/user-controls.c index 99908b8..27b65aa 100644 --- a/libmalcontent-ui/user-controls.c +++ b/libmalcontent-ui/user-controls.c @@ -702,6 +702,7 @@ mct_user_controls_finalize (GObject *object) g_clear_object (&self->user); g_clear_pointer (&self->user_locale, g_free); g_clear_pointer (&self->user_display_name, g_free); + g_clear_pointer (&self->description, g_free); if (self->permission != NULL && self->permission_allowed_id != 0) { From 69253a2b2ce62d9ab3babfbce67ae0fdbc3007cb Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Fri, 13 Oct 2023 11:34:01 +0100 Subject: [PATCH 07/15] build: Post-release version bump MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We’re about to add new API, so bump the version number in preparation. Signed-off-by: Philip Withnall --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 038dd35..4f0cabd 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('malcontent', 'c', - version : '0.11.1', + version : '0.12.0', meson_version : '>= 0.59.0', license: ['LGPL-2.1-or-later', 'GPL-2.0-or-later'], default_options : [ From 73d8343a3e3a61c259967268becc8de3ba9659eb Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Fri, 13 Oct 2023 11:32:54 +0100 Subject: [PATCH 08/15] restrict-applications-dialog: Add support for searching the app list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a type-ahead search which filters the app list by app name. It’s always visible because search is a very obvious interaction the user might want to do to find an app in the app list. That’s why `GtkSearchBar` is not being used here. Signed-off-by: Philip Withnall Fixes: #31 --- .../restrict-applications-dialog.c | 52 ++++++++++ .../restrict-applications-dialog.ui | 16 ++- .../restrict-applications-selector.c | 99 ++++++++++++++++++- .../restrict-applications-selector.h | 4 + .../restrict-applications-selector.ui | 11 +++ 5 files changed, 177 insertions(+), 5 deletions(-) diff --git a/libmalcontent-ui/restrict-applications-dialog.c b/libmalcontent-ui/restrict-applications-dialog.c index 83e3da2..d09b0cb 100644 --- a/libmalcontent-ui/restrict-applications-dialog.c +++ b/libmalcontent-ui/restrict-applications-dialog.c @@ -55,11 +55,18 @@ struct _MctRestrictApplicationsDialog MctRestrictApplicationsSelector *selector; AdwPreferencesGroup *group; + GtkSearchEntry *search_entry; MctAppFilter *app_filter; /* (owned) (not nullable) */ gchar *user_display_name; /* (owned) (nullable) */ }; +static void search_entry_stop_search_cb (GtkSearchEntry *search_entry, + gpointer user_data); +static gboolean focus_search_cb (GtkWidget *widget, + GVariant *arguments, + gpointer user_data); + G_DEFINE_TYPE (MctRestrictApplicationsDialog, mct_restrict_applications_dialog, ADW_TYPE_PREFERENCES_WINDOW) typedef enum @@ -140,6 +147,19 @@ mct_restrict_applications_dialog_dispose (GObject *object) G_OBJECT_CLASS (mct_restrict_applications_dialog_parent_class)->dispose (object); } +static void +mct_restrict_applications_dialog_map (GtkWidget *widget) +{ + MctRestrictApplicationsDialog *self = (MctRestrictApplicationsDialog *)widget; + + GTK_WIDGET_CLASS (mct_restrict_applications_dialog_parent_class)->map (widget); + + /* Clear and focus the search entry, in case the dialogue is being shown for + * a second time. */ + gtk_editable_set_text (GTK_EDITABLE (self->search_entry), ""); + gtk_widget_grab_focus (GTK_WIDGET (self->search_entry)); +} + static void mct_restrict_applications_dialog_class_init (MctRestrictApplicationsDialogClass *klass) { @@ -151,6 +171,8 @@ mct_restrict_applications_dialog_class_init (MctRestrictApplicationsDialogClass object_class->set_property = mct_restrict_applications_dialog_set_property; object_class->dispose = mct_restrict_applications_dialog_dispose; + widget_class->map = mct_restrict_applications_dialog_map; + /** * MctRestrictApplicationsDialog:app-filter: (not nullable) * @@ -197,6 +219,15 @@ mct_restrict_applications_dialog_class_init (MctRestrictApplicationsDialogClass gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsDialog, selector); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsDialog, group); + gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsDialog, search_entry); + + gtk_widget_class_bind_template_callback (widget_class, search_entry_stop_search_cb); + + gtk_widget_class_add_binding (widget_class, + GDK_KEY_f, GDK_CONTROL_MASK, + focus_search_cb, + NULL); + } static void @@ -206,6 +237,8 @@ mct_restrict_applications_dialog_init (MctRestrictApplicationsDialog *self) g_type_ensure (MCT_TYPE_RESTRICT_APPLICATIONS_SELECTOR); gtk_widget_init_template (GTK_WIDGET (self)); + + gtk_search_entry_set_key_capture_widget (self->search_entry, GTK_WIDGET (self)); } static void @@ -225,6 +258,25 @@ update_description (MctRestrictApplicationsDialog *self) adw_preferences_group_set_description (self->group, description); } +static void +search_entry_stop_search_cb (GtkSearchEntry *search_entry, + gpointer user_data) +{ + /* Clear the search text as the search filtering is bound to that. */ + gtk_editable_set_text (GTK_EDITABLE (search_entry), ""); +} + +static gboolean +focus_search_cb (GtkWidget *widget, + GVariant *arguments, + gpointer user_data) +{ + MctRestrictApplicationsDialog *self = MCT_RESTRICT_APPLICATIONS_DIALOG (widget); + + gtk_widget_grab_focus (GTK_WIDGET (self->search_entry)); + return TRUE; +} + /** * mct_restrict_applications_dialog_new: * @app_filter: (transfer none): the initial app filter configuration to show diff --git a/libmalcontent-ui/restrict-applications-dialog.ui b/libmalcontent-ui/restrict-applications-dialog.ui index 2fd728f..744d3a5 100644 --- a/libmalcontent-ui/restrict-applications-dialog.ui +++ b/libmalcontent-ui/restrict-applications-dialog.ui @@ -14,7 +14,21 @@ Restrict {username} from using the following installed applications. - + + vertical + 12 + + + Search for applications… + + + + + + + + + diff --git a/libmalcontent-ui/restrict-applications-selector.c b/libmalcontent-ui/restrict-applications-selector.c index 30f2dd9..c151066 100644 --- a/libmalcontent-ui/restrict-applications-selector.c +++ b/libmalcontent-ui/restrict-applications-selector.c @@ -41,6 +41,7 @@ static void app_info_changed_cb (GAppInfoMonitor *monitor, static void reload_apps (MctRestrictApplicationsSelector *self); static GtkWidget *create_row_for_app_cb (gpointer item, gpointer user_data); +static char *app_info_dup_name (GAppInfo *app_info); /** * MctRestrictApplicationsSelector: @@ -54,6 +55,11 @@ static GtkWidget *create_row_for_app_cb (gpointer item, * #MctAppFilterBuilder using * mct_restrict_applications_selector_build_app_filter(). * + * Search terms may be applied using #MctRestrictApplicationsSelector:search. + * These will filter the list of displayed apps so that only ones matching the + * search terms (by name, using UTF-8 normalisation and casefolding) will be + * displayed. + * * Since: 0.5.0 */ struct _MctRestrictApplicationsSelector @@ -64,6 +70,8 @@ struct _MctRestrictApplicationsSelector GList *cached_apps; /* (nullable) (owned) (element-type GAppInfo) */ GListStore *apps; + GtkFilterListModel *filtered_apps; + GtkStringFilter *search_filter; GAppInfoMonitor *app_info_monitor; /* (owned) */ gulong app_info_monitor_changed_id; GHashTable *blocklisted_apps; /* (owned) (element-type GAppInfo) */ @@ -74,6 +82,8 @@ struct _MctRestrictApplicationsSelector FlatpakInstallation *user_installation; /* (owned) */ GtkCssProvider *css_provider; /* (owned) */ + + gchar *search; /* (nullable) (owned) */ }; G_DEFINE_TYPE (MctRestrictApplicationsSelector, mct_restrict_applications_selector, GTK_TYPE_BOX) @@ -81,9 +91,10 @@ G_DEFINE_TYPE (MctRestrictApplicationsSelector, mct_restrict_applications_select typedef enum { PROP_APP_FILTER = 1, + PROP_SEARCH, } MctRestrictApplicationsSelectorProperty; -static GParamSpec *properties[PROP_APP_FILTER + 1]; +static GParamSpec *properties[PROP_SEARCH + 1]; enum { SIGNAL_CHANGED, @@ -124,6 +135,9 @@ mct_restrict_applications_selector_get_property (GObject *object, case PROP_APP_FILTER: g_value_set_boxed (value, self->app_filter); break; + case PROP_SEARCH: + g_value_set_string (value, self->search); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -143,6 +157,9 @@ mct_restrict_applications_selector_set_property (GObject *object, case PROP_APP_FILTER: mct_restrict_applications_selector_set_app_filter (self, g_value_get_boxed (value)); break; + case PROP_SEARCH: + mct_restrict_applications_selector_set_search (self, g_value_get_string (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -167,6 +184,7 @@ mct_restrict_applications_selector_dispose (GObject *object) g_clear_object (&self->system_installation); g_clear_object (&self->user_installation); g_clear_object (&self->css_provider); + g_clear_pointer (&self->search, g_free); G_OBJECT_CLASS (mct_restrict_applications_selector_parent_class)->dispose (object); } @@ -201,6 +219,23 @@ mct_restrict_applications_selector_class_init (MctRestrictApplicationsSelectorCl G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); + /** + * MctRestrictApplicationsSelector:search: (nullable) + * + * Search terms to filter the displayed list of apps by, or %NULL to not + * filter the search. + * + * Since: 0.12.0 + */ + properties[PROP_SEARCH] = + g_param_spec_string ("search", + "Search", + "Search terms to filter the displayed list of apps by.", + NULL, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS | + G_PARAM_EXPLICIT_NOTIFY); + g_object_class_install_properties (object_class, G_N_ELEMENTS (properties), properties); /** @@ -223,12 +258,15 @@ mct_restrict_applications_selector_class_init (MctRestrictApplicationsSelectorCl gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, listbox); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, apps); + gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, filtered_apps); + gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, search_filter); + + gtk_widget_class_bind_template_callback (widget_class, app_info_dup_name); } static void mct_restrict_applications_selector_init (MctRestrictApplicationsSelector *self) { - guint n_apps; gtk_widget_init_template (GTK_WIDGET (self)); @@ -238,7 +276,7 @@ mct_restrict_applications_selector_init (MctRestrictApplicationsSelector *self) (GCallback) app_info_changed_cb, self); gtk_list_box_bind_model (self->listbox, - G_LIST_MODEL (self->apps), + G_LIST_MODEL (self->filtered_apps), create_row_for_app_cb, self, NULL); @@ -359,6 +397,12 @@ create_row_for_app_cb (gpointer item, return row; } +static char * +app_info_dup_name (GAppInfo *app_info) +{ + return g_strdup (g_app_info_get_name (app_info)); +} + static gint compare_app_info_cb (gconstpointer a, gconstpointer b, @@ -767,7 +811,7 @@ mct_restrict_applications_selector_set_app_filter (MctRestrictApplicationsSelect self->app_filter = mct_app_filter_ref (app_filter); /* Update the status of each app row. */ - n_apps = g_list_model_get_n_items (G_LIST_MODEL (self->apps)); + n_apps = g_list_model_get_n_items (G_LIST_MODEL (self->filtered_apps)); for (guint i = 0; i < n_apps; i++) { @@ -786,3 +830,50 @@ mct_restrict_applications_selector_set_app_filter (MctRestrictApplicationsSelect g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_APP_FILTER]); } + +/** + * mct_restrict_applications_selector_get_search: + * @self: an #MctRestrictApplicationsSelector + * + * Get the value of #MctRestrictApplicationsSelector:search. + * + * Returns: current search terms, or %NULL if no search filtering is active + * Since: 0.12.0 + */ +const gchar * +mct_restrict_applications_selector_get_search (MctRestrictApplicationsSelector *self) +{ + g_return_val_if_fail (MCT_IS_RESTRICT_APPLICATIONS_SELECTOR (self), NULL); + + return self->search; +} + +/** + * mct_restrict_applications_selector_set_search: + * @self: an #MctRestrictApplicationsSelector + * @search: (nullable): search terms, or %NULL to not filter the app list + * + * Set the value of #MctRestrictApplicationsSelector:search, or clear it to + * %NULL. + * + * Since: 0.12.0 + */ +void +mct_restrict_applications_selector_set_search (MctRestrictApplicationsSelector *self, + const gchar *search) +{ + g_return_if_fail (MCT_IS_RESTRICT_APPLICATIONS_SELECTOR (self)); + + /* Squash empty search terms down to nothing. */ + if (search != NULL && *search == '\0') + search = NULL; + + if (g_strcmp0 (search, self->search) == 0) + return; + + g_clear_pointer (&self->search, g_free); + self->search = g_strdup (search); + + gtk_string_filter_set_search (self->search_filter, self->search); + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SEARCH]); +} diff --git a/libmalcontent-ui/restrict-applications-selector.h b/libmalcontent-ui/restrict-applications-selector.h index e02a10a..8a37916 100644 --- a/libmalcontent-ui/restrict-applications-selector.h +++ b/libmalcontent-ui/restrict-applications-selector.h @@ -41,4 +41,8 @@ void mct_restrict_applications_selector_set_app_filter (MctRestrictAppl void mct_restrict_applications_selector_build_app_filter (MctRestrictApplicationsSelector *self, MctAppFilterBuilder *builder); +const gchar *mct_restrict_applications_selector_get_search (MctRestrictApplicationsSelector *self); +void mct_restrict_applications_selector_set_search (MctRestrictApplicationsSelector *self, + const gchar *search); + G_END_DECLS diff --git a/libmalcontent-ui/restrict-applications-selector.ui b/libmalcontent-ui/restrict-applications-selector.ui index a45ea64..0c75dfb 100644 --- a/libmalcontent-ui/restrict-applications-selector.ui +++ b/libmalcontent-ui/restrict-applications-selector.ui @@ -26,4 +26,15 @@ GAppInfo + + + apps + search_filter + + + + + + + From 51bd3a668d1c20caf54f55a3c12d0af77b9a58a4 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Fri, 13 Oct 2023 14:51:25 +0100 Subject: [PATCH 09/15] ui: Add explicit focus outline to carousel items MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since they’re custom widgets, they need custom CSS to define a focus outline, and can’t rely on GTK providing it for them. Ideally we’d be using the same `$focus_border_color` as GTK does, and adjusting it for dark and high-contrast themes, but GTK doesn’t export that colour so we have to work around it. Signed-off-by: Philip Withnall Fixes: #53 --- malcontent-control/carousel.css | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/malcontent-control/carousel.css b/malcontent-control/carousel.css index 1c414d6..a2a0660 100644 --- a/malcontent-control/carousel.css +++ b/malcontent-control/carousel.css @@ -28,3 +28,12 @@ carousel-item { border: none; color: @theme_fg_color; } + +carousel-item:focus:focus-visible avatar { + /* this should actually be $focus_border_color from + * gtk/theme/Default/_colors.scss, but we have to simplify the theming slightly */ + outline-color: @theme_selected_bg_color; + outline-offset: -2px; + outline-width: 2px; + outline-style: solid; +} From c11596e3daea7ed40aed864a26a9453e7e0f9b04 Mon Sep 17 00:00:00 2001 From: AsciiWolf Date: Mon, 23 Oct 2023 23:04:48 +0200 Subject: [PATCH 10/15] Update Czech translation --- po/cs.po | 162 +++++++++++++++++++++++++------------------------------ 1 file changed, 74 insertions(+), 88 deletions(-) diff --git a/po/cs.po b/po/cs.po index fda724a..c57cfe2 100644 --- a/po/cs.po +++ b/po/cs.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" -"POT-Creation-Date: 2021-09-18 12:41+0000\n" -"PO-Revision-Date: 2021-10-02 00:36+0200\n" +"POT-Creation-Date: 2023-10-13 16:18+0000\n" +"PO-Revision-Date: 2023-10-23 23:04+0200\n" "Last-Translator: Daniel Rusek \n" "Language-Team: none\n" "Language: cs\n" @@ -17,7 +17,7 @@ msgstr "" "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: Poedit 3.0\n" +"X-Generator: Poedit 3.4\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" @@ -164,78 +164,36 @@ msgstr "Limit sezení pro uživatele %u má nerozpoznaný typ ‘%u’" msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "Limit sezení pro uživatele %u má neplatný denní rozvrh %u–%u" -#. TRANSLATORS: This is the formatting of English and localized name -#. of the rating e.g. "Adults Only (solo adultos)" -#: libmalcontent-ui/gs-content-rating.c:75 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" - -#: libmalcontent-ui/gs-content-rating.c:209 -msgid "General" -msgstr "Obecné" - -#: libmalcontent-ui/gs-content-rating.c:218 -msgid "ALL" -msgstr "VŠECHNY" - -#: libmalcontent-ui/gs-content-rating.c:222 -#: libmalcontent-ui/gs-content-rating.c:485 -msgid "Adults Only" -msgstr "pouze dospělé" - -#: libmalcontent-ui/gs-content-rating.c:224 -#: libmalcontent-ui/gs-content-rating.c:484 -msgid "Mature" -msgstr "plnoleté" - -#: libmalcontent-ui/gs-content-rating.c:226 -#: libmalcontent-ui/gs-content-rating.c:483 -msgid "Teen" -msgstr "mládež" - -#: libmalcontent-ui/gs-content-rating.c:228 -#: libmalcontent-ui/gs-content-rating.c:482 -msgid "Everyone 10+" -msgstr "všechny 10+" - -#: libmalcontent-ui/gs-content-rating.c:230 -#: libmalcontent-ui/gs-content-rating.c:481 -msgid "Everyone" -msgstr "všechny" - -#: libmalcontent-ui/gs-content-rating.c:232 -#: libmalcontent-ui/gs-content-rating.c:480 -msgid "Early Childhood" -msgstr "malé děti" - #. Translators: the placeholder is a user’s full name -#: libmalcontent-ui/restrict-applications-dialog.c:222 +#: libmalcontent-ui/restrict-applications-dialog.c:256 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "Omezit uživateli %s použití následujících nainstalovaných aplikací." #: libmalcontent-ui/restrict-applications-dialog.ui:6 -#: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "Omezit aplikace" -#: libmalcontent-ui/restrict-applications-selector.ui:24 +#: libmalcontent-ui/restrict-applications-dialog.ui:22 +msgid "Search for applications…" +msgstr "Hledat aplikace…" + +#: libmalcontent-ui/restrict-applications-selector.ui:13 msgid "No applications found to restrict." msgstr "Nenalezeny žádné aplikace k omezení." #. Translators: this is the full name for an unknown user account. -#: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218 +#: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209 msgid "unknown" msgstr "neznámé" -#: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397 -#: libmalcontent-ui/user-controls.c:669 +#: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388 +#: libmalcontent-ui/user-controls.c:641 msgid "All Ages" msgstr "libovolný věk" #. Translators: The placeholder is a user’s display name. -#: libmalcontent-ui/user-controls.c:477 +#: libmalcontent-ui/user-controls.c:470 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " @@ -245,48 +203,48 @@ msgstr "" "obsah může být stále dostupný v jiných aplikacích." #. Translators: The placeholder is a user’s display name. -#: libmalcontent-ui/user-controls.c:482 +#: libmalcontent-ui/user-controls.c:475 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Zabraňuje v používání určených aplikací uživatelem %s." #. Translators: The placeholder is a user’s display name. -#: libmalcontent-ui/user-controls.c:487 +#: libmalcontent-ui/user-controls.c:480 #, c-format msgid "Prevents %s from installing applications." msgstr "Zabraňuje uživateli %s v instalaci aplikací." -#: libmalcontent-ui/user-controls.ui:16 +#: libmalcontent-ui/user-controls.ui:25 msgid "Application Usage Restrictions" msgstr "Omezení použití aplikací" -#: libmalcontent-ui/user-controls.ui:67 +#: libmalcontent-ui/user-controls.ui:28 msgid "Restrict _Web Browsers" msgstr "Omezit _webové prohlížeče" -#: libmalcontent-ui/user-controls.ui:151 +#: libmalcontent-ui/user-controls.ui:51 msgid "_Restrict Applications" msgstr "Omezit _aplikace" -#: libmalcontent-ui/user-controls.ui:230 +#: libmalcontent-ui/user-controls.ui:73 msgid "Software Installation Restrictions" msgstr "Omezení instalace softwaru" -#: libmalcontent-ui/user-controls.ui:280 +#: libmalcontent-ui/user-controls.ui:77 msgid "Restrict Application _Installation" msgstr "Omezit _instalaci aplikací" -#: libmalcontent-ui/user-controls.ui:365 +#: libmalcontent-ui/user-controls.ui:99 msgid "Application _Suitability" msgstr "Vhodno_st aplikací" -#: libmalcontent-ui/user-controls.ui:387 +#: libmalcontent-ui/user-controls.ui:102 msgid "" -"Restricts browsing or installation of applications to applications suitable " -"for certain ages or above." +"Restricts the browsing or installation of applications unsuitable for this " +"age or younger." msgstr "" -"Omezí prohlížení nebo instalaci aplikací na aplikace vhodné pro určitý věk " -"nebo výše." +"Omezí prohlížení nebo instalaci aplikací nevhodných pro tento věk nebo " +"mladší." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 @@ -298,44 +256,44 @@ msgstr "Uživatel ke zvolení v UI" msgid "USERNAME" msgstr "UŽIVATEL" -#: malcontent-control/application.c:115 +#: malcontent-control/application.c:116 msgid "— view and edit parental controls" msgstr "— zobrazit a upravit rodičovskou kontrolu" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center -#: malcontent-control/application.c:122 malcontent-control/main.ui:12 +#: malcontent-control/application.c:123 malcontent-control/main.ui:17 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Rodičovská kontrola" -#: malcontent-control/application.c:308 +#: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Copyright © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. -#: malcontent-control/application.c:313 +#: malcontent-control/application.c:314 msgid "translator-credits" msgstr "Daniel Rusek " #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. -#: malcontent-control/application.c:319 +#: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "Webové stránky" -#: malcontent-control/application.c:337 +#: malcontent-control/application.c:341 msgid "The help contents could not be displayed" msgstr "Obsah nápovědy nemohl být zobrazen" -#: malcontent-control/application.c:374 +#: malcontent-control/application.c:388 msgid "Failed to load user data from the system" msgstr "Selhalo načtení uživatelských dat ze systému" -#: malcontent-control/application.c:376 +#: malcontent-control/application.c:390 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "Ověřte prosím, že je AccountsService nainstalováno a povoleno." @@ -348,7 +306,7 @@ msgstr "Ověřte prosím, že je AccountsService nainstalováno a povoleno." #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. -#: malcontent-control/application.c:407 +#: malcontent-control/application.c:421 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " @@ -359,29 +317,29 @@ msgstr "" "konverzace s %s. Přečtěte si návod na to, co je třeba vzít v úvahu." -#: malcontent-control/carousel.ui:48 +#: malcontent-control/carousel.ui:38 msgid "Previous Page" msgstr "Předchozí stránka" -#: malcontent-control/carousel.ui:74 +#: malcontent-control/carousel.ui:57 msgid "Next Page" msgstr "Následující stránka" -#: malcontent-control/main.ui:115 +#: malcontent-control/main.ui:87 msgid "Permission Required" msgstr "Vyžadováno oprávnění" -#: malcontent-control/main.ui:129 +#: malcontent-control/main.ui:88 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Pro zobrazení a změnu rodičovské kontroly uživatele je nutné oprávnění." -#: malcontent-control/main.ui:184 +#: malcontent-control/main.ui:110 msgid "No Standard User Accounts" msgstr "Žádný běžný uživatelský účet" -#: malcontent-control/main.ui:199 +#: malcontent-control/main.ui:111 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." @@ -389,19 +347,19 @@ msgstr "" "Rodičovská kontrola může být aplikována pouze na standardní uživatelské\n" "účty. Ty mohou být vytvořeny v nastavení uživatelů." -#: malcontent-control/main.ui:212 +#: malcontent-control/main.ui:115 msgid "_User Settings" msgstr "Nastavení _uživatelů" -#: malcontent-control/main.ui:242 +#: malcontent-control/main.ui:138 msgid "Loading…" msgstr "Načítá se…" -#: malcontent-control/main.ui:305 +#: malcontent-control/main.ui:171 msgid "_Help" msgstr "_Nápověda" -#: malcontent-control/main.ui:309 +#: malcontent-control/main.ui:175 msgid "_About Parental Controls" msgstr "O _aplikaci Rodičovská kontrola" @@ -426,7 +384,7 @@ msgstr "" msgid "Main window" msgstr "Hlavní okno" -#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:38 +#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "Projekt GNOME" @@ -474,6 +432,34 @@ msgstr "Uživatel ‘%s’ nemá žádný zbývající čas" msgid "Error setting time limit on login session: %s" msgstr "Chyba při nastavení časového limitu na přihlašovací sezení: %s" +#, c-format +#~ msgid "%s (%s)" +#~ msgstr "%s (%s)" + +#~ msgid "General" +#~ msgstr "Obecné" + +#~ msgid "ALL" +#~ msgstr "VŠECHNY" + +#~ msgid "Adults Only" +#~ msgstr "pouze dospělé" + +#~ msgid "Mature" +#~ msgstr "plnoleté" + +#~ msgid "Teen" +#~ msgstr "mládež" + +#~ msgid "Everyone 10+" +#~ msgstr "všechny 10+" + +#~ msgid "Everyone" +#~ msgstr "všechny" + +#~ msgid "Early Childhood" +#~ msgstr "malé děti" + #~ msgid "No cartoon violence" #~ msgstr "Žádné kreslené násilí" From 086b0ede78b541c6c235f2b0b29fee65348243fc Mon Sep 17 00:00:00 2001 From: Ser82-png Date: Sun, 29 Oct 2023 01:04:15 +1000 Subject: [PATCH 11/15] update ru.po --- po/ru.po | 160 +++++++++++++++++++++++++------------------------------ 1 file changed, 73 insertions(+), 87 deletions(-) diff --git a/po/ru.po b/po/ru.po index 44d3d7a..c05a2cd 100644 --- a/po/ru.po +++ b/po/ru.po @@ -8,17 +8,17 @@ msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" -"POT-Creation-Date: 2022-06-04 15:25+0000\n" -"PO-Revision-Date: 2022-06-19 20:05+1000\n" +"POT-Creation-Date: 2023-10-13 16:18+0000\n" +"PO-Revision-Date: 2023-10-29 01:03+1000\n" "Last-Translator: Ser82-png \n" "Language-Team: none\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 2.3\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.1\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" @@ -177,78 +177,36 @@ msgstr "" "Ограничение сеанса для пользователя %u имеет недопустимое ежедневное " "расписание %u–%u" -#. TRANSLATORS: This is the formatting of English and localized name -#. of the rating e.g. "Adults Only (solo adultos)" -#: libmalcontent-ui/gs-content-rating.c:75 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" - -#: libmalcontent-ui/gs-content-rating.c:209 -msgid "General" -msgstr "Общие" - -#: libmalcontent-ui/gs-content-rating.c:218 -msgid "ALL" -msgstr "ВСЕ" - -#: libmalcontent-ui/gs-content-rating.c:222 -#: libmalcontent-ui/gs-content-rating.c:485 -msgid "Adults Only" -msgstr "Только для взрослых" - -#: libmalcontent-ui/gs-content-rating.c:224 -#: libmalcontent-ui/gs-content-rating.c:484 -msgid "Mature" -msgstr "Для повзрослевшых" - -#: libmalcontent-ui/gs-content-rating.c:226 -#: libmalcontent-ui/gs-content-rating.c:483 -msgid "Teen" -msgstr "Для подростков" - -#: libmalcontent-ui/gs-content-rating.c:228 -#: libmalcontent-ui/gs-content-rating.c:482 -msgid "Everyone 10+" -msgstr "Для всех старше 10" - -#: libmalcontent-ui/gs-content-rating.c:230 -#: libmalcontent-ui/gs-content-rating.c:481 -msgid "Everyone" -msgstr "Для всех" - -#: libmalcontent-ui/gs-content-rating.c:232 -#: libmalcontent-ui/gs-content-rating.c:480 -msgid "Early Childhood" -msgstr "Для маленьких" - #. Translators: the placeholder is a user’s full name -#: libmalcontent-ui/restrict-applications-dialog.c:222 +#: libmalcontent-ui/restrict-applications-dialog.c:256 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "Запретить %s использовать следующие установленные приложения." #: libmalcontent-ui/restrict-applications-dialog.ui:6 -#: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "Ограничение доступа к приложениям" -#: libmalcontent-ui/restrict-applications-selector.ui:24 +#: libmalcontent-ui/restrict-applications-dialog.ui:22 +msgid "Search for applications…" +msgstr "Поиск приложений…" + +#: libmalcontent-ui/restrict-applications-selector.ui:13 msgid "No applications found to restrict." msgstr "Не найдено приложений, доступ к которым ограничен." #. Translators: this is the full name for an unknown user account. -#: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218 +#: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209 msgid "unknown" msgstr "неизвестный" -#: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397 -#: libmalcontent-ui/user-controls.c:669 +#: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388 +#: libmalcontent-ui/user-controls.c:641 msgid "All Ages" msgstr "Все возрастные группы" #. Translators: The placeholder is a user’s display name. -#: libmalcontent-ui/user-controls.c:477 +#: libmalcontent-ui/user-controls.c:470 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " @@ -258,48 +216,48 @@ msgstr "" "доступен в других приложениях." #. Translators: The placeholder is a user’s display name. -#: libmalcontent-ui/user-controls.c:482 +#: libmalcontent-ui/user-controls.c:475 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Запретить %s использование указанных приложений." #. Translators: The placeholder is a user’s display name. -#: libmalcontent-ui/user-controls.c:487 +#: libmalcontent-ui/user-controls.c:480 #, c-format msgid "Prevents %s from installing applications." msgstr "Запретить %s устанавливать приложения." -#: libmalcontent-ui/user-controls.ui:16 +#: libmalcontent-ui/user-controls.ui:25 msgid "Application Usage Restrictions" msgstr "Ограничения на использование приложений" -#: libmalcontent-ui/user-controls.ui:68 +#: libmalcontent-ui/user-controls.ui:28 msgid "Restrict _Web Browsers" msgstr "Ограничить доступ к _Веб-браузерам" -#: libmalcontent-ui/user-controls.ui:152 +#: libmalcontent-ui/user-controls.ui:51 msgid "_Restrict Applications" msgstr "_Ограничить доступ к приложениям" -#: libmalcontent-ui/user-controls.ui:231 +#: libmalcontent-ui/user-controls.ui:73 msgid "Software Installation Restrictions" msgstr "Ограничения на установку программного обеспечения" -#: libmalcontent-ui/user-controls.ui:282 +#: libmalcontent-ui/user-controls.ui:77 msgid "Restrict Application _Installation" msgstr "Ограничить _установку приложений" -#: libmalcontent-ui/user-controls.ui:367 +#: libmalcontent-ui/user-controls.ui:99 msgid "Application _Suitability" msgstr "_Пригодность приложений" -#: libmalcontent-ui/user-controls.ui:389 +#: libmalcontent-ui/user-controls.ui:102 msgid "" -"Restricts browsing or installation of applications to applications suitable " -"for certain ages or above." +"Restricts the browsing or installation of applications unsuitable for this " +"age or younger." msgstr "" -"Ограничить просмотр или установку приложений в соответствии с распределением " -"доступности по возрастным группам." +"Ограничить просмотр или установку приложений неподходящих для этой " +"возрастной группы." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 @@ -317,7 +275,7 @@ msgstr "— просмотр и редактирование родительс #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center -#: malcontent-control/application.c:123 malcontent-control/main.ui:12 +#: malcontent-control/application.c:123 malcontent-control/main.ui:17 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" @@ -332,7 +290,7 @@ msgstr "Copyright © 2019, 2020 Endless Mobile, Inc." #. this language, one per line. #: malcontent-control/application.c:314 msgid "translator-credits" -msgstr "Ser82-png , 2022" +msgstr "Ser82-png , 2022-2023" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. @@ -340,15 +298,15 @@ msgstr "Ser82-png , 2022" msgid "Malcontent Website" msgstr "Веб-сайт Malcontent" -#: malcontent-control/application.c:338 +#: malcontent-control/application.c:341 msgid "The help contents could not be displayed" msgstr "Содержание справки не может быть отображено" -#: malcontent-control/application.c:375 +#: malcontent-control/application.c:388 msgid "Failed to load user data from the system" msgstr "Не удалось загрузить пользовательские данные из системы" -#: malcontent-control/application.c:377 +#: malcontent-control/application.c:390 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "Убедитесь, что служба AccountsService установлена и включена." @@ -361,7 +319,7 @@ msgstr "Убедитесь, что служба AccountsService установл #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. -#: malcontent-control/application.c:408 +#: malcontent-control/application.c:421 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " @@ -372,30 +330,30 @@ msgstr "" "href='https://www.commonsensemedia.org/privacy-and-internet-" "safety'>Ознакомьтесь с инструкцией о том, что нужно учитывать." -#: malcontent-control/carousel.ui:48 +#: malcontent-control/carousel.ui:38 msgid "Previous Page" msgstr "Предыдущая страница" -#: malcontent-control/carousel.ui:74 +#: malcontent-control/carousel.ui:57 msgid "Next Page" msgstr "Следующая страница" -#: malcontent-control/main.ui:115 +#: malcontent-control/main.ui:87 msgid "Permission Required" msgstr "Требуется разрешение" -#: malcontent-control/main.ui:129 +#: malcontent-control/main.ui:88 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Требуется разрешение для просмотра и изменения настроек родительского " "контроля пользователя." -#: malcontent-control/main.ui:184 +#: malcontent-control/main.ui:110 msgid "No Standard User Accounts" msgstr "Нет обычных учётных записей пользователей" -#: malcontent-control/main.ui:199 +#: malcontent-control/main.ui:111 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." @@ -403,19 +361,19 @@ msgstr "" "Родительский контроль может быть применен только к обычным учётным\n" "записям пользователей. Такие записи можно создать в настройках пользователя." -#: malcontent-control/main.ui:212 +#: malcontent-control/main.ui:115 msgid "_User Settings" msgstr "Настройки _пользователя" -#: malcontent-control/main.ui:242 +#: malcontent-control/main.ui:138 msgid "Loading…" msgstr "Загрузка…" -#: malcontent-control/main.ui:305 +#: malcontent-control/main.ui:171 msgid "_Help" msgstr "_Справка" -#: malcontent-control/main.ui:309 +#: malcontent-control/main.ui:175 msgid "_About Parental Controls" msgstr "_О родительском контроле" @@ -454,7 +412,7 @@ msgid "" "usage;usage limit;kid;child;" msgstr "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" -"usage;usage limit;kid;child;родительский контроль;ребенок;" +"usage;usage limit;kid;child;родительский контроль;ребенок;ограничение;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" @@ -494,6 +452,34 @@ msgstr "У пользователя «%s» не осталось времени" msgid "Error setting time limit on login session: %s" msgstr "Ошибка установки ограничения времени на сеанс входа в систему: %s" +#, c-format +#~ msgid "%s (%s)" +#~ msgstr "%s (%s)" + +#~ msgid "General" +#~ msgstr "Общие" + +#~ msgid "ALL" +#~ msgstr "ВСЕ" + +#~ msgid "Adults Only" +#~ msgstr "Только для взрослых" + +#~ msgid "Mature" +#~ msgstr "Для повзрослевшых" + +#~ msgid "Teen" +#~ msgstr "Для подростков" + +#~ msgid "Everyone 10+" +#~ msgstr "Для всех старше 10" + +#~ msgid "Everyone" +#~ msgstr "Для всех" + +#~ msgid "Early Childhood" +#~ msgstr "Для маленьких" + #~ msgid "No cartoon violence" #~ msgstr "Отсутствуют сцены мультипликационного насилия" From 8d7b5607952a884a827b691eba696a59bfa47407 Mon Sep 17 00:00:00 2001 From: Anders Jonsson Date: Sat, 11 Nov 2023 14:11:07 +0100 Subject: [PATCH 12/15] Update Swedish translation --- po/sv.po | 164 +++++++++++++++++-------------------------------------- 1 file changed, 49 insertions(+), 115 deletions(-) diff --git a/po/sv.po b/po/sv.po index b21b09c..95f9443 100644 --- a/po/sv.po +++ b/po/sv.po @@ -1,16 +1,16 @@ # Swedish translations for malcontent package. -# Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER +# Copyright © 2020-2023 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. -# Anders Jonsson , 2020. +# Anders Jonsson , 2020, 2023. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" -"POT-Creation-Date: 2020-12-09 03:28+0000\n" -"PO-Revision-Date: 2020-12-17 18:28+0100\n" +"POT-Creation-Date: 2023-10-13 16:18+0000\n" +"PO-Revision-Date: 2023-10-20 21:11+0200\n" "Last-Translator: Anders Jonsson \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -18,7 +18,7 @@ msgstr "" "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.2\n" +"X-Generator: Poedit 3.4\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" @@ -165,79 +165,36 @@ msgstr "Sessionsgräns för användare %u har en okänd typ ”%u”" msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "Sessionsgräns för användare %u har ett ogiltigt dagsschema %u–%u" -#. TRANSLATORS: This is the formatting of English and localized name -#. of the rating e.g. "Adults Only (solo adultos)" -#: libmalcontent-ui/gs-content-rating.c:75 -#, c-format -msgid "%s (%s)" -msgstr "%s (%s)" - -# Alla åldrar i MDA-systemet -#: libmalcontent-ui/gs-content-rating.c:209 -msgid "General" -msgstr "Alla" - -#: libmalcontent-ui/gs-content-rating.c:218 -msgid "ALL" -msgstr "ALLA" - -#: libmalcontent-ui/gs-content-rating.c:222 -#: libmalcontent-ui/gs-content-rating.c:485 -msgid "Adults Only" -msgstr "Endast för vuxna" - -#: libmalcontent-ui/gs-content-rating.c:224 -#: libmalcontent-ui/gs-content-rating.c:484 -msgid "Mature" -msgstr "Mogen" - -#: libmalcontent-ui/gs-content-rating.c:226 -#: libmalcontent-ui/gs-content-rating.c:483 -msgid "Teen" -msgstr "Tonåring" - -#: libmalcontent-ui/gs-content-rating.c:228 -#: libmalcontent-ui/gs-content-rating.c:482 -msgid "Everyone 10+" -msgstr "Alla över 10 år" - -#: libmalcontent-ui/gs-content-rating.c:230 -#: libmalcontent-ui/gs-content-rating.c:481 -msgid "Everyone" -msgstr "Alla" - -#: libmalcontent-ui/gs-content-rating.c:232 -#: libmalcontent-ui/gs-content-rating.c:480 -msgid "Early Childhood" -msgstr "Tidig barndom" - #. Translators: the placeholder is a user’s full name -#: libmalcontent-ui/restrict-applications-dialog.c:222 +#: libmalcontent-ui/restrict-applications-dialog.c:256 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "Begränsa %s från att använda följande installerade program." #: libmalcontent-ui/restrict-applications-dialog.ui:6 -#: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "Begränsa program" -#: libmalcontent-ui/restrict-applications-selector.ui:24 +#: libmalcontent-ui/restrict-applications-dialog.ui:22 +msgid "Search for applications…" +msgstr "Sök efter program…" + +#: libmalcontent-ui/restrict-applications-selector.ui:13 msgid "No applications found to restrict." msgstr "Inga program att begränsa hittades." #. Translators: this is the full name for an unknown user account. -#: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218 +#: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209 msgid "unknown" msgstr "okänd" -#: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397 -#: libmalcontent-ui/user-controls.c:669 +#: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388 +#: libmalcontent-ui/user-controls.c:641 msgid "All Ages" msgstr "Alla åldrar" #. Translators: The placeholder is a user’s display name. -#: libmalcontent-ui/user-controls.c:477 +#: libmalcontent-ui/user-controls.c:470 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " @@ -247,48 +204,48 @@ msgstr "" "fortfarande finnas tillgängligt i andra program." #. Translators: The placeholder is a user’s display name. -#: libmalcontent-ui/user-controls.c:482 +#: libmalcontent-ui/user-controls.c:475 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Förhindrar angivna program från att användas av %s." #. Translators: The placeholder is a user’s display name. -#: libmalcontent-ui/user-controls.c:487 +#: libmalcontent-ui/user-controls.c:480 #, c-format msgid "Prevents %s from installing applications." msgstr "Förhindrar %s från att installera program." -#: libmalcontent-ui/user-controls.ui:16 +#: libmalcontent-ui/user-controls.ui:25 msgid "Application Usage Restrictions" msgstr "Begränsningar av programanvändning" -#: libmalcontent-ui/user-controls.ui:67 +#: libmalcontent-ui/user-controls.ui:28 msgid "Restrict _Web Browsers" msgstr "Begränsa _webbläsare" -#: libmalcontent-ui/user-controls.ui:151 +#: libmalcontent-ui/user-controls.ui:51 msgid "_Restrict Applications" msgstr "_Begränsa program" -#: libmalcontent-ui/user-controls.ui:230 +#: libmalcontent-ui/user-controls.ui:73 msgid "Software Installation Restrictions" msgstr "Begränsningar av programvaruinstallation" -#: libmalcontent-ui/user-controls.ui:280 +#: libmalcontent-ui/user-controls.ui:77 msgid "Restrict Application _Installation" msgstr "Begränsa _installation av program" -#: libmalcontent-ui/user-controls.ui:365 +#: libmalcontent-ui/user-controls.ui:99 msgid "Application _Suitability" msgstr "_Lämplighet för program" -#: libmalcontent-ui/user-controls.ui:387 +#: libmalcontent-ui/user-controls.ui:102 msgid "" -"Restricts browsing or installation of applications to applications suitable " -"for certain ages or above." +"Restricts the browsing or installation of applications unsuitable for this " +"age or younger." msgstr "" -"Begränsar bläddring bland eller installation av program till program som är " -"lämpliga för vissa åldrar och uppåt." +"Begränsar bläddring bland eller installation av program som är olämpliga för " +"denna ålder och yngre." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 @@ -300,44 +257,44 @@ msgstr "Användare att välja i användargränssnittet" msgid "USERNAME" msgstr "ANVÄNDARNAMN" -#: malcontent-control/application.c:115 +#: malcontent-control/application.c:116 msgid "— view and edit parental controls" msgstr "— visa och redigera föräldrakontroller" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center -#: malcontent-control/application.c:122 malcontent-control/main.ui:12 +#: malcontent-control/application.c:123 malcontent-control/main.ui:17 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Föräldrakontroller" -#: malcontent-control/application.c:308 +#: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Copyright © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. -#: malcontent-control/application.c:313 +#: malcontent-control/application.c:314 msgid "translator-credits" msgstr "Anders Jonsson " #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. -#: malcontent-control/application.c:319 +#: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "Webbplats för Malcontent" -#: malcontent-control/application.c:337 +#: malcontent-control/application.c:341 msgid "The help contents could not be displayed" msgstr "Hjälpinnehållet kunde inte visas" -#: malcontent-control/application.c:374 +#: malcontent-control/application.c:388 msgid "Failed to load user data from the system" msgstr "Misslyckades med att läsa in användardata från systemet" -#: malcontent-control/application.c:376 +#: malcontent-control/application.c:390 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "Försäkra dig om att AccountsService är installerat och aktiverat." @@ -350,7 +307,7 @@ msgstr "Försäkra dig om att AccountsService är installerat och aktiverat." #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. -#: malcontent-control/application.c:407 +#: malcontent-control/application.c:421 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " @@ -362,30 +319,30 @@ msgstr "" "internet-safety'>Du kan läsa denna guide (på engelska) om vad som finns " "att ta i beaktande." -#: malcontent-control/carousel.ui:48 +#: malcontent-control/carousel.ui:38 msgid "Previous Page" msgstr "Föregående sida" -#: malcontent-control/carousel.ui:74 +#: malcontent-control/carousel.ui:57 msgid "Next Page" msgstr "Nästa sida" -#: malcontent-control/main.ui:115 +#: malcontent-control/main.ui:87 msgid "Permission Required" msgstr "Behörighet krävs" -#: malcontent-control/main.ui:129 +#: malcontent-control/main.ui:88 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Behörighet krävs för att visa och ändra inställningar för föräldrakontroll " "för användare." -#: malcontent-control/main.ui:182 +#: malcontent-control/main.ui:110 msgid "No Standard User Accounts" msgstr "Inga standardanvändarkonton" -#: malcontent-control/main.ui:197 +#: malcontent-control/main.ui:111 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." @@ -394,19 +351,19 @@ msgstr "" "standardanvändarkonton. Dessa kan skapas i\n" "användarinställningarna." -#: malcontent-control/main.ui:210 +#: malcontent-control/main.ui:115 msgid "_User Settings" msgstr "_Användarinställningar" -#: malcontent-control/main.ui:238 +#: malcontent-control/main.ui:138 msgid "Loading…" msgstr "Läser in…" -#: malcontent-control/main.ui:301 +#: malcontent-control/main.ui:171 msgid "_Help" msgstr "_Hjälp" -#: malcontent-control/main.ui:305 +#: malcontent-control/main.ui:175 msgid "_About Parental Controls" msgstr "_Om Föräldrakontroller" @@ -431,12 +388,12 @@ msgstr "" msgid "Main window" msgstr "Huvudfönster" -#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:38 +#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "GNOME-projektet" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! -#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 +#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:14 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" @@ -478,26 +435,3 @@ msgstr "Användaren ”%s” har ingen återstående tid" #, c-format msgid "Error setting time limit on login session: %s" msgstr "Fel vid inställning av tidsgräns på inloggningssession: %s" - -#~ msgid "Not allowed to query session limits data for user %u" -#~ msgstr "Ej tillåtet att efterfråga sessionsgränsdata för användare %u" - -#~ msgid "Applications installed by %s will not appear for other users." -#~ msgstr "Program installerade av %s kommer inte visas för andra användare." - -# Systeminstallation ej tillåtet, användaren kan bara installera åt sig själv -#~ msgid "Restrict Application Installation for _Others" -#~ msgstr "Begränsa installation av program åt _andra" - -#~ msgid "No Child Users Configured" -#~ msgstr "Inga barnanvändare konfigurerade" - -#~ msgid "" -#~ "No child users are currently set up on the system. Create one before " -#~ "setting up their parental controls." -#~ msgstr "" -#~ "Inga barnanvändare har konfigurerats på systemet. Skapa en innan du " -#~ "konfigurerar deras föräldrakontroller." - -#~ msgid "Create _Child User" -#~ msgstr "Skapa _barnanvändare" From 6c561cd93c966173448fa8495a05a004e4a1148f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sabri=20=C3=9Cnal?= Date: Mon, 20 Nov 2023 04:18:08 +0300 Subject: [PATCH 13/15] data: Update appdata - Update the donation URL. - Add the cvs-browser URL. These URLs are visible on Flathub and GNOME Software. For more information: https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html#tag-url" --- .../org.freedesktop.MalcontentControl.appdata.xml.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in b/malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in index e8b27fd..a58a361 100644 --- a/malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in +++ b/malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in @@ -31,7 +31,8 @@ org.freedesktop.MalcontentControl.desktop https://gitlab.freedesktop.org/pwithnall/malcontent https://gitlab.freedesktop.org/pwithnall/malcontent/issues - http://www.gnome.org/friends/ + https://www.gnome.org/donate/ + https://gitlab.freedesktop.org/pwithnall/malcontent https://wiki.gnome.org/TranslationProject/LocalisationGuide philip_at_tecnocode.co.uk GNOME From cdaa32ae4e46d56c26a1ab945dfdde6439bd54ad Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Thu, 7 Dec 2023 10:10:53 +0000 Subject: [PATCH 14/15] Add AppInfo support to malcontent-client check-app-filter --- malcontent-client/malcontent-client.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/malcontent-client/malcontent-client.py b/malcontent-client/malcontent-client.py index 5bc4731..051bc54 100644 --- a/malcontent-client/malcontent-client.py +++ b/malcontent-client/malcontent-client.py @@ -297,6 +297,7 @@ def command_check_app_filter(user, arg, quiet=False, interactive=True): # when passing flatpak IDs as argument is_maybe_content_type = not is_maybe_flatpak_id and is_valid_content_type(arg) is_maybe_path = os.path.exists(arg) + is_maybe_desktop_file = arg.endswith('.desktop') recognised_types = sum([is_maybe_flatpak_id, is_maybe_flatpak_ref, is_maybe_content_type, is_maybe_path]) @@ -320,6 +321,11 @@ def command_check_app_filter(user, arg, quiet=False, interactive=True): # Content type is_allowed = app_filter.is_content_type_allowed(arg) noun = 'Content type' + elif is_maybe_path and is_maybe_desktop_file + path = os.path.abspath(arg) + app_info = Gio.DesktopAppInfo.new_from_filename(path) + is_allowed = app_filter.is_appinfo_allowed(app_info) + noun = 'Desktop file' elif is_maybe_path: path = os.path.abspath(arg) is_allowed = app_filter.is_path_allowed(path) From 8ca426f6315dac1daca332cd6dfc1da198709e43 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Wed, 20 Dec 2023 11:02:43 +0000 Subject: [PATCH 15/15] build: Hide private structs from generated GIR files Otherwise the fields in `MctAppFilter` become visible to introspected languages, which was not the intention. Spotted in https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/65. Signed-off-by: Philip Withnall --- libmalcontent/app-filter-private.h | 1 + libmalcontent/meson.build | 2 +- libmalcontent/session-limits-private.h | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/libmalcontent/app-filter-private.h b/libmalcontent/app-filter-private.h index 8b2fefd..8772ebc 100644 --- a/libmalcontent/app-filter-private.h +++ b/libmalcontent/app-filter-private.h @@ -48,6 +48,7 @@ typedef enum struct _MctAppFilter { + /*< private >*/ gint ref_count; uid_t user_id; diff --git a/libmalcontent/meson.build b/libmalcontent/meson.build index f68299c..2f36420 100644 --- a/libmalcontent/meson.build +++ b/libmalcontent/meson.build @@ -66,7 +66,7 @@ pkgconfig.generate(libmalcontent, ) libmalcontent_gir = gnome.generate_gir(libmalcontent, - sources: libmalcontent_sources + libmalcontent_headers + libmalcontent_private_headers + enums, + sources: libmalcontent_sources + libmalcontent_headers + enums, nsversion: libmalcontent_api_version, namespace: 'Malcontent', symbol_prefix: 'mct_', diff --git a/libmalcontent/session-limits-private.h b/libmalcontent/session-limits-private.h index 88f6c84..11a2ac9 100644 --- a/libmalcontent/session-limits-private.h +++ b/libmalcontent/session-limits-private.h @@ -50,6 +50,7 @@ typedef enum struct _MctSessionLimits { + /*< private >*/ gint ref_count; uid_t user_id;