(1) e_config.c/e_comp_wl.c: add code for making repeat values configurable
authorSung-Jin Park <input.hacker@gmail.com>
Mon, 30 Nov 2015 19:05:10 +0000 (14:05 -0500)
committerMike Blumenkrantz <zmike@osg.samsung.com>
Mon, 30 Nov 2015 19:05:10 +0000 (14:05 -0500)
(2) e.src(s): add keyboard.repeat_delay, keyboard.repeat_rate into e.src files

Summary:
As of now, the default values of repeat delay/rate are being set in e_comp_wl.c.
Those values need to be configurable and will be used in e_comp_wl_init().
The limit of each of the values is defined from -1 to 1000. (maximum 1s).
If one of the two is negative, it means default repeat delay/rate are going to be used.
(e.g. delay:400, rate:25)

Test Plan:
N/A

Signed-off-by: Sung-Jin Park <input.hacker@gmail.com>
Reviewers: raster, stefan_schmidt, gwanglim, devilhorns, zmike

Subscribers: Jeon, ohduna, cedric

Differential Revision: https://phab.enlightenment.org/D3364

config/default/e.src
config/mobile/e.src
config/standard/e.src
config/tiling/e.src
src/bin/e_comp_wl.h
src/bin/e_comp_wl_input.c
src/bin/e_config.c
src/bin/e_config.h

index db89920ae0eeb3c0fb0efa65ccfec4f55edf4f07..b7cb8359b28fe4370483cc2caae8c57b26cdcb94 100644 (file)
@@ -215,6 +215,8 @@ group "E_Config" struct {
   value "update.later" uchar: 0;
   value "xkb.only_label" int: 0;
   value "xkb.default_model" string: "default";
+  value "keyboard.repeat_delay" int: 400;
+  value "keyboard.repeat_rate" int: 25;
   value "exe_always_single_instance" uchar: 0;
   value "use_desktop_window_profile" int: 0;
   value "powersave.none" double: 0.25;
index f4e6070196e64a84c510c38348a552a6f15a28a2..1431dde338c82f11c652583a70d3d5a79bce6a86 100644 (file)
@@ -865,6 +865,8 @@ group "E_Config" struct {
     }
     value "xkb.only_label" int: 0;
     value "xkb.default_model" string: "default";
+    value "keyboard.repeat_delay" int: 400;
+    value "keyboard.repeat_rate" int: 25;
     value "exe_always_single_instance" uchar: 1;
     value "use_desktop_window_profile" int: 0;
 }
index 585d3f09ac8d5c2ad142d3f1c5db957996bcc8f5..b41057cc6b910c5506673ce4113f3ff8f33b2a09 100644 (file)
@@ -1106,6 +1106,8 @@ group "E_Config" struct {
     }
     value "xkb.only_label" int: 0;
     value "xkb.default_model" string: "default";
+    value "keyboard.repeat_delay" int: 400;
+    value "keyboard.repeat_rate" int: 25;
     value "exe_always_single_instance" uchar: 0;
     value "use_desktop_window_profile" int: 0;
 }
index 8bde334ad36b611c4f6ed814482db7761a9793d4..afeac1fb342f89f53930960c490f10f025d44717 100644 (file)
@@ -1128,6 +1128,8 @@ group "E_Config" struct {
     }
     value "xkb.only_label" int: 0;
     value "xkb.default_model" string: "default";
+    value "keyboard.repeat_delay" int: 400;
+    value "keyboard.repeat_rate" int: 25;
     value "exe_always_single_instance" uchar: 0;
     value "use_desktop_window_profile" int: 0;
 }
index 7142f4d46c3160cc247f0e2d4888e3915597c25d..dc268dc0941a4c9ebbf79f83118edcaf45d14b3e 100644 (file)
@@ -155,6 +155,8 @@ struct _E_Comp_Wl_Data
         struct wl_array keys;
         struct wl_resource *focus;
         int mod_changed;
+        int repeat_delay;
+        int repeat_rate;
      } kbd;
 
    struct
index 27934481c0936f3bc5f094d76d7d8d05846ed12a..d27d72acd7920423e2f150352e52134d2917ec93 100644 (file)
@@ -181,9 +181,9 @@ _e_comp_wl_input_cb_keyboard_get(struct wl_client *client, struct wl_resource *r
                                   e_comp->wl_comp_data,
                                   _e_comp_wl_input_cb_keyboard_unbind);
 
-   /* FIXME: These values should be configurable */
+   /* send current repeat_info */
    if (wl_resource_get_version(res) >= WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION)
