[W-Indicator] Exit application when power/down key is pressed 07/80307/1 accepted/tizen/wearable/20160717.035047 submit/tizen/20160715.172908
authorGowtham Anandha Babu <gowtham.ab@samsung.com>
Fri, 15 Jul 2016 16:56:36 +0000 (22:26 +0530)
committerGowtham Anandha Babu <gowtham.ab@samsung.com>
Fri, 15 Jul 2016 16:56:36 +0000 (22:26 +0530)
Fixed TSAM-6448.

Change-Id: I3efd0c55c63ea3e56224936f2c73cc4d26927ce1

include/windicator.h
src/windicator.c
src/windicator_moment_bar.c

index cadb16ea0ca5ac0c116029720f9941f34f666f34..39691221c1d7793a9c8601947557b9a97467619a 100644 (file)
@@ -88,6 +88,7 @@ struct appdata
     Ecore_X_Window input_win;
     Ecore_Event_Handler *two_finger_handler;
     Ecore_Event_Handler *back_key_handler;
+    Ecore_Event_Handler *down_key_handler;
 
     /* Moment Bar */
     Evas *moment_bar_evas;
index 0370b88828e565e884a981252bf3d8d87f39fc01..cfba98b5c170963ff151d68c11f7a99656fd9013 100755 (executable)
@@ -50,6 +50,8 @@ static void _init_variables(void *data)
        ad->is_full = 0;
        ad->pre_charge_state = 0;
        ad->is_cooldown = 0;
+       ad->back_key_handler = NULL;
+       ad->down_key_handler = NULL;
        ad->is_tutorial = 0;
        ad->moment_bar_rotary_index = 0;
        ad->is_getting_back = 0;
@@ -194,7 +196,6 @@ static bool app_create(void *data)
 
        /* Register scs's vconfkey events */
        windicator_scs_vconfkey_register(ad);
-
        return true;
 }
 
@@ -261,6 +262,7 @@ static void app_terminate(void *user_data)
 
        /* Unregister scs's vconfkey events */
        windicator_scs_vconfkey_unregister();
+       windicator_util_back_key_ungrab(ad);
 }
 
 /**
index 8aa1a66fda37bf1da13c2ea6264a621cc66c03e4..211916c12e5569d16802e9caa6d0c5d7caa7b774 100755 (executable)
@@ -34,6 +34,7 @@
 #include "windicator_connection.h"
 
 #define KEY_BACK "XF86Back"
+#define KEY_DOWN "XF86PowerOff"
 
 Evas_Object *windicator_moment_bar_first_page_layout_create(void *data)
 {
@@ -173,6 +174,8 @@ static Eina_Bool _key_release_event_cb(void *data, int type, void *event)
         Evas_Event_Key_Up *ev = event;
         retv_if(ev == NULL, EINA_FALSE);
 
+       _D("Key(%s) pressed", ev->keyname);
+
         if (!strcmp(ev->keyname, KEY_BACK)) {
                if (ad->is_getting_back == 0) {
                _D("Moment bar status -> idle. (Hide Moment bar)");
@@ -184,6 +187,10 @@ static Eina_Bool _key_release_event_cb(void *data, int type, void *event)
                _D("Back key animation is operating, so skip back key event");
                }
        }
+       else if(!strcmp(ev->keyname, KEY_DOWN)) {
+               _D("Moment bar status -> Exit. (Exit Moment bar)");
+               elm_exit();
+       }
        return EINA_FALSE;
 }
 
@@ -202,9 +209,33 @@ windicator_error_e windicator_util_back_key_grab(void *data)
                }
        }
 
+       if (ad->down_key_handler == NULL) {
+               ad->down_key_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_release_event_cb, ad);
+               if (ad->down_key_handler == NULL) {
+                       _E("Failed to add down key handler");
+                       return WINDICATOR_ERROR_FAIL;
+               }
+       }
+
        return WINDICATOR_ERROR_OK;
 }
 
+void windicator_util_back_key_ungrab(void *data)
+{
+       _D("");
+       struct appdata *ad = (struct appdata *)data;
+       ret_if(ad == NULL);
+
+       if(ad->back_key_handler) {
+               ecore_event_handler_del(ad->back_key_handler);
+               ad->back_key_handler = NULL;
+       }
+
+       if(ad->down_key_handler) {
+               ecore_event_handler_del(ad->down_key_handler);
+               ad->down_key_handler = NULL;
+       }
+}
 windicator_error_e windicator_moment_bar_show(void *data)
 {
        struct appdata *ad = (struct appdata *)data;