2 * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include <Elementary.h>
20 #include <Ecore_Input.h>
23 #include <tzsh_quickpanel_service.h>
24 #include <notification.h>
26 #if defined(WINSYS_X11)
33 #include "quickpanel-ui.h" // appdata
34 #include "common_uic.h"
36 #include "noti_util.h"
39 #define KEY_BACK "XF86Back"
40 #define KEY_CANCEL "Cancel"
41 #define KEY_MENU "XF86Menu"
42 #define KEY_QUICKPANEL "XF86QuickPanel"
43 #define KEY_HOME "XF86Home"
45 static Eina_Bool _service_hardkey_up_cb(void *data, int type, void *event)
47 struct appdata *ad = NULL;
48 Ecore_Event_Key *key_event = NULL;
50 retif(data == NULL || event == NULL, EINA_FALSE, "Invalid parameter!");
54 if (!strcmp(key_event->keyname, KEY_HOME)) {
55 if (ad->is_hardkey_cancel == EINA_FALSE) {
56 quickpanel_uic_close_quickpanel(false, 0);
58 DBG("Cancel status, do nothing");
60 } else if (!strcmp(key_event->keyname, KEY_CANCEL)) {
61 ad->is_hardkey_cancel = EINA_FALSE;
62 } else if (!strcmp(key_event->keyname, KEY_BACK)) {
63 if (ad->popup != NULL) {
64 Evas_Smart_Cb back_cb = evas_object_data_get(ad->popup, EDATA_BACKKEY_CB);
65 if (back_cb != NULL) {
66 back_cb(ad->popup, ad->popup, NULL);
69 quickpanel_uic_close_quickpanel(false, 0);
75 static Eina_Bool _service_hardkey_down_cb(void *data, int type, void *event)
77 Ecore_Event_Key *key_event = event;
78 struct appdata *ad = data;
79 retif(key_event == NULL, EINA_FALSE, "Invalid parameter!");
80 retif(ad == NULL, EINA_FALSE, "Invalid parameter!");
82 if (!strcmp(key_event->keyname, KEY_CANCEL)) {
83 ad->is_hardkey_cancel = EINA_TRUE;
84 } else if (!strcmp(key_event->keyname, KEY_QUICKPANEL)) {
85 quickpanel_uic_toggle_openning_quickpanel();
90 HAPI void quickpanel_keyboard_init(void *data)
92 struct appdata *ad = data;
93 Ecore_Event_Handler *hdl_key_down = NULL;
94 Ecore_Event_Handler *hdl_key_up = NULL;
95 retif(ad == NULL, , "Invalid parameter!");
97 if (elm_win_keygrab_set(ad->win, KEY_QUICKPANEL, 0, 0, 0, ELM_WIN_KEYGRAB_SHARED) == EINA_FALSE) {
98 ERR("failed to grab KEY_QUICKPANEL");
101 hdl_key_down = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _service_hardkey_down_cb, ad);
102 if (hdl_key_down == NULL) {
103 ERR("failed to add handler(ECORE_EVENT_KEY_DOWN)");
105 ad->hdl_hardkey_down = hdl_key_down;
107 hdl_key_up = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _service_hardkey_up_cb, ad);
108 if (hdl_key_up == NULL) {
109 ERR("failed to add handler(ECORE_EVENT_KEY_UP)");
111 ad->hdl_hardkey_up = hdl_key_up;
112 ad->is_hardkey_cancel = EINA_FALSE;
115 HAPI void quickpanel_keyboard_fini(void *data)
117 struct appdata *ad = data;
118 retif(ad == NULL, , "Invalid parameter!");
120 if (ad->hdl_hardkey_up != NULL) {
121 ecore_event_handler_del(ad->hdl_hardkey_up);
122 ad->hdl_hardkey_up = NULL;
125 if (ad->hdl_hardkey_down != NULL) {
126 ecore_event_handler_del(ad->hdl_hardkey_down);
127 ad->hdl_hardkey_down = NULL;
130 if (elm_win_keygrab_unset(ad->win, KEY_QUICKPANEL, 0, 0) == EINA_FALSE) {
131 ERR("failed to ungrab KEY_QUICKPANEL");
135 HAPI void quickpanel_keyboard_openning_init(void *data)
137 struct appdata *ad = data;
138 retif(ad == NULL, , "Invalid parameter!");
140 if (elm_win_keygrab_set(ad->win, KEY_BACK, 0, 0, 0, ELM_WIN_KEYGRAB_EXCLUSIVE) == EINA_FALSE) {
141 ERR("failed to grab KEY_BACK");
144 if (elm_win_keygrab_set(ad->win, KEY_MENU, 0, 0, 0, ELM_WIN_KEYGRAB_EXCLUSIVE) == EINA_FALSE) {
145 ERR("failed to grab KEY_MENU");
148 if (elm_win_keygrab_set(ad->win, KEY_HOME, 0, 0, 0, ELM_WIN_KEYGRAB_SHARED) == EINA_FALSE) {
149 ERR("failed to grab KEY_HOME");
154 HAPI void quickpanel_keyboard_closing_fini(void *data)
156 struct appdata *ad = data;
157 retif(ad == NULL, , "Invalid parameter!");
159 if (elm_win_keygrab_unset(ad->win, KEY_BACK, 0, 0) == EINA_FALSE) {
160 ERR("failed to ungrab KEY_BACK");
163 if (elm_win_keygrab_unset(ad->win, KEY_MENU, 0, 0) == EINA_FALSE) {
164 ERR("failed to ungrab KEY_MENU");
167 if (elm_win_keygrab_unset(ad->win, KEY_HOME, 0, 0) == EINA_FALSE) {
168 ERR("failed to ungrab KEY_HOME");