[gnome-control-center] universal-access: add Repeat Keys to the Typing section



commit 0b53a560db3aae0eeb1ca30e4f5ab6b9e87503f5
Author: Felipe Borges <feborges redhat com>
Date:   Fri Oct 30 10:19:23 2015 +0100

    universal-access: add Repeat Keys to the Typing section
    
    According to the new Keyboard panel design, this setting belongs
    to the Universal Access panel.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=757464

 panels/universal-access/cc-ua-panel.c |   44 +++++
 panels/universal-access/uap.ui        |  289 +++++++++++++++++++++++++++++++++
 2 files changed, 333 insertions(+), 0 deletions(-)
---
diff --git a/panels/universal-access/cc-ua-panel.c b/panels/universal-access/cc-ua-panel.c
index bf0041e..278a334 100644
--- a/panels/universal-access/cc-ua-panel.c
+++ b/panels/universal-access/cc-ua-panel.c
@@ -78,6 +78,10 @@
 #define KEY_MOUSEKEYS_ENABLED        "mousekeys-enable"
 #define KEY_TOGGLEKEYS_ENABLED       "togglekeys-enable"
 
+/* keyboard desktop settings */
+#define KEYBOARD_DESKTOP_SETTINGS    "org.gnome.desktop.peripherals.keyboard"
+#define KEY_REPEAT_KEYS              "repeat"
+
 /* mouse settings */
 #define MOUSE_SETTINGS               "org.gnome.desktop.a11y.mouse"
 #define KEY_SECONDARY_CLICK_ENABLED  "secondary-click-enabled"
@@ -103,6 +107,7 @@ struct _CcUaPanelPrivate
   GSettings *interface_settings;
   GSettings *kb_settings;
   GSettings *mouse_settings;
+  GSettings *kb_desktop_settings;
   GSettings *application_settings;
   GSettings *gsd_mouse_settings;
 
@@ -566,6 +571,19 @@ cc_ua_panel_init_hearing (CcUaPanel *self)
 
 /* typing/keyboard section */
 static void
+on_repeat_keys_toggled (GSettings *settings, const gchar *key, CcUaPanel *self)
+{
+  gboolean on;
+
+  on = g_settings_get_boolean (settings, KEY_REPEAT_KEYS);
+
+  gtk_label_set_text (GTK_LABEL (WID ("value_repeat_keys")), on ? _("On") : _("Off"));
+
+  gtk_widget_set_sensitive (WID ("repeat-keys-delay-grid"), on);
+  gtk_widget_set_sensitive (WID ("repeat-keys-speed-grid"), on);
+}
+
+static void
 update_accessx_label (GSettings *settings, const gchar *key, CcUaPanel *self)
 {
   gboolean on;
@@ -600,6 +618,31 @@ cc_ua_panel_init_keyboard (CcUaPanel *self)
                    sw, "active",
                    G_SETTINGS_BIND_DEFAULT);
 
+  /* Repeat keys */
+  g_signal_connect (priv->kb_desktop_settings, "changed",
+                   G_CALLBACK (on_repeat_keys_toggled), self);
+
+  dialog = WID ("repeat_keys_dialog");
+  priv->toplevels = g_slist_prepend (priv->toplevels, dialog);
+
+  g_object_set_data (G_OBJECT (WID ("row_repeat_keys")), "dialog", dialog);
+
+  g_signal_connect (dialog, "delete-event",
+                    G_CALLBACK (gtk_widget_hide_on_delete), NULL);
+
+  sw = WID ("repeat_keys_switch");
+  g_settings_bind (priv->kb_desktop_settings, KEY_REPEAT_KEYS,
+                   sw, "active",
+                   G_SETTINGS_BIND_DEFAULT);
+  on_repeat_keys_toggled (priv->kb_desktop_settings, NULL, self);
+
+  g_settings_bind (priv->kb_desktop_settings, "delay",
+                   gtk_range_get_adjustment (GTK_RANGE (WID ("repeat_keys_delay_scale"))), "value",
+                   G_SETTINGS_BIND_DEFAULT);
+  g_settings_bind (priv->kb_desktop_settings, "repeat-interval",
+                   gtk_range_get_adjustment (GTK_RANGE (WID ("repeat_keys_speed_scale"))), "value",
+                   G_SETTINGS_BIND_DEFAULT);
+
   /* accessx */
   g_signal_connect (priv->kb_settings, "changed",
                     G_CALLBACK (update_accessx_label), self);
@@ -807,6 +850,7 @@ cc_ua_panel_init (CcUaPanel *self)
   priv->a11y_settings = g_settings_new (A11Y_SETTINGS);
   priv->wm_settings = g_settings_new (WM_SETTINGS);
   priv->kb_settings = g_settings_new (KEYBOARD_SETTINGS);
+  priv->kb_desktop_settings = g_settings_new (KEYBOARD_DESKTOP_SETTINGS);
   priv->mouse_settings = g_settings_new (MOUSE_SETTINGS);
   priv->gsd_mouse_settings = g_settings_new (GSD_MOUSE_SETTINGS);
   priv->application_settings = g_settings_new (APPLICATION_SETTINGS);
diff --git a/panels/universal-access/uap.ui b/panels/universal-access/uap.ui
index dc1da63..c49eab9 100644
--- a/panels/universal-access/uap.ui
+++ b/panels/universal-access/uap.ui
@@ -7,6 +7,20 @@
     <property name="step_increment">100</property>
     <property name="page_increment">100</property>
   </object>