-     wl_keyboard_send_repeat_info(res, 25, 400);
+     wl_keyboard_send_repeat_info(res, e_comp_wl->kbd.repeat_rate, e_comp_wl->kbd.repeat_delay);
 
    /* send current keymap */
    wl_keyboard_send_keymap(res, WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
@@ -419,6 +419,15 @@ e_comp_wl_input_init(void)
 
    e_comp_wl->xkb.fd = -1;
 
+   /* get default keyboard repeat rate/delay from configuration */
+   e_comp_wl->kbd.repeat_delay = e_config->keyboard.repeat_delay;
+   e_comp_wl->kbd.repeat_rate = e_config->keyboard.repeat_rate;
+
+   /* check for valid repeat_delay and repeat_rate value */
+   /* if invalid, set the default value of repeat delay and rate value */
+   if (e_comp_wl->kbd.repeat_delay < 0) e_comp_wl->kbd.repeat_delay = 400;
+   if (e_comp_wl->kbd.repeat_rate < 0) e_comp_wl->kbd.repeat_rate = 25;
+
    /* create the global resource for input seat */
    e_comp_wl->seat.global =
      wl_global_create(e_comp_wl->wl.disp, &wl_seat_interface, 4,
index b8043b34da1b2f72bbc72bbff8dce95de1dae0ad..80501aaf9b13eaaa4935d202006161565551ffcb 100644 (file)
@@ -733,6 +733,9 @@ _e_config_edd_init(Eina_Bool old)
    E_CONFIG_VAL(D, T, xkb.dont_touch_my_damn_keyboard, UCHAR);
    E_CONFIG_VAL(D, T, xkb.default_model, STR);
 
+   E_CONFIG_VAL(D, T, keyboard.repeat_delay, INT);
+   E_CONFIG_VAL(D, T, keyboard.repeat_rate, INT);
+
    if (old)
      {
         E_CONFIG_SUB(D, T, xkb.current_layout, _e_config_xkb_option_edd);
@@ -1326,6 +1329,14 @@ e_config_load(void)
                   free(ecc);
                }
           }
+        CONFIG_VERSION_CHECK(19)
+          {
+             CONFIG_VERSION_UPDATE_INFO(19);
+
+             /* set (400, 25) as the default values of repeat delay, rate */
+             e_config->keyboard.repeat_delay = 400;
+             e_config->keyboard.repeat_rate = 25;
+          }
      }
    if (!e_config->remember_internal_fm_windows)
      e_config->remember_internal_fm_windows = !!(e_config->remember_internal_windows & E_REMEMBER_INTERNAL_FM_WINS);
@@ -1504,6 +1515,9 @@ e_config_load(void)
    E_CONFIG_LIMIT(e_config->backlight.dim, 0.05, 1.0);
    E_CONFIG_LIMIT(e_config->backlight.idle_dim, 0, 1);
 
+   E_CONFIG_LIMIT(e_config->keyboard.repeat_delay, -1, 1000); // 1 second
+   E_CONFIG_LIMIT(e_config->keyboard.repeat_rate, -1, 1000); // 1 second
+
    if (!e_config->icon_theme)
      e_config->icon_theme = eina_stringshare_add("hicolor");  // FDO default
 
index 7fe67c41c7eb17c1686806836f07bfe98f5ae706..2874ac7c275faf94c5432662cd273d4bfc2146d0 100644 (file)
@@ -47,7 +47,7 @@ typedef enum
 /* increment this whenever a new set of config values are added but the users
  * config doesn't need to be wiped - simply new values need to be put in
  */
-#define E_CONFIG_FILE_GENERATION 18
+#define E_CONFIG_FILE_GENERATION 19
 #define E_CONFIG_FILE_VERSION    ((E_CONFIG_FILE_EPOCH * 1000000) + E_CONFIG_FILE_GENERATION)
 
 #define E_CONFIG_BINDINGS_VERSION 0 // DO NOT INCREMENT UNLESS YOU WANT TO WIPE ALL BINDINGS!!!!!
@@ -428,7 +428,13 @@ struct _E_Config
       const char *selected_layout; // whatever teh current layout that the user has selected is
       const char *desklock_layout;
    } xkb;
-   
+
+   struct
+   {
+      int repeat_delay;//delay in milliseconds since key down until repeating starts
+      int repeat_rate;//the rate of repeating keys in characters per second
+   } keyboard;
+
    Eina_List  *menu_applications;
    unsigned char exe_always_single_instance; // GUI
    int           use_desktop_window_profile; // GUI