Add keygrab handler 39/45439/1
authorjinwoo.shin <jw0227.shin@samsung.com>
Thu, 6 Aug 2015 05:11:03 +0000 (14:11 +0900)
committerjinwoo.shin <jw0227.shin@samsung.com>
Thu, 6 Aug 2015 05:11:03 +0000 (14:11 +0900)
Change-Id: Icf5182f14a497375957a43847e19b1f0b4723640
Signed-off-by: jinwoo.shin <jw0227.shin@samsung.com>
src/main.c

index 179ff35..08323ab 100644 (file)
@@ -36,6 +36,7 @@ struct _appdata {
        Evas_Object *base;
        Evas_Object *progress;
 
+       Ecore_Event_Handler *key_down;
        Ecore_Timer *hide_timer;
        Eina_Bool visibility;
 };
@@ -54,6 +55,7 @@ Evas_Object *_add_win(const char *name)
 
        elm_win_role_set(win, VOLUME_WIN_ROLE);
        elm_win_alpha_set(win, EINA_TRUE);
+       elm_win_prop_focus_skip_set(win, EINA_TRUE);
        evas_object_resize(win, VOLUME_WIN_WIDTH, VOLUME_WIN_HEIGHT);
        evas_object_show(win);
 
@@ -185,7 +187,7 @@ Eina_Bool _hide_timer(void *data)
        return ECORE_CALLBACK_CANCEL;
 }
 
-static void _key_pressed(void *data, Evas *e, Evas_Object *obj, void *ei)
+static Eina_Bool _key_down(void *data, int type, void *ei)
 {
        struct _appdata *ad;
        Evas_Event_Key_Down *ev;
@@ -193,7 +195,7 @@ static void _key_pressed(void *data, Evas *e, Evas_Object *obj, void *ei)
 
        if (!data || !ei) {
                _ERR("failed to get data and ei");
-               return;
+               return ECORE_CALLBACK_PASS_ON;
        }
 
        ad = data;
@@ -234,6 +236,35 @@ static void _key_pressed(void *data, Evas *e, Evas_Object *obj, void *ei)
 
                _update_volume_info(ad);
        }
+
+       return ECORE_CALLBACK_PASS_ON;
+}
+
+Eina_Bool _register_keygrab(void *data)
+{
+       struct _appdata *ad;
+
+       if (!data) {
+               _ERR("failed to get data");
+               return false;
+       }
+
+       ad = data;
+
+       elm_win_keygrab_set(ad->win, KEY_VOLUMEUP,
+                       0, 0, 0, ELM_WIN_KEYGRAB_SHARED);
+       elm_win_keygrab_set(ad->win, KEY_VOLUMEUP_REMOTE,
+                       0, 0, 0, ELM_WIN_KEYGRAB_SHARED);
+       elm_win_keygrab_set(ad->win, KEY_VOLUMEDOWN,
+                       0, 0, 0, ELM_WIN_KEYGRAB_SHARED);
+       elm_win_keygrab_set(ad->win, KEY_VOLUMEDOWN_REMOTE,
+                       0, 0, 0, ELM_WIN_KEYGRAB_SHARED);
+       elm_win_keygrab_set(ad->win, KEY_MUTE,
+                       0, 0, 0, ELM_WIN_KEYGRAB_SHARED);
+       elm_win_keygrab_set(ad->win, KEY_MUTE_REMOTE,
+                       0, 0, 0, ELM_WIN_KEYGRAB_SHARED);
+
+       return ECORE_CALLBACK_CANCEL;
 }
 
 static bool _create(void *data)
@@ -278,8 +309,9 @@ static bool _create(void *data)
        ad->base = base;
        ad->progress = progress;
 
-       evas_object_event_callback_add(win, EVAS_CALLBACK_KEY_DOWN,
-                       _key_pressed, ad);
+       ecore_timer_add(1, _register_keygrab, ad);
+       ad->key_down = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
+                       _key_down, ad);
 
        return true;
 }
@@ -293,8 +325,7 @@ static void _terminate(void *data)
 
        ad = data;
 
-       evas_object_event_callback_del(ad->win, EVAS_CALLBACK_KEY_DOWN,
-                       _key_pressed);
+       ecore_event_handler_del(ad->key_down);
 
        if (ad->hide_timer)
                ecore_timer_del(ad->hide_timer);