diff --git a/panels/universal-access/cc-sound-keys-dialog.c b/panels/universal-access/cc-sound-keys-dialog.c new file mode 100644 index 000000000..4cbf5835c --- /dev/null +++ b/panels/universal-access/cc-sound-keys-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-sound-keys-dialog.h" + +#define KEYBOARD_SETTINGS "org.gnome.desktop.a11y.keyboard" +#define KEY_TOGGLEKEYS_ENABLED "togglekeys-enable" + +struct _CcSoundKeysDialog +{ + GtkDialog parent; + + GtkSwitch *enable_switch; + + GSettings *keyboard_settings; +}; + +G_DEFINE_TYPE (CcSoundKeysDialog, cc_sound_keys_dialog, GTK_TYPE_DIALOG); + +static void +cc_sound_keys_dialog_dispose (GObject *object) +{ + CcSoundKeysDialog *self = CC_SOUND_KEYS_DIALOG (object); + + g_clear_object (&self->keyboard_settings); + + G_OBJECT_CLASS (cc_sound_keys_dialog_parent_class)->dispose (object); +} + +static void +cc_sound_keys_dialog_class_init (CcSoundKeysDialogClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + object_class->dispose = cc_sound_keys_dialog_dispose; + + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/universal-access/cc-sound-keys-dialog.ui"); + + gtk_widget_class_bind_template_child (widget_class, CcSoundKeysDialog, enable_switch); +} + +static void +cc_sound_keys_dialog_init (CcSoundKeysDialog *self) +{ + gtk_widget_init_template (GTK_WIDGET (self)); + + self->keyboard_settings = g_settings_new (KEYBOARD_SETTINGS); + + g_settings_bind (self->keyboard_settings, KEY_TOGGLEKEYS_ENABLED, + self->enable_switch, "active", + G_SETTINGS_BIND_DEFAULT); +} + +CcSoundKeysDialog * +cc_sound_keys_dialog_new (void) +{ + return g_object_new (cc_sound_keys_dialog_get_type (), + "use-header-bar", TRUE, + NULL); +} diff --git a/panels/universal-access/cc-sound-keys-dialog.h b/panels/universal-access/cc-sound-keys-dialog.h new file mode 100644 index 000000000..4a3297753 --- /dev/null +++ b/panels/universal-access/cc-sound-keys-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 (CcSoundKeysDialog, cc_sound_keys_dialog, CC, SOUND_KEYS_DIALOG, GtkDialog) + +CcSoundKeysDialog *cc_sound_keys_dialog_new (void); + +G_END_DECLS diff --git a/panels/universal-access/cc-sound-keys-dialog.ui b/panels/universal-access/cc-sound-keys-dialog.ui new file mode 100644 index 000000000..59a708ce1 --- /dev/null +++ b/panels/universal-access/cc-sound-keys-dialog.ui @@ -0,0 +1,74 @@ + + + + + diff --git a/panels/universal-access/cc-ua-panel.c b/panels/universal-access/cc-ua-panel.c index a15bb29cf..6dc6ed299 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-sound-keys-dialog.h" #include "cc-screen-reader-dialog.h" #include "cc-zoom-options-dialog.h" @@ -143,8 +144,6 @@ struct _CcUaPanel GtkWidget *scale_double_click_delay; GtkWidget *screen_keyboard_switch; GtkWidget *section_status; - GtkDialog *sound_keys_dialog; - GtkWidget *sound_keys_switch; GtkWidget *switch_status; GtkWidget *typing_bouncekeys_beep_rejected_check; GtkWidget *typing_bouncekeys_delay_box; @@ -277,8 +276,6 @@ cc_ua_panel_class_init (CcUaPanelClass *klass) 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, 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); gtk_widget_class_bind_template_child (widget_class, CcUaPanel, switch_status); gtk_widget_class_bind_template_child (widget_class, CcUaPanel, typing_bouncekeys_beep_rejected_check); gtk_widget_class_bind_template_child (widget_class, CcUaPanel, typing_bouncekeys_delay_box); @@ -576,7 +573,7 @@ activate_row (CcUaPanel *self, GtkListBoxRow *row) } else if (row == self->row_sound_keys) { - show_dialog (self, self->sound_keys_dialog); + run_dialog (self, GTK_DIALOG (cc_sound_keys_dialog_new ())); } else if (row == self->row_visual_alerts) { @@ -659,15 +656,6 @@ cc_ua_panel_init_seeing (CcUaPanel *self) G_SETTINGS_BIND_GET, on_off_label_mapping_get, NULL, NULL, NULL); - - g_settings_bind (self->kb_settings, KEY_TOGGLEKEYS_ENABLED, - self->sound_keys_switch, "active", - G_SETTINGS_BIND_DEFAULT); - - self->toplevels = g_slist_prepend (self->toplevels, self->sound_keys_dialog); - - g_signal_connect (self->sound_keys_dialog, "delete-event", - G_CALLBACK (gtk_widget_hide_on_delete), NULL); } /* hearing/sound section */ diff --git a/panels/universal-access/cc-ua-panel.ui b/panels/universal-access/cc-ua-panel.ui index 530942c6a..72e332606 100644 --- a/panels/universal-access/cc-ua-panel.ui +++ b/panels/universal-access/cc-ua-panel.ui @@ -1060,86 +1060,6 @@ - - False - 5 - Sound Keys - False - True - dialog - 1 - - - False - vertical - 2 - - - True - False - 12 - 6 - 6 - 0 - Beep when Num Lock or Caps Lock are turned on or off. - True - - - False - True - 0 - - - - - True - False - 12 - 6 - 12 - 12 - 12 - 6 - - - True - False - True - 0 - _Sound Keys - True - sound_keys_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 5049cd4e1..fd97ad3aa 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-sound-keys-dialog.c', 'cc-screen-reader-dialog.c', 'cc-ua-panel.c', 'cc-zoom-options-dialog.c' @@ -32,6 +33,7 @@ resource_data = files( 'left_ptr_64px.png', 'left_ptr_96px.png', 'cc-cursor-size-dialog.ui', + 'cc-sound-keys-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 2f0aac785..c06079a03 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-sound-keys-dialog.ui cc-screen-reader-dialog.ui cc-ua-panel.ui cc-zoom-options-dialog.ui diff --git a/po/POTFILES.in b/po/POTFILES.in index 795ff4ba3..5bffeef8b 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-sound-keys-dialog.ui panels/universal-access/cc-screen-reader-dialog.ui panels/universal-access/cc-ua-panel.c panels/universal-access/cc-ua-panel.ui