From be437b14c858ab1497547e804d865367e76686b8 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Fri, 7 Aug 2015 13:02:28 +0900 Subject: [PATCH] set keygrab home key Change-Id: I5899b0fa7bd8ac393fc61265f8a97bb12bcc0c4a Signed-off-by: Soohye Shin --- CMakeLists.txt | 1 + packaging/org.tizen.home.spec | 1 + src/main.c | 58 +++++++++++++++++++++++++++++++++++++++---- 3 files changed, 55 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c19a6b5..54bddcc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,6 +71,7 @@ pkg_check_modules(PKGS REQUIRED pkgmgr-info notification tv-service + ecore-wayland capi-appfw-application) FOREACH(flag ${PKGS_CFLAGS}) diff --git a/packaging/org.tizen.home.spec b/packaging/org.tizen.home.spec index 4a5f5b0..102abf4 100644 --- a/packaging/org.tizen.home.spec +++ b/packaging/org.tizen.home.spec @@ -19,6 +19,7 @@ BuildRequires: pkgconfig(app-utils) BuildRequires: pkgconfig(pkgmgr-info) BuildRequires: pkgconfig(tv-service) BuildRequires: pkgconfig(notification) +BuildRequires: pkgconfig(ecore-wayland) BuildRequires: edje-bin BuildRequires: gettext-devel diff --git a/src/main.c b/src/main.c index 03922c7..9862dc4 100644 --- a/src/main.c +++ b/src/main.c @@ -19,6 +19,7 @@ #include #include #include +#include #include "defs.h" #include "view.h" @@ -30,8 +31,11 @@ SET_TAG(PACKAGE); struct _appdata { const char *name; + Evas_Object *win; + Eina_Bool activated; Ecore_Event_Handler *key_down; + Ecore_Event_Handler *focus_out; }; static Evas_Object *_add_win(const char *name) @@ -49,8 +53,38 @@ static Evas_Object *_add_win(const char *name) return win; } +static void _hide(struct _appdata *ad) +{ + viewmgr_hide_view(VIEW_HOME); + viewmgr_hide_view(VIEW_RECENT); + + elm_win_iconified_set(ad->win, EINA_TRUE); + ad->activated = EINA_FALSE; +} + +static void _show(struct _appdata *ad) +{ + elm_win_activate(ad->win); + ad->activated = EINA_TRUE; + + viewmgr_push_view(VIEW_HOME); +} + +static Eina_Bool _focus_out(void *data, int type, void *event) +{ + if (!data) { + _ERR("Invalid argument"); + return ECORE_CALLBACK_CANCEL; + } + + _hide(data); + + return ECORE_CALLBACK_RENEW; +} + static Eina_Bool _key_down(void *data, int type, void *ei) { + struct _appdata *ad; Evas_Event_Key_Down *ev; if (!data || !ei) { @@ -59,10 +93,20 @@ static Eina_Bool _key_down(void *data, int type, void *ei) } ev = ei; + ad = data; if (!strcmp(ev->keyname, KEY_POWER_REMOTE)) { utils_launch_app(PACKAGE_INFOSQUARE, KEY_INFOSQUARE, VALUE_INFOSQUARE); + } else if (!strcmp(ev->keyname, KEY_HOME)) { + if (!ad->activated) + _show(ad); + } else if (!strcmp(ev->keyname, KEY_BACK) || + !strcmp(ev->keyname, KEY_BACK_REMOTE)) { + if (ad->activated && viewmgr_active_view_count() == 1 && + viewmgr_get_view_state(VIEW_HOME) == + VIEW_STATE_VISIBLE) + _hide(ad); } return ECORE_CALLBACK_CANCEL; @@ -78,11 +122,11 @@ static Eina_Bool _key_timer(void *data) elm_win_keygrab_set(data, KEY_POWER_REMOTE, 0, 0, 0, ELM_WIN_KEYGRAB_EXCLUSIVE); + elm_win_keygrab_set(data, KEY_HOME, 0, 0, 0, ELM_WIN_KEYGRAB_EXCLUSIVE); return ECORE_CALLBACK_CANCEL; } - static bool _create(void *user_data) { struct _appdata *ad; @@ -117,6 +161,9 @@ static bool _create(void *user_data) ad->key_down = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_down, ad); + ad->focus_out = ecore_event_handler_add(ECORE_WL_EVENT_FOCUS_OUT, + _focus_out, ad); + return true; } @@ -130,10 +177,13 @@ static void _terminate(void *user_data) ad = user_data; if (ad->win) { - if(ad->key_down) + if (ad->key_down) ecore_event_handler_del(ad->key_down); + if (ad->focus_out) + ecore_event_handler_del(ad->focus_out); elm_win_keygrab_unset(ad->win, KEY_POWER_REMOTE, 0, 0); + elm_win_keygrab_unset(ad->win, KEY_HOME, 0, 0); viewmgr_destroy(); evas_object_del(ad->win); } @@ -161,9 +211,7 @@ static void _control(app_control_h app_control, void *user_data) ad = user_data; if (ad->win) - elm_win_activate(ad->win); - - viewmgr_push_view(VIEW_HOME); + _show(ad); } int main(int argc, char **argv) -- 2.7.4