diff --git a/panels/universal-access/cc-repeat-keys-dialog.c b/panels/universal-access/cc-repeat-keys-dialog.c new file mode 100644 index 000000000..4a653997b --- /dev/null +++ b/panels/universal-access/cc-repeat-keys-dialog.c @@ -0,0 +1,108 @@ +/* + * 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-repeat-keys-dialog.h" + +#define KEYBOARD_SETTINGS "org.gnome.desktop.peripherals.keyboard" +#define KEY_REPEAT_KEYS "repeat" +#define KEY_DELAY "delay" +#define KEY_REPEAT_INTERVAL "repeat-interval" + +struct _CcRepeatKeysDialog +{ + GtkDialog parent; + + GtkSwitch *enable_switch; + GtkGrid *delay_grid; + GtkScale *delay_scale; + GtkGrid *speed_grid; + GtkScale *speed_scale; + + GSettings *keyboard_settings; +}; + +G_DEFINE_TYPE (CcRepeatKeysDialog, cc_repeat_keys_dialog, GTK_TYPE_DIALOG); + +static void +on_repeat_keys_toggled (CcRepeatKeysDialog *self) +{ + gboolean on; + + on = g_settings_get_boolean (self->keyboard_settings, KEY_REPEAT_KEYS); + + gtk_widget_set_sensitive (GTK_WIDGET (self->delay_grid), on); + gtk_widget_set_sensitive (GTK_WIDGET (self->speed_grid), on); +} + +static void +cc_repeat_keys_dialog_dispose (GObject *object) +{ + CcRepeatKeysDialog *self = CC_REPEAT_KEYS_DIALOG (object); + + g_clear_object (&self->keyboard_settings); + + G_OBJECT_CLASS (cc_repeat_keys_dialog_parent_class)->dispose (object); +} + +static void +cc_repeat_keys_dialog_class_init (CcRepeatKeysDialogClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + object_class->dispose = cc_repeat_keys_dialog_dispose; + + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/universal-access/cc-repeat-keys-dialog.ui"); + + gtk_widget_class_bind_template_child (widget_class, CcRepeatKeysDialog, enable_switch); + gtk_widget_class_bind_template_child (widget_class, CcRepeatKeysDialog, delay_grid); + gtk_widget_class_bind_template_child (widget_class, CcRepeatKeysDialog, delay_scale); + gtk_widget_class_bind_template_child (widget_class, CcRepeatKeysDialog, speed_grid); + gtk_widget_class_bind_template_child (widget_class, CcRepeatKeysDialog, speed_scale); +} + +static void +cc_repeat_keys_dialog_init (CcRepeatKeysDialog *self) +{ + gtk_widget_init_template (GTK_WIDGET (self)); + + self->keyboard_settings = g_settings_new (KEYBOARD_SETTINGS); + + g_signal_connect_object (self->keyboard_settings, "changed", + G_CALLBACK (on_repeat_keys_toggled), self, G_CONNECT_SWAPPED); + on_repeat_keys_toggled (self); + + g_settings_bind (self->keyboard_settings, KEY_REPEAT_KEYS, + self->enable_switch, "active", + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind (self->keyboard_settings, KEY_DELAY, + gtk_range_get_adjustment (GTK_RANGE (self->delay_scale)), "value", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind (self->keyboard_settings, KEY_REPEAT_INTERVAL, + gtk_range_get_adjustment (GTK_RANGE (self->speed_scale)), "value", + G_SETTINGS_BIND_DEFAULT); +} + +CcRepeatKeysDialog * +cc_repeat_keys_dialog_new (void) +{ + return g_object_new (cc_repeat_keys_dialog_get_type (), + "use-header-bar", TRUE, + NULL); +} diff --git a/panels/universal-access/cc-repeat-keys-dialog.h b/panels/universal-access/cc-repeat-keys-dialog.h new file mode 100644 index 000000000..ebc1a7693 --- /dev/null +++ b/panels/universal-access/cc-repeat-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 (CcRepeatKeysDialog, cc_repeat_keys_dialog, CC, REPEAT_KEYS_DIALOG, GtkDialog) + +CcRepeatKeysDialog *cc_repeat_keys_dialog_new (void); + +G_END_DECLS diff --git a/panels/universal-access/cc-repeat-keys-dialog.ui b/panels/universal-access/cc-repeat-keys-dialog.ui new file mode 100644 index 000000000..cf44651a2 --- /dev/null +++ b/panels/universal-access/cc-repeat-keys-dialog.ui @@ -0,0 +1,216 @@ + + + + + + 100 + 2000 + 500 + 10 + 10 + + + 0.5 + 110 + 33.3 + 1 + 1 + + + + + + + + + + + + + + diff --git a/panels/universal-access/cc-ua-panel.c b/panels/universal-access/cc-ua-panel.c index 49dfa1e4b..316408664 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-repeat-keys-dialog.h" #include "cc-sound-keys-dialog.h" #include "cc-screen-reader-dialog.h" #include "cc-visual-alerts-dialog.h" @@ -122,12 +123,6 @@ struct _CcUaPanel GtkWidget *pointing_secondary_click_delay_box; GtkWidget *pointing_secondary_click_delay_scale; GtkWidget *pointing_secondary_click_switch; - GtkWidget *repeat_keys_delay_grid; - GtkWidget *repeat_keys_delay_scale; - GtkDialog *repeat_keys_dialog; - GtkWidget *repeat_keys_speed_grid; - GtkWidget *repeat_keys_speed_scale; - GtkWidget *repeat_keys_switch; GtkListBoxRow *row_accessx; GtkListBoxRow *row_click_assist; GtkListBoxRow *row_cursor_blinking; @@ -253,12 +248,6 @@ cc_ua_panel_class_init (CcUaPanelClass *klass) gtk_widget_class_bind_template_child (widget_class, CcUaPanel, pointing_secondary_click_delay_box); gtk_widget_class_bind_template_child (widget_class, CcUaPanel, pointing_secondary_click_delay_scale); gtk_widget_class_bind_template_child (widget_class, CcUaPanel, pointing_secondary_click_switch); - gtk_widget_class_bind_template_child (widget_class, CcUaPanel, repeat_keys_delay_grid); - gtk_widget_class_bind_template_child (widget_class, CcUaPanel, repeat_keys_delay_scale); - gtk_widget_class_bind_template_child (widget_class, CcUaPanel, repeat_keys_dialog); - gtk_widget_class_bind_template_child (widget_class, CcUaPanel, repeat_keys_speed_grid); - gtk_widget_class_bind_template_child (widget_class, CcUaPanel, repeat_keys_speed_scale); - gtk_widget_class_bind_template_child (widget_class, CcUaPanel, repeat_keys_switch); gtk_widget_class_bind_template_child (widget_class, CcUaPanel, row_accessx); gtk_widget_class_bind_template_child (widget_class, CcUaPanel, row_click_assist); gtk_widget_class_bind_template_child (widget_class, CcUaPanel, row_cursor_blinking); @@ -571,7 +560,7 @@ activate_row (CcUaPanel *self, GtkListBoxRow *row) } else if (row == self->row_repeat_keys) { - show_dialog (self, self->repeat_keys_dialog); + run_dialog (self, GTK_DIALOG (cc_repeat_keys_dialog_new ())); } else if (row == self->row_cursor_blinking) { @@ -676,9 +665,6 @@ on_repeat_keys_toggled (CcUaPanel *self) on = g_settings_get_boolean (self->kb_desktop_settings, KEY_REPEAT_KEYS); gtk_label_set_text (GTK_LABEL (self->value_repeat_keys), on ? _("On") : _("Off")); - - gtk_widget_set_sensitive (self->repeat_keys_delay_grid, on); - gtk_widget_set_sensitive (self->repeat_keys_speed_grid, on); } static void @@ -726,25 +712,8 @@ cc_ua_panel_init_keyboard (CcUaPanel *self) /* Repeat keys */ g_signal_connect_object (self->kb_desktop_settings, "changed", G_CALLBACK (on_repeat_keys_toggled), self, G_CONNECT_SWAPPED); - - self->toplevels = g_slist_prepend (self->toplevels, self->repeat_keys_dialog); - - g_signal_connect (self->repeat_keys_dialog, "delete-event", - G_CALLBACK (gtk_widget_hide_on_delete), NULL); - - sw = self->repeat_keys_switch; - g_settings_bind (self->kb_desktop_settings, KEY_REPEAT_KEYS, - sw, "active", - G_SETTINGS_BIND_DEFAULT); on_repeat_keys_toggled (self); - g_settings_bind (self->kb_desktop_settings, "delay", - gtk_range_get_adjustment (GTK_RANGE (self->repeat_keys_delay_scale)), "value", - G_SETTINGS_BIND_DEFAULT); - g_settings_bind (self->kb_desktop_settings, "repeat-interval", - gtk_range_get_adjustment (GTK_RANGE (self->repeat_keys_speed_scale)), "value", - G_SETTINGS_BIND_DEFAULT); - /* Cursor Blinking */ g_signal_connect_object (self->interface_settings, "changed", G_CALLBACK (on_cursor_blinking_toggled), self, G_CONNECT_SWAPPED); diff --git a/panels/universal-access/cc-ua-panel.ui b/panels/universal-access/cc-ua-panel.ui index bf5cdd79e..f19e48e29 100644 --- a/panels/universal-access/cc-ua-panel.ui +++ b/panels/universal-access/cc-ua-panel.ui @@ -9,20 +9,6 @@ 100 100 - - 100 - 2000 - 500 - 10 - 10 - - - 0.5 - 110 - 33.3 - 1 - 1 - 100 2500 @@ -1072,227 +1058,6 @@ 10 10 - - False - 5 - Repeat Keys - False - True - dialog - 1 - - - True - - - True - True - center - - - end - - - - - - - False - vertical - - - True - True - False - 0 - Key presses repeat when key is held down. - 12 - 6 - 6 - 12 - - - True - True - 0 - - - - - True - False - start - 12 - 6 - 6 - 12 - vertical - 18 - 24 - - - True - False - start - vertical - 6 - - - True - False - vertical - - - True - True - False - 0 - Delay - repeat_keys_delay_scale - - - - - - False - True - 0 - - - - - False - True - 0 - - - - - 0 - 1 - 1 - 1 - - - - - True - True - True - repeat_delay_adjustment - False - False - 400 - - - Repeat keys delay - - - - - 1 - 1 - 1 - 1 - - - - - True - True - 1 - - - - - True - False - start - 12 - 6 - 6 - 12 - vertical - 18 - 24 - - - True - False - start - vertical - 6 - - - True - False - vertical - - - True - True - False - 0 - Speed - repeat_keys_speed_scale - - - - - - False - True - 0 - - - - - False - True - 0 - - - - - 0 - 1 - 1 - 1 - - - - - True - True - True - repeat_speed_adjustment - False - False - True - 200 - - - Repeat keys speed - - - - - 1 - 1 - 1 - 1 - - - - - True - True - 2 - - - - - False 5 @@ -1426,18 +1191,6 @@ - - - - - - - - - - - - False 5 diff --git a/panels/universal-access/meson.build b/panels/universal-access/meson.build index f2df85b08..d9c7354e7 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-repeat-keys-dialog.c', 'cc-sound-keys-dialog.c', 'cc-screen-reader-dialog.c', 'cc-ua-panel.c', @@ -34,6 +35,7 @@ resource_data = files( 'left_ptr_64px.png', 'left_ptr_96px.png', 'cc-cursor-size-dialog.ui', + 'cc-repeat-keys-dialog.ui', 'cc-sound-keys-dialog.ui', 'cc-screen-reader-dialog.ui', 'cc-visual-alerts-dialog.ui', diff --git a/panels/universal-access/universal-access.gresource.xml b/panels/universal-access/universal-access.gresource.xml index 9558627d2..8b8cf59bb 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-repeat-keys-dialog.ui cc-sound-keys-dialog.ui cc-screen-reader-dialog.ui cc-ua-panel.ui diff --git a/po/POTFILES.in b/po/POTFILES.in index 4eff4fef1..912db39db 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-repeat-keys-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