gengrid: select the focused item on enter key input
authorJaeun Choi <jaeun12.choi@samsung.com>
Thu, 12 Feb 2015 10:15:57 +0000 (19:15 +0900)
committerJaeun Choi <jaeun12.choi@samsung.com>
Thu, 12 Feb 2015 10:15:57 +0000 (19:15 +0900)
there was no way to select an item with key input on ELM_ITEM_SELECT_ON_FOCUS_DISABLE mode.
this patch enables select and multi select with enter/space key input.

@fix

config/default/base.src.in
config/mobile/base.src.in
config/standard/base.src.in
src/lib/elm_gengrid.c

index 78b3873..9208ed3 100644 (file)
@@ -1046,18 +1046,72 @@ group "Elm_Config" struct {
               value "key" string: "Return";
               value "action" string: "select";
               value "params" string: "";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 0;
+                 }
+              }
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
               value "key" string: "KP_Enter";
               value "action" string: "select";
               value "params" string: "";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 0;
+                 }
+              }
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
               value "key" string: "space";
               value "action" string: "select";
               value "params" string: "";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 0;
+                 }
+              }
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "Return";
+              value "action" string: "select";
+              value "params" string: "multi";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 1;
+                 }
+              }
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "KP_Enter";
+              value "action" string: "select";
+              value "params" string: "multi";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 1;
+                 }
+              }
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "space";
+              value "action" string: "select";
+              value "params" string: "multi";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 1;
+                 }
+              }
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
index 127c8a9..fa15499 100644 (file)
@@ -1050,18 +1050,72 @@ group "Elm_Config" struct {
               value "key" string: "Return";
               value "action" string: "select";
               value "params" string: "";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 0;
+                 }
+              }
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
               value "key" string: "KP_Enter";
               value "action" string: "select";
               value "params" string: "";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 0;
+                 }
+              }
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
               value "key" string: "space";
               value "action" string: "select";
               value "params" string: "";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 0;
+                 }
+              }
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "Return";
+              value "action" string: "select";
+              value "params" string: "multi";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 1;
+                 }
+              }
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "KP_Enter";
+              value "action" string: "multi_select";
+              value "params" string: "";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 1;
+                 }
+              }
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "space";
+              value "action" string: "multi_select";
+              value "params" string: "";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 1;
+                 }
+              }
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
index b7f9a4b..c4b05d9 100644 (file)
@@ -1047,18 +1047,72 @@ group "Elm_Config" struct {
               value "key" string: "Return";
               value "action" string: "select";
               value "params" string: "";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 0;
+                 }
+              }
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
               value "key" string: "KP_Enter";
               value "action" string: "select";
               value "params" string: "";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 0;
+                 }
+              }
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
               value "key" string: "space";
               value "action" string: "select";
               value "params" string: "";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 0;
+                 }
+              }
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "Return";
+              value "action" string: "select";
+              value "params" string: "multi";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 1;
+                 }
+              }
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "KP_Enter";
+              value "action" string: "select";
+              value "params" string: "multi";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 1;
+                 }
+              }
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "space";
+              value "action" string: "select";
+              value "params" string: "multi";
+              group "modifiers" list {
+                 group "Elm_Config_Binding_Modifier" struct {
+                    value "mod" string: "Control";
+                    value "flag" uchar: 1;
+                 }
+              }
            }
            group "Elm_Config_Binding_Key" struct {
               value "context" int: 0;
index 3396211..60e7fa5 100644 (file)
@@ -2961,19 +2961,53 @@ _key_action_move(Evas_Object *obj, const char *params)
 }
 
 static Eina_Bool
-_key_action_select(Evas_Object *obj, const char *params EINA_UNUSED)
+_key_action_select(Evas_Object *obj, const char *params)
 {
    ELM_GENGRID_DATA_GET(obj, sd);
-   Elm_Object_Item *eo_it = NULL;
+   Elm_Object_Item *eo_it = elm_object_focused_item_get(obj);
+   ELM_GENGRID_ITEM_DATA_GET(eo_it, it);
 
-   if (!sd->multi)
+   if (sd->multi &&
+       ((sd->multi_select_mode != ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL) ||
+        (!strcmp(params, "multi"))))
      {
-        eo_it = elm_object_focused_item_get(obj);
-        ELM_GENGRID_ITEM_DATA_GET(eo_it, it);
-        evas_object_smart_callback_call(WIDGET(it), SIG_ACTIVATED, eo_it);
-        return EINA_TRUE;
+        if (!it->selected)
+          {
+             it->highlight_cb(it);
+             it->sel_cb(it);
+          }
+        else it->unsel_cb(it);
      }
-   return EINA_FALSE;
+   else
+     {
+        if (!it->selected)
+          {
+             while (sd->selected)
+               {
+                  Elm_Object_Item *eo_sel = sd->selected->data;
+                  Elm_Gen_Item *sel = eo_data_scope_get(eo_sel, ELM_GENGRID_ITEM_CLASS);
+                  it->unsel_cb(sel);
+               }
+          }
+        else
+          {
+             const Eina_List *l, *l_next;
+             Elm_Object_Item *eo_item2;
+
+             EINA_LIST_FOREACH_SAFE(sd->selected, l, l_next, eo_item2)
+               {
+                  ELM_GENGRID_ITEM_DATA_GET(eo_item2, item2);
+                  if (item2 != it) it->unsel_cb(item2);
+               }
+          }
+        it->highlight_cb(it);
+        it->sel_cb(it);
+     }
+
+   if (!sd->multi)
+     evas_object_smart_callback_call(WIDGET(it), SIG_ACTIVATED, eo_it);
+
+   return EINA_TRUE;
 }
 
 static Eina_Bool
@@ -4941,6 +4975,7 @@ _elm_gengrid_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUS
           { "move,first", "move", "first", _key_action_move},
           { "move,last", "move", "last", _key_action_move},
           { "select", "select", NULL, _key_action_select},
+          { "select,multi", "select", "multi", _key_action_select},
           { "escape", "escape", NULL, _key_action_escape},
           { NULL, NULL, NULL, NULL }
    };