From 9a6631a31d69a047681062db953483ea0ef71d6a Mon Sep 17 00:00:00 2001 From: Robert Ancell Date: Mon, 2 Nov 2020 16:35:20 +1300 Subject: universal-access: Split screen reader dialog into its own widget --- panels/universal-access/cc-screen-reader-dialog.c | 76 ++++++++++++++++++ panels/universal-access/cc-screen-reader-dialog.h | 29 +++++++ panels/universal-access/cc-screen-reader-dialog.ui | 83 ++++++++++++++++++++ panels/universal-access/cc-ua-panel.c | 16 +--- panels/universal-access/cc-ua-panel.ui | 89 ---------------------- panels/universal-access/meson.build | 2 + .../universal-access.gresource.xml | 1 + po/POTFILES.in | 1 + 8 files changed, 194 insertions(+), 103 deletions(-) create mode 100644 panels/universal-access/cc-screen-reader-dialog.c create mode 100644 panels/universal-access/cc-screen-reader-dialog.h create mode 100644 panels/universal-access/cc-screen-reader-dialog.ui diff --git a/panels/universal-access/cc-screen-reader-dialog.c b/panels/universal-access/cc-screen-reader-dialog.c new file mode 100644 index 000000000..b414291b9 --- /dev/null +++ b/panels/universal-access/cc-screen-reader-dialog.c @@ -0,0 +1,76 @@ +/* + * Copyright 2020 Canonical Ltd. + * + * 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.1 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 Lesser 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 "cc-screen-reader-dialog.h" + +#define APPLICATION_SETTINGS "org.gnome.desktop.a11y.applications" +#define KEY_SCREEN_READER_ENABLED "screen-reader-enabled" + +struct _CcScreenReaderDialog +{ + GtkDialog parent; + + GtkSwitch *enable_switch; + + GSettings *application_settings; +}; + +G_DEFINE_TYPE (CcScreenReaderDialog, cc_screen_reader_dialog, GTK_TYPE_DIALOG); + +static void +cc_screen_reader_dialog_dispose (GObject *object) +{ + CcScreenReaderDialog *self = CC_SCREEN_READER_DIALOG (object); + + g_clear_object (&self->application_settings); + + G_OBJECT_CLASS (cc_screen_reader_dialog_parent_class)->dispose (object); +} + +static void +cc_screen_reader_dialog_class_init (CcScreenReaderDialogClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + object_class->dispose = cc_screen_reader_dialog_dispose; + + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/universal-access/cc-screen-reader-dialog.ui"); + + gtk_widget_class_bind_template_child (widget_class, CcScreenReaderDialog, enable_switch); +} + +static void +cc_screen_reader_dialog_init (CcScreenReaderDialog *self) +{ + gtk_widget_init_template (GTK_WIDGET (self)); + + self->application_settings = g_settings_new (APPLICATION_SETTINGS); + + g_settings_bind (self->application_settings, KEY_SCREEN_READER_ENABLED, + self->enable_switch, "active", + G_SETTINGS_BIND_DEFAULT); +} + +CcScreenReaderDialog * +cc_screen_reader_dialog_new (void) +{ + return g_object_new (cc_screen_reader_dialog_get_type (), + "use-header-bar", TRUE, + NULL); +} diff --git a/panels/universal-access/cc-screen-reader-dialog.h b/panels/universal-access/cc-screen-reader-dialog.h new file mode 100644 index 000000000..7f38caa39 --- /dev/null +++ b/panels/universal-access/cc-screen-reader-dialog.h @@ -0,0 +1,29 @@ +/* + * Copyright 2020 Canonical Ltd. + * + * 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.1 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 Lesser 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 + */ + +#pragma once + +#include + +G_BEGIN_DECLS + +G_DECLARE_FINAL_TYPE (CcScreenReaderDialog, cc_screen_reader_dialog, CC, SCREEN_READER_DIALOG, GtkDialog) + +CcScreenReaderDialog *cc_screen_reader_dialog_new (void); + +G_END_DECLS diff --git a/panels/universal-access/cc-screen-reader-dialog.ui b/panels/universal-access/cc-screen-reader-dialog.ui new file mode 100644 index 000000000..7be34255e --- /dev/null +++ b/panels/universal-access/cc-screen-reader-dialog.ui @@ -0,0 +1,83 @@ + + + + + diff --git a/panels/universal-access/cc-ua-panel.c b/panels/universal-access/cc-ua-panel.c index 955d38544..a15bb29cf 100644 --- a/panels/universal-access/cc-ua-panel.c +++ b/panels/universal-access/cc-ua-panel.c @@ -31,6 +31,7 @@ #include "cc-ua-panel.h" #include "cc-ua-resources.h" #include "cc-cursor-size-dialog.h" +#include "cc-screen-reader-dialog.h" #include "cc-zoom-options-dialog.h" #define DPI_FACTOR_LARGE 1.25 @@ -141,8 +142,6 @@ struct _CcUaPanel GtkListBoxRow *row_zoom; GtkWidget *scale_double_click_delay; GtkWidget *screen_keyboard_switch; - GtkDialog *screen_reader_dialog; - GtkWidget *screen_reader_switch; GtkWidget *section_status; GtkDialog *sound_keys_dialog; GtkWidget *sound_keys_switch; @@ -277,8 +276,6 @@ cc_ua_panel_class_init (CcUaPanelClass *klass) gtk_widget_class_bind_template_child (widget_class, CcUaPanel, row_zoom); gtk_widget_class_bind_template_child (widget_class, CcUaPanel, scale_double_click_delay); gtk_widget_class_bind_template_child (widget_class, CcUaPanel, screen_keyboard_switch); - gtk_widget_class_bind_template_child (widget_class, CcUaPanel, screen_reader_dialog); - gtk_widget_class_bind_template_child (widget_class, CcUaPanel, screen_reader_switch); gtk_widget_class_bind_template_child (widget_class, CcUaPanel, section_status); gtk_widget_class_bind_template_child (widget_class, CcUaPanel, sound_keys_dialog); gtk_widget_class_bind_template_child (widget_class, CcUaPanel, sound_keys_switch); @@ -575,7 +572,7 @@ activate_row (CcUaPanel *self, GtkListBoxRow *row) } else if (row == self->row_screen_reader) { - show_dialog (self, self->screen_reader_dialog); + run_dialog (self, GTK_DIALOG (cc_screen_reader_dialog_new ())); } else if (row == self->row_sound_keys) { @@ -655,15 +652,6 @@ cc_ua_panel_init_seeing (CcUaPanel *self) on_off_label_mapping_get, NULL, NULL, NULL); - g_settings_bind (self->application_settings, "screen-reader-enabled", - self->screen_reader_switch, "active", - G_SETTINGS_BIND_DEFAULT); - - self->toplevels = g_slist_prepend (self->toplevels, self->screen_reader_dialog); - - g_signal_connect (self->screen_reader_dialog, "delete-event", - G_CALLBACK (gtk_widget_hide_on_delete), NULL); - /* sound keys */ g_settings_bind_with_mapping (self->kb_settings, KEY_TOGGLEKEYS_ENABLED, diff --git a/panels/universal-access/cc-ua-panel.ui b/panels/universal-access/cc-ua-panel.ui index 833cf84b2..530942c6a 100644 --- a/panels/universal-access/cc-ua-panel.ui +++ b/panels/universal-access/cc-ua-panel.ui @@ -1060,95 +1060,6 @@ - - False - 5 - Screen Reader - dialog - False - True - 1 - - - False - vertical - 12 - 12 - - - True - False - 0 - 45 - The screen reader reads displayed text as you move the focus. - True - - - False - True - 0 - - - - - True - False - - - - True - False - 12 - 6 - 12 - 12 - 12 - 6 - - - True - False - True - 0 - _Screen Reader - True - screen_reader_switch - - - 0 - 0 - 1 - 1 - - - - - True - True - end - - - 1 - 0 - 1 - 1 - - - - - False - True - 2 - - - - - - - False 5 diff --git a/panels/universal-access/meson.build b/panels/universal-access/meson.build index de3ba3e19..5049cd4e1 100644 --- a/panels/universal-access/meson.build +++ b/panels/universal-access/meson.build @@ -19,6 +19,7 @@ i18n.merge_file( sources = files( 'cc-cursor-size-dialog.c', + 'cc-screen-reader-dialog.c', 'cc-ua-panel.c', 'cc-zoom-options-dialog.c' ) @@ -31,6 +32,7 @@ resource_data = files( 'left_ptr_64px.png', 'left_ptr_96px.png', 'cc-cursor-size-dialog.ui', + 'cc-screen-reader-dialog.ui', 'cc-zoom-options-dialog.ui' ) diff --git a/panels/universal-access/universal-access.gresource.xml b/panels/universal-access/universal-access.gresource.xml index b8b5029b7..2f0aac785 100644 --- a/panels/universal-access/universal-access.gresource.xml +++ b/panels/universal-access/universal-access.gresource.xml @@ -2,6 +2,7 @@ cc-cursor-size-dialog.ui + cc-screen-reader-dialog.ui cc-ua-panel.ui cc-zoom-options-dialog.ui left_ptr_24px.png diff --git a/po/POTFILES.in b/po/POTFILES.in index ea5abe186..795ff4ba3 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -216,6 +216,7 @@ panels/thunderbolt/cc-bolt-panel.c panels/thunderbolt/cc-bolt-panel.ui panels/thunderbolt/gnome-thunderbolt-panel.desktop.in.in panels/universal-access/cc-cursor-size-dialog.ui +panels/universal-access/cc-screen-reader-dialog.ui panels/universal-access/cc-ua-panel.c panels/universal-access/cc-ua-panel.ui panels/universal-access/cc-zoom-options-dialog.c -- cgit v1.2.1