From 84eed6b0cf9f0b44db5a030018bfca17dae18fd5 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Mon, 28 Feb 2011 14:46:03 +0000 Subject: [PATCH] keyboard: Switch repeat rate/speed to be a fraction Instead of settings the absolute value of the repeat rate in msecs through the scale, we set the number of chars per sec, and use GSettings' bindings functions to transform those a timeout. https://bugzilla.gnome.org/show_bug.cgi?id=569612 --- panels/keyboard/gnome-keyboard-panel.ui | 14 ++++++------ panels/keyboard/keyboard-general.c | 30 ++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/panels/keyboard/gnome-keyboard-panel.ui b/panels/keyboard/gnome-keyboard-panel.ui index b961a9795..6dbe9bbe7 100644 --- a/panels/keyboard/gnome-keyboard-panel.ui +++ b/panels/keyboard/gnome-keyboard-panel.ui @@ -815,13 +815,6 @@ button1 - - 10 - 110 - 30 - 10 - 10 - @@ -836,6 +829,13 @@ 10 10 + + 0.5 + 50 + 33.3 + 1 + 1 + diff --git a/panels/keyboard/keyboard-general.c b/panels/keyboard/keyboard-general.c index 9dd5ea6d8..dd4c0a399 100644 --- a/panels/keyboard/keyboard-general.c +++ b/panels/keyboard/keyboard-general.c @@ -24,6 +24,29 @@ static GSettings *keyboard_settings = NULL; static GSettings *interface_settings = NULL; +static gboolean +get_rate (GValue *value, + GVariant *variant, + gpointer user_data) +{ + int rate; + + rate = g_variant_get_int32 (variant); + g_value_set_double (value, 1 / (gdouble) rate / 1000); + return TRUE; +} + +static GVariant * +set_rate (const GValue *value, + const GVariantType *expected_type, + gpointer user_data) +{ + gdouble rate; + + rate = g_value_get_double (value); + return g_variant_new_int32 ((1 / rate) * 1000); +} + void keyboard_general_init (CcPanel *panel, GtkBuilder *builder) { @@ -39,9 +62,10 @@ keyboard_general_init (CcPanel *panel, GtkBuilder *builder) g_settings_bind (keyboard_settings, "delay", gtk_range_get_adjustment (GTK_RANGE (gtk_builder_get_object (builder, "repeat_delay_scale"))), "value", G_SETTINGS_BIND_DEFAULT); - g_settings_bind (keyboard_settings, "rate", - gtk_range_get_adjustment (GTK_RANGE (gtk_builder_get_object (builder, "repeat_speed_scale"))), "value", - G_SETTINGS_BIND_DEFAULT); + g_settings_bind_with_mapping (keyboard_settings, "rate", + gtk_range_get_adjustment (GTK_RANGE (gtk_builder_get_object (builder, "repeat_speed_scale"))), "value", + G_SETTINGS_BIND_DEFAULT, + get_rate, set_rate, NULL, NULL); g_settings_bind (interface_settings, "cursor-blink", gtk_builder_get_object (builder, "cursor_toggle"), "active",