+  <object class="GtkAdjustment" id="repeat_delay_adjustment">
+    <property name="lower">100</property>
+    <property name="upper">2000</property>
+    <property name="value">500</property>
+    <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">110</property>
+    <property name="value">33.3</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">1</property>
+  </object>
   <!-- interface-requires gtk+ 3.0 -->
       <object class="GtkScrolledWindow" id="universal_access_panel">
         <property name="visible">True</property>
@@ -553,6 +567,52 @@
                               </object>
                             </child>
                             <child>
+                              <object class="GtkListBoxRow" id="row_repeat_keys">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <child>
+                                  <object class="GtkBox" id="box_repeat_keys">
+                                    <property name="visible">True</property>
+                                    <child>
+                                      <object class="GtkLabel" id="heading_repeat_keys">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="margin_start">20</property>
+                                        <property name="margin_end">20</property>
+                                        <property name="margin_top">6</property>
+                                        <property name="margin_bottom">6</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">_Repeat Keys</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">True</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="value_repeat_keys">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="margin_start">20</property>
+                                        <property name="margin_end">20</property>
+                                        <property name="margin_top">6</property>
+                                        <property name="margin_bottom">6</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes">Off</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child>
                               <object class="GtkListBoxRow" id="row_accessx">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
@@ -1162,6 +1222,235 @@
     <property name="step_increment">10</property>
     <property name="page_increment">10</property>
   </object>
+  <object class="GtkDialog" id="repeat_keys_dialog">
+    <property name="can_focus">False</property>
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Repeat Keys</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <property name="type_hint">dialog</property>
+    <property name="use_header_bar">1</property>
+    <child internal-child="headerbar">
+      <object class="GtkHeaderBar" id="repeat_keys_headerbar">
+        <property name="visible">True</property>
+        <child>
+          <object class="GtkSwitch" id="repeat_keys_switch">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+          </object>
+          <packing>
+            <property name="pack_type">end</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="repeat-keys-vbox5">
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkLabel" id="repeat-keys-description">
+            <property name="visible">True</property>
+            <property name="use_underline">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">Key presses repeat when key is held down.</property>
+            <property name="margin_start">12</property>
+            <property name="margin_end">6</property>
+            <property name="margin_top">6</property>
+            <property name="margin_bottom">12</property>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkGrid" id="repeat-keys-delay-grid">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="valign">start</property>
+            <property name="margin_start">12</property>
+            <property name="margin_end">6</property>
+            <property name="margin_top">6</property>
+            <property name="margin_bottom">12</property>
+            <property name="orientation">vertical</property>
+            <property name="row_spacing">18</property>
+            <property name="column_spacing">24</property>
+            <child>
+              <object class="GtkBox" id="repeat-keys-box6">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="valign">start</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">6</property>
+                <child>
+                  <object class="GtkBox" id="repeat-keys-box7">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkLabel" id="repeat-keys-delay-label">
+                        <property name="visible">True</property>
+                        <property name="use_underline">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Delay</property>
+                        <property name="mnemonic_widget">repeat_keys_delay_scale</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkHScale" id="repeat_keys_delay_scale">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="hexpand">True</property>
+                <property name="adjustment">repeat_delay_adjustment</property>
+                <property name="draw_value">False</property>
+                <property name="width-request">400</property>
+                <child internal-child="accessible">
+                  <object class="AtkObject" id="repeat_delay_scale-atkobject">
+                    <property name="AtkObject::accessible-description" translatable="yes">Repeat keys 
delay</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkGrid" id="repeat-keys-speed-grid">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="valign">start</property>
+            <property name="margin_start">12</property>
+            <property name="margin_end">6</property>
+            <property name="margin_top">6</property>
+            <property name="margin_bottom">12</property>
+            <property name="orientation">vertical</property>
+            <property name="row_spacing">18</property>
+            <property name="column_spacing">24</property>
+            <child>
+              <object class="GtkBox" id="repeat-keys-speed-box7">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="valign">start</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">6</property>
+                <child>
+                  <object class="GtkBox" id="repeat-keys-speed-box8">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkLabel" id="repeat-keys-speed-label">
+                        <property name="visible">True</property>
+                        <property name="use_underline">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Speed</property>
+                        <property name="mnemonic_widget">repeat_keys_speed_scale</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkHScale" id="repeat_keys_speed_scale">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="hexpand">True</property>
+                <property name="adjustment">repeat_speed_adjustment</property>
+                <property name="draw_value">False</property>
+                <property name="width-request">200</property>
+                <child internal-child="accessible">
+                  <object class="AtkObject" id="repeat_speed_scale-atkobject">
+                    <property name="AtkObject::accessible-description" translatable="yes">Repeat keys 
speed</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkSizeGroup" id="repeat-keys-dialog-labels-sizegroup">
+    <widgets>
+      <widget name="repeat-keys-delay-label"/>
+      <widget name="repeat-keys-speed-label"/>
+    </widgets>
+  </object>
+  <object class="GtkSizeGroup" id="repeat-keys-dialog-scales-sizegroup">
+    <widgets>
+      <widget name="repeat_keys_delay_scale"/>
+      <widget name="repeat_keys_speed_scale"/>
+    </widgets>
+  </object>
   <object class="GtkDialog" id="typing_dialog">
     <property name="can_focus">False</property>
     <property name="border_width">5</property>


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