set keygrab power key for launching infosquare 00/45500/3
authorSoohye Shin <soohye.shin@samsung.com>
Fri, 7 Aug 2015 01:19:35 +0000 (10:19 +0900)
committerSoohye Shin <soohye.shin@samsung.com>
Fri, 7 Aug 2015 01:37:27 +0000 (10:37 +0900)
Change-Id: I3725c0e0706b89d99259565ba0e4cb090248a21f
Signed-off-by: Soohye Shin <soohye.shin@samsung.com>
include/defs.h
src/main.c

index 141dcb1..54e75a1 100644 (file)
 
 #define KEY_MEDIA "media_id"
 #define KEY_CHANNEL "service_id"
+#define KEY_INFOSQUARE "launch_type"
 
 #define PACKAGE_LIVETV "org.tizen.live-tv"
 #define PACKAGE_MEDIAHUB "org.tizen.mediahub"
 #define PACKAGE_SETTINGS "org.tizen.settings-tv-ref"
+#define PACKAGE_INFOSQUARE "org.tizen.infosquare"
 
 #define GUM_ATTR_NAME "username"
 #define GUM_ATTR_USERTYPE "usertype"
index 643f7be..03922c7 100644 (file)
 #include <Elementary.h>
 #include <app_debug.h>
 #include <viewmgr.h>
+#include <key_define.h>
 
 #include "defs.h"
 #include "view.h"
+#include "utils.h"
+
+#define VALUE_INFOSQUARE "infosquare"
 
 SET_TAG(PACKAGE);
 
 struct _appdata {
        const char *name;
        Evas_Object *win;
+       Ecore_Event_Handler *key_down;
 };
 
 static Evas_Object *_add_win(const char *name)
@@ -44,6 +49,40 @@ static Evas_Object *_add_win(const char *name)
        return win;
 }
 
+static Eina_Bool _key_down(void *data, int type, void *ei)
+{
+       Evas_Event_Key_Down *ev;
+
+       if (!data || !ei) {
+               _ERR("Invalid argument");
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       ev = ei;
+
+       if (!strcmp(ev->keyname, KEY_POWER_REMOTE)) {
+               utils_launch_app(PACKAGE_INFOSQUARE, KEY_INFOSQUARE,
+                               VALUE_INFOSQUARE);
+       }
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+/* FIXME: Keygrab Hot Fix */
+static Eina_Bool _key_timer(void *data)
+{
+       if (!data) {
+               _ERR("Invalid argument");
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       elm_win_keygrab_set(data, KEY_POWER_REMOTE, 0, 0, 0,
+                       ELM_WIN_KEYGRAB_EXCLUSIVE);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+
 static bool _create(void *user_data)
 {
        struct _appdata *ad;
@@ -63,6 +102,7 @@ static bool _create(void *user_data)
                _ERR("failed to create window");
                return false;
        }
+       ecore_timer_add(3, _key_timer, ad->win);
 
        if (!viewmgr_create(ad->win)) {
                _ERR("failed to create viewmgr");
@@ -75,6 +115,8 @@ static bool _create(void *user_data)
        viewmgr_add_view(view_recent_get_vclass(), NULL);
        viewmgr_add_view(view_user_get_vclass(), NULL);
 
+       ad->key_down = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_down,
+                       ad);
        return true;
 }
 
@@ -88,6 +130,10 @@ static void _terminate(void *user_data)
        ad = user_data;
 
        if (ad->win) {
+               if(ad->key_down)
+                       ecore_event_handler_del(ad->key_down);
+
+               elm_win_keygrab_unset(ad->win, KEY_POWER_REMOTE, 0, 0);
                viewmgr_destroy();
                evas_object_del(ad->win);
        }