[gnome-control-center] keyboard: Switch repeat rate/speed to be a fraction



commit 84eed6b0cf9f0b44db5a030018bfca17dae18fd5
Author: Bastien Nocera <hadess hadess net>
Date:   Mon Feb 28 14:46:03 2011 +0000

    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 b961a97..6dbe9bb 100644
--- a/panels/keyboard/gnome-keyboard-panel.ui
+++ b/panels/keyboard/gnome-keyboard-panel.ui
@@ -815,13 +815,6 @@
       <action-widget response="0">button1</action-widget>
     </action-widgets>
   </object>
-  <object class="GtkAdjustment" id="repeat_speed_adjustment">
-    <property name="lower">10</property>
-    <property name="upper">110</property>
-    <property name="value">30</property>
-    <property name="step_increment">10</property>
-    <property name="page_increment">10</property>
-  </object>
   <object class="GtkSizeGroup" id="lower_sizegroup">
     <widgets>
       <widget name="delay_short_label"/>
@@ -836,6 +829,13 @@
     <property name="step_increment">10</property>
     <property name="page_increment">10</property>
   </object>
+  <object class="GtkAdjustment" id="repeat_speed_adjustment">
+    <property name="lower">0.5</property>
+    <property name="upper">50</property>
+    <property name="value">33.3</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">1</property>
+  </object>
   <object class="GtkSizeGroup" id="sliders_sizegroup">
     <widgets>
       <widget name="cursor_blink_time_scale"/>
diff --git a/panels/keyboard/keyboard-general.c b/panels/keyboard/keyboard-general.c
index 9dd5ea6..dd4c0a3 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",



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]