1 #include "dependency_default_button.h"
7 #define EFL_BETA_API_SUPPORT
11 #include <Ecore_Input.h>
12 #include <Ecore_Wl2.h>
14 static mas_dependency_plugin_proxy_interface g_proxy_interface;
16 static Ecore_Event_Handler* g_key_down_handler = NULL;
17 static Ecore_Event_Handler* g_key_up_handler = NULL;
19 static chrono::time_point<chrono::system_clock> g_last_time_point;
20 static bool g_voice_key_pressed = false;
22 #define VOICE_KEY "XF86AudioPlayPause"
24 static Eina_Bool _key_down_cb(void* data, int type, void* event)
26 Ecore_Event_Key *ev = (Ecore_Event_Key *) event;
28 LOGD("KEY[%s], type[%d]", ev->keyname, type);
30 if (ev->keyname && strncmp(ev->keyname, VOICE_KEY, strlen(VOICE_KEY)) == 0 ) {
31 chrono::time_point<chrono::system_clock> current_time_point;
32 current_time_point = chrono::system_clock::now();
33 auto diff = current_time_point - g_last_time_point;
34 auto milliseconds = chrono::duration_cast<chrono::milliseconds>(diff).count();
35 /* If double click detected within 500 msec */
36 if (milliseconds < 500) {
37 if (g_proxy_interface.process_event) {
38 g_proxy_interface.process_event(MAS_PLUGIN_EVENT_VOICE_KEY_PRESSED, NULL, 0);
39 g_voice_key_pressed = true;
42 g_last_time_point = current_time_point;
46 return ECORE_CALLBACK_DONE;
49 static Eina_Bool _key_up_cb(void* data, int type, void* event)
51 Ecore_Event_Key *ev = (Ecore_Event_Key *) event;
53 LOGD("KEY[%s], type[%d]", ev->keyname, type);
55 if (g_voice_key_pressed &&
56 ev->keyname && strncmp(ev->keyname, VOICE_KEY, strlen(VOICE_KEY)) == 0) {
57 mas_plugin_event_e event = MAS_PLUGIN_EVENT_VOICE_KEY_RELEASED_AFTER_PUSH;
58 if (g_proxy_interface.process_event) {
59 g_proxy_interface.process_event(event, NULL, 0);
63 return ECORE_CALLBACK_DONE;
66 static bool _grab_voice_key(void)
69 ret = ecore_wl2_window_keygrab_set(NULL, VOICE_KEY, 0, 0, 0, ECORE_WL2_WINDOW_KEYGRAB_SHARED);
70 LOGD("ecore_wl2_window_keygrab_set ret[%d] [%s]", ret, VOICE_KEY);
75 static bool _ungrab_voice_key(void)
78 ret = ecore_wl2_window_keygrab_unset(NULL, VOICE_KEY, 0, 0);
79 LOGD("ecore_wl2_window_keygrab_unset ret[%d] [%s]", ret, VOICE_KEY);
84 static bool _add_key_cb()
86 if (g_key_down_handler == NULL) {
87 LOGE("_key_down_handler");
88 g_key_down_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_down_cb, NULL);
89 if(g_key_down_handler == NULL) {
90 LOGE("_key_down_handler == NULL ");
94 if (g_key_up_handler == NULL) {
95 LOGE("_key_down_handler");
96 g_key_up_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _key_up_cb, NULL);
97 if(g_key_up_handler == NULL) {
98 LOGE("_key_up_handler == NULL ");
104 static bool _delete_key_cb(void)
107 if (NULL != g_key_down_handler) {
108 ecore_event_handler_del(g_key_down_handler);
109 g_key_down_handler = NULL;
112 if (NULL != g_key_up_handler) {
113 ecore_event_handler_del(g_key_up_handler);
114 g_key_up_handler = NULL;
120 void dependency_default_button_initialize(mas_dependency_plugin_proxy_interface interface)
122 g_proxy_interface = interface;
124 Ecore_Wl2_Display *_ecore_wl2_display = NULL;
126 Eina_Bool ret = ecore_wl2_init();
127 LOGD("ecore_wl2_init: %d", ret);
129 _ecore_wl2_display = ecore_wl2_display_connect(NULL);
130 LOGD("_ecore_wl2_display: %p", _ecore_wl2_display);
132 g_last_time_point = chrono::system_clock::now();
137 void dependency_default_button_deinitialize()