key binding infra change for modifiers
authorJaeun Choi <jaeun12.choi@samsung.com>
Mon, 14 Apr 2014 10:47:52 +0000 (19:47 +0900)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Mon, 14 Apr 2014 10:47:52 +0000 (19:47 +0900)
Summary: This patch makes key binding support multiple and inverse modifier set.

Test Plan: None

Reviewers: raster, Hermet

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

config/default/base.src
config/mobile/base.src
config/standard/base.src
src/lib/elm_config.c
src/lib/elm_priv.h

index 16d4f47..e438d1f 100644 (file)
@@ -253,27 +253,21 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Return";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Enter";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "space";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -282,99 +276,75 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Prior";
               value "action" string: "move";
               value "params" string: "prior";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Prior";
               value "action" string: "move";
               value "params" string: "prior";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Next";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Next";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -383,27 +353,21 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Return";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Enter";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "space";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -412,67 +376,51 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -481,99 +429,75 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Left";
               value "action" string: "move";
               value "params" string: "prev";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Left";
               value "action" string: "move";
               value "params" string: "prev";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Up";
               value "action" string: "move";
               value "params" string: "prev";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Up";
               value "action" string: "move";
               value "params" string: "prev";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Right";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Right";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Down";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Down";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Home";
               value "action" string: "move";
               value "params" string: "first";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Home";
               value "action" string: "move";
               value "params" string: "first";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "End";
               value "action" string: "move";
               value "params" string: "last";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_End";
               value "action" string: "move";
               value "params" string: "last";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -582,27 +506,21 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Return";
               value "action" string: "toggle";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Enter";
               value "action" string: "toggle";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "space";
               value "action" string: "toggle";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -611,11 +529,9 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "BackSpace";
               value "action" string: "top_item_get";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -624,131 +540,99 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Home";
               value "action" string: "move";
               value "params" string: "first";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Home";
               value "action" string: "move";
               value "params" string: "first";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "End";
               value "action" string: "move";
               value "params" string: "last";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_End";
               value "action" string: "move";
               value "params" string: "last";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Prior";
               value "action" string: "move";
               value "params" string: "prior";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Prior";
               value "action" string: "move";
               value "params" string: "prior";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Next";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Next";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
         }
      }
index 33f23f5..7453440 100644 (file)
@@ -257,27 +257,21 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Return";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Enter";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "space";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -286,99 +280,75 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Prior";
               value "action" string: "move";
               value "params" string: "prior";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Prior";
               value "action" string: "move";
               value "params" string: "prior";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Next";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Next";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -387,27 +357,21 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Return";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Enter";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "space";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -416,67 +380,51 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -485,99 +433,75 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Left";
               value "action" string: "move";
               value "params" string: "prev";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Left";
               value "action" string: "move";
               value "params" string: "prev";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Up";
               value "action" string: "move";
               value "params" string: "prev";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Up";
               value "action" string: "move";
               value "params" string: "prev";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Right";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Right";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Down";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Down";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Home";
               value "action" string: "move";
               value "params" string: "first";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Home";
               value "action" string: "move";
               value "params" string: "first";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "End";
               value "action" string: "move";
               value "params" string: "last";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_End";
               value "action" string: "move";
               value "params" string: "last";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -586,27 +510,21 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Return";
               value "action" string: "toggle";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Enter";
               value "action" string: "toggle";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "space";
               value "action" string: "toggle";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -615,11 +533,9 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "BackSpace";
               value "action" string: "top_item_get";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -628,131 +544,99 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Home";
               value "action" string: "move";
               value "params" string: "first";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Home";
               value "action" string: "move";
               value "params" string: "first";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "End";
               value "action" string: "move";
               value "params" string: "last";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_End";
               value "action" string: "move";
               value "params" string: "last";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Prior";
               value "action" string: "move";
               value "params" string: "prior";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Prior";
               value "action" string: "move";
               value "params" string: "prior";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Next";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Next";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
         }
      }
index ebfd57d..e55e5d5 100644 (file)
@@ -254,27 +254,21 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Return";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Enter";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "space";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -283,99 +277,75 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Prior";
               value "action" string: "move";
               value "params" string: "prior";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Prior";
               value "action" string: "move";
               value "params" string: "prior";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Next";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Next";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -384,27 +354,21 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Return";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Enter";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "space";
               value "action" string: "activate";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -413,67 +377,51 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -482,99 +430,75 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Left";
               value "action" string: "move";
               value "params" string: "prev";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Left";
               value "action" string: "move";
               value "params" string: "prev";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Up";
               value "action" string: "move";
               value "params" string: "prev";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Up";
               value "action" string: "move";
               value "params" string: "prev";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Right";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Right";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Down";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Down";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Home";
               value "action" string: "move";
               value "params" string: "first";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Home";
               value "action" string: "move";
               value "params" string: "first";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "End";
               value "action" string: "move";
               value "params" string: "last";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_End";
               value "action" string: "move";
               value "params" string: "last";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -583,27 +507,21 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Return";
               value "action" string: "toggle";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Enter";
               value "action" string: "toggle";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "space";
               value "action" string: "toggle";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -612,11 +530,9 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "BackSpace";
               value "action" string: "top_item_get";
               value "params" string: "";
