hermet pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=b3a46ec056b76c3239d271995c716b9af7d1f03f

commit b3a46ec056b76c3239d271995c716b9af7d1f03f
Author: Jaeun Choi <jaeun12.c...@samsung.com>
Date:   Tue Apr 15 14:46:39 2014 +0900

    player: apply key binding
    
    Summary: This patch applies key binding to elm_player.
    
    Test Plan: None
    
    Reviewers: Hermet, raster
    
    Reviewed By: Hermet
    
    Differential Revision: https://phab.enlightenment.org/D730
---
 config/default/base.src  | 35 ++++++++++++++++++++++++
 config/mobile/base.src   | 35 ++++++++++++++++++++++++
 config/standard/base.src | 35 ++++++++++++++++++++++++
 src/lib/elc_player.c     | 71 ++++++++++++++++++++++++++++++------------------
 4 files changed, 149 insertions(+), 27 deletions(-)

diff --git a/config/default/base.src b/config/default/base.src
index 10866d3..dad2675 100644
--- a/config/default/base.src
+++ b/config/default/base.src
@@ -881,6 +881,41 @@ group "Elm_Config" struct {
         }
      }
      group "Elm_Config_Bindings_Widget" struct {
+        value "name" string: "Elm_Player";
+        group "key_bindings" list {
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "Left";
+              value "action" string: "move";
+              value "params" string: "left";
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "KP_Left";
+              value "action" string: "move";
+              value "params" string: "left";
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "Right";
+              value "action" string: "move";
+              value "params" string: "right";
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "KP_Right";
+              value "action" string: "move";
+              value "params" string: "right";
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "space";
+              value "action" string: "play";
+              value "params" string: "";
+           }
+        }
+     }
+     group "Elm_Config_Bindings_Widget" struct {
         value "name" string: "Elm_Scroller";
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
diff --git a/config/mobile/base.src b/config/mobile/base.src
index 50bd082..76226d6 100644
--- a/config/mobile/base.src
+++ b/config/mobile/base.src
@@ -885,6 +885,41 @@ group "Elm_Config" struct {
         }
      }
      group "Elm_Config_Bindings_Widget" struct {
+        value "name" string: "Elm_Player";
+        group "key_bindings" list {
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "Left";
+              value "action" string: "move";
+              value "params" string: "left";
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "KP_Left";
+              value "action" string: "move";
+              value "params" string: "left";
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "Right";
+              value "action" string: "move";
+              value "params" string: "right";
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "KP_Right";
+              value "action" string: "move";
+              value "params" string: "right";
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "space";
+              value "action" string: "play";
+              value "params" string: "";
+           }
+        }
+     }
+     group "Elm_Config_Bindings_Widget" struct {
         value "name" string: "Elm_Scroller";
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
diff --git a/config/standard/base.src b/config/standard/base.src
index bd7a162..7c0a1a0 100644
--- a/config/standard/base.src
+++ b/config/standard/base.src
@@ -882,6 +882,41 @@ group "Elm_Config" struct {
         }
      }
      group "Elm_Config_Bindings_Widget" struct {
+        value "name" string: "Elm_Player";
+        group "key_bindings" list {
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "Left";
+              value "action" string: "move";
+              value "params" string: "left";
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "KP_Left";
+              value "action" string: "move";
+              value "params" string: "left";
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "Right";
+              value "action" string: "move";
+              value "params" string: "right";
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "KP_Right";
+              value "action" string: "move";
+              value "params" string: "right";
+           }
+           group "Elm_Config_Binding_Key" struct {
+              value "context" int: 0;
+              value "key" string: "space";
+              value "action" string: "play";
+              value "params" string: "";
+           }
+        }
+     }
+     group "Elm_Config_Bindings_Widget" struct {
         value "name" string: "Elm_Scroller";
         group "key_bindings" list {
            group "Elm_Config_Binding_Key" struct {
diff --git a/src/lib/elc_player.c b/src/lib/elc_player.c
index 0bf2b79..36fe2d3 100644
--- a/src/lib/elc_player.c
+++ b/src/lib/elc_player.c
@@ -54,19 +54,22 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = 
{
    { NULL, NULL }
 };
 
-EOLIAN static Eina_Bool
-_elm_player_elm_widget_event(Eo *obj, Elm_Player_Data *sd, Evas_Object *src, 
Evas_Callback_Type type, void *event_info)
-{
-   Evas_Event_Key_Down *ev = event_info;
-   (void) src;
+static Eina_Bool _key_action_move(Evas_Object *obj, const char *params);
+static Eina_Bool _key_action_play(Evas_Object *obj, const char *params);
 
-   if (elm_widget_disabled_get(obj)) return EINA_FALSE;
-   if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
-   if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
-   if (!sd->video) return EINA_FALSE;
+static const Elm_Action key_actions[] = {
+   {"move", _key_action_move},
+   {"play", _key_action_play},
+   {NULL, NULL}
+};
 
-   if ((!strcmp(ev->key, "Left")) ||
-       ((!strcmp(ev->key, "KP_Left")) && (!ev->string)))
+static Eina_Bool
+_key_action_move(Evas_Object *obj, const char *params)
+{
+   ELM_PLAYER_DATA_GET(obj, sd);
+   const char *dir = params;
+
+   if (!strcmp(dir, "left"))
      {
         double current, last;
 
@@ -78,11 +81,8 @@ _elm_player_elm_widget_event(Eo *obj, Elm_Player_Data *sd, 
Evas_Object *src, Eva
              current -= last / 100;
              elm_video_play_position_set(sd->video, current);
           }
-
-        goto success;
      }
-   else if ((!strcmp(ev->key, "Right")) ||
-            ((!strcmp(ev->key, "KP_Right")) && (!ev->string)))
+   else if (!strcmp(dir, "right"))
      {
         double current, last;
 
@@ -95,22 +95,39 @@ _elm_player_elm_widget_event(Eo *obj, Elm_Player_Data *sd, 
Evas_Object *src, Eva
              if (current < 0) current = 0;
              elm_video_play_position_set(sd->video, current);
           }
-
-        goto success;
      }
-   else if (!strcmp(ev->key, "space"))
-     {
-        if (elm_video_is_playing_get(sd->video))
-          elm_video_pause(sd->video);
-        else
-          elm_video_play(sd->video);
+   else return EINA_FALSE;
 
-        goto success;
-     }
+   return EINA_TRUE;
+}
+
+static Eina_Bool
+_key_action_play(Evas_Object *obj, const char *params EINA_UNUSED)
+{
+   ELM_PLAYER_DATA_GET(obj, sd);
+
+   if (elm_video_is_playing_get(sd->video))
+     elm_video_pause(sd->video);
+   else
+     elm_video_play(sd->video);
+
+   return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_elm_player_elm_widget_event(Eo *obj, Elm_Player_Data *sd, Evas_Object *src, 
Evas_Callback_Type type, void *event_info)
+{
+   Evas_Event_Key_Down *ev = event_info;
+   (void) src;
+
+   if (elm_widget_disabled_get(obj)) return EINA_FALSE;
+   if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
+   if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
+   if (!sd->video) return EINA_FALSE;
 
-   return EINA_FALSE;
+   if (!_elm_config_key_binding_call(obj, ev, key_actions))
+     return EINA_FALSE;
 
-success:
    ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
    return EINA_TRUE;
 }

-- 


Reply via email to