-              value "any_mod" uchar: 1;
            }
         }
      }
@@ -625,131 +541,99 @@ group "Elm_Config" struct {
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Left";
               value "action" string: "move";
               value "params" string: "left";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Right";
               value "action" string: "move";
               value "params" string: "right";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Up";
               value "action" string: "move";
               value "params" string: "up";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Down";
               value "action" string: "move";
               value "params" string: "down";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Home";
               value "action" string: "move";
               value "params" string: "first";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Home";
               value "action" string: "move";
               value "params" string: "first";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "End";
               value "action" string: "move";
               value "params" string: "last";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_End";
               value "action" string: "move";
               value "params" string: "last";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Prior";
               value "action" string: "move";
               value "params" string: "prior";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Prior";
               value "action" string: "move";
               value "params" string: "prior";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "Next";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
-              value "modifiers" string: "None";
               value "key" string: "KP_Next";
               value "action" string: "move";
               value "params" string: "next";
-              value "any_mod" uchar: 1;
            }
         }
      }
index eebe9ce..82a08f0 100644 (file)
@@ -21,6 +21,7 @@ static Eet_Data_Descriptor *_config_color_palette_edd = NULL;
 static Eet_Data_Descriptor *_config_color_overlay_edd = NULL;
 static Eet_Data_Descriptor *_config_bindings_widget_edd = NULL;
 static Eet_Data_Descriptor *_config_binding_key_edd = NULL;
+static Eet_Data_Descriptor *_config_binding_modifier_edd = NULL;
 const char *_elm_preferred_engine = NULL;
 const char *_elm_accel_preference = NULL;
 Eina_List  *_font_overlays_del = NULL;
@@ -365,6 +366,7 @@ _desc_init(void)
         return;
      }
 
+   memset(&eddc, 0, sizeof(eddc)); /* just in case... */
    EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Elm_Config_Bindings_Widget);
    eddc.func.str_direct_alloc = NULL;
    eddc.func.str_direct_free = NULL;
@@ -390,6 +392,19 @@ _desc_init(void)
         return;
      }
 
+   memset(&eddc, 0, sizeof(eddc)); /* just in case... */
+   EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Elm_Config_Binding_Modifier);
+   eddc.func.str_direct_alloc = NULL;
+   eddc.func.str_direct_free = NULL;
+
+   _config_binding_modifier_edd = eet_data_descriptor_stream_new(&eddc);
+   if (!_config_binding_modifier_edd)
+     {
+        ERR("EEEK! eet_data_descriptor_stream_new() failed.");
+        eet_data_descriptor_free(_config_edd);
+        return;
+     }
+
 #define T_INT    EET_T_INT
 #define T_DOUBLE EET_T_DOUBLE
 #define T_STRING EET_T_STRING
@@ -447,11 +462,17 @@ _desc_init(void)
 #define T        Elm_Config_Binding_Key
 #define D        _config_binding_key_edd
    ELM_CONFIG_VAL(D, T, context, EET_T_INT);
-   ELM_CONFIG_VAL(D, T, modifiers, EET_T_STRING);
    ELM_CONFIG_VAL(D, T, key, EET_T_STRING);
    ELM_CONFIG_VAL(D, T, action, EET_T_STRING);
    ELM_CONFIG_VAL(D, T, params, EET_T_STRING);
-   ELM_CONFIG_VAL(D, T, any_mod, EET_T_UCHAR);
+   ELM_CONFIG_LIST(D, T, modifiers, _config_binding_modifier_edd);
+#undef T
+#undef D
+
+#define T        Elm_Config_Binding_Modifier
+#define D        _config_binding_modifier_edd
+   ELM_CONFIG_VAL(D, T, mod, EET_T_STRING);
+   ELM_CONFIG_VAL(D, T, flag, EET_T_UCHAR);
 #undef T
 #undef D
 
@@ -615,6 +636,12 @@ _desc_shutdown(void)
         eet_data_descriptor_free(_config_binding_key_edd);
         _config_binding_key_edd = NULL;
      }
+
+   if (_config_binding_modifier_edd)
+     {
+        eet_data_descriptor_free(_config_binding_modifier_edd);
+        _config_binding_modifier_edd = NULL;
+     }
 }
 
 static int
@@ -1258,6 +1285,7 @@ _config_free(Elm_Config *cfg)
    char *color_class;
    Elm_Config_Bindings_Widget *wb;
    Elm_Config_Binding_Key *kb;
+   Elm_Config_Binding_Modifier *mb;
 
    if (!cfg) return;
    EINA_LIST_FREE(cfg->font_dirs, fontdir)
@@ -1289,10 +1317,11 @@ _config_free(Elm_Config *cfg)
         eina_stringshare_del(wb->name);
         EINA_LIST_FREE(wb->key_bindings, kb)
           {
-             eina_stringshare_del(kb->modifiers);
              eina_stringshare_del(kb->key);
              eina_stringshare_del(kb->action);
              eina_stringshare_del(kb->params);
+             EINA_LIST_FREE(kb->modifiers, mb)
+                eina_stringshare_del(mb->mod);
              free(kb);
           }
         free(wb);
@@ -1805,12 +1834,27 @@ _config_update(void)
                          kb2 = calloc(1, sizeof(Elm_Config_Binding_Key));
                          if (kb2)
                            {
+                              Elm_Config_Binding_Modifier *mb;
+                              Eina_List *l3;
+
 #define DUPSHARE(x) if (kb->x) kb2->x = eina_stringshare_add(kb->x)
-                              DUPSHARE(modifiers);
                               DUPSHARE(key);
                               DUPSHARE(action);
                               DUPSHARE(params);
 #undef DUPSHARE
+                              EINA_LIST_FOREACH(kb2->modifiers, l3, mb)
+                                {
+                                   Elm_Config_Binding_Modifier *mb2;
+
+                                   mb2 = calloc(1, sizeof(Elm_Config_Bindings_Widget));
+                                   if (mb2)
+                                     {
+#define DUPSHARE(x) if (mb->x) mb2->x = eina_stringshare_add(mb->x)
+                                        DUPSHARE(mod);
+#undef DUPSHARE
+                                        kb->modifiers = eina_list_append(kb->modifiers, mb2);
+                                     }
+                                }
                               wb->key_bindings = eina_list_append(wb->key_bindings, kb2);
                            }
                       }
@@ -2151,6 +2195,20 @@ _elm_config_key_binding_hash(void)
 }
 
 Eina_Bool
+_elm_config_modifier_check(const Evas_Modifier *m,
+                           Eina_List *mod_list)
+{
+   Eina_List *l;
+   Elm_Config_Binding_Modifier *mod;
+   EINA_LIST_FOREACH(mod_list, l, mod)
+     {
+        if ((evas_key_modifier_is_set(m, mod->mod)) ^ (mod->flag))
+          return EINA_FALSE;
+     }
+   return EINA_TRUE;
+}
+
+Eina_Bool
 _elm_config_key_binding_call(Evas_Object *obj,
                              const Evas_Event_Key_Down *ev,
                              const Elm_Action *actions)
@@ -2166,9 +2224,7 @@ _elm_config_key_binding_call(Evas_Object *obj,
         EINA_LIST_FOREACH(binding_list, l, binding)
           {
              if (binding->key && (!strcmp(binding->key, ev->key))
-                 && ((evas_key_modifier_is_set
-                      (ev->modifiers, binding->modifiers)
-                      || (binding->any_mod))))
+                 && _elm_config_modifier_check(ev->modifiers, binding->modifiers))
                {
                   while (actions[i].name)
                     {
index 0735488..a42ed18 100644 (file)
@@ -81,6 +81,7 @@ typedef struct _Edje_Signal_Data         Edje_Signal_Data;
 typedef struct _Elm_Config               Elm_Config;
 typedef struct _Elm_Config_Bindings_Widget   Elm_Config_Bindings_Widget;
 typedef struct _Elm_Config_Binding_Key   Elm_Config_Binding_Key;
+typedef struct _Elm_Config_Binding_Modifier  Elm_Config_Binding_Modifier;
 typedef struct _Elm_Module               Elm_Module;
 typedef struct _Elm_Datetime_Module_Data Elm_Datetime_Module_Data;
 
@@ -301,11 +302,16 @@ struct _Elm_Config_Bindings_Widget
 struct _Elm_Config_Binding_Key
 {
    int           context;
-   const char   *modifiers;
    const char   *key;
    const char   *action;
    const char   *params;
-   unsigned char any_mod;
+   Eina_List    *modifiers;
+};
+
+struct _Elm_Config_Binding_Modifier
+{
+   const char   *mod;
+   unsigned char flag;
 };
 
 struct _Elm_Module