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>
21 #include <tzsh_quickpanel_service.h>
22 #include <sound_manager.h>
26 #include "quickpanel-ui.h"
27 #include "quickpanel_def.h"
28 #include "common_uic.h"
32 #include "setting_utils.h"
33 #include "setting_module_api.h"
34 #include "accessibility.h"
36 #include "pager_common.h"
38 #define E_DATA_ICON_CLICKED_CB "clicked_cb"
39 #define E_DATA_ICON_ORIGINAL_OBJ "original_obj"
41 #define TAP_AND_DELAY_LONG 1.000
45 Eina_Bool is_longpressed;
46 Ecore_Timer *timer_longpress;
49 .is_longpressed = EINA_FALSE,
50 .timer_longpress = NULL,
53 static Eina_Bool _icon_handler_longpress(void *data)
56 Evas_Object *obj = data;
57 QP_Module_Setting *module = NULL;
58 retif(obj == NULL, ECORE_CALLBACK_CANCEL, "invalid argument");
60 struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
61 retif(ad == NULL, ECORE_CALLBACK_CANCEL, "application data is NULL");
63 quickpanel_media_play_feedback();
65 ecore_timer_del(s_info.timer_longpress);
66 s_info.timer_longpress = NULL;
67 s_info.is_longpressed = EINA_TRUE;
69 module = evas_object_data_get(obj, E_DATA_MODULE_INFO);
71 if (module->handler_longpress != NULL) {
73 DBG("launch setting menu of %s", module->name);
75 module->handler_longpress(obj);
77 elm_object_signal_emit(obj, "mouse,up,1", "background.super");
81 return ECORE_CALLBACK_CANCEL;
84 static void _icon_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
87 retif(obj == NULL, , "invalid argument");
89 quickpanel_page_get_touched_pos(&down_x, NULL);
91 if (s_info.down_x - down_x > 15 || s_info.down_x - down_x < -15) {
92 if (s_info.timer_longpress != NULL) {
93 ecore_timer_del(s_info.timer_longpress);
94 s_info.timer_longpress = NULL;
99 static void _icon_mouse_up_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
101 retif(obj == NULL, , "invalid argument");
103 if (s_info.timer_longpress != NULL) {
104 ecore_timer_del(s_info.timer_longpress);
105 s_info.timer_longpress = NULL;
106 s_info.is_longpressed = EINA_FALSE;
109 evas_object_event_callback_del(obj, EVAS_CALLBACK_MOUSE_MOVE,
110 _icon_mouse_move_cb);
113 static void _icon_mouse_down_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
115 retif(obj == NULL, , "invalid argument");
117 if (s_info.timer_longpress != NULL) {
118 ecore_timer_del(s_info.timer_longpress);
119 s_info.timer_longpress = NULL;
122 quickpanel_page_get_touched_pos(&(s_info.down_x), NULL);
124 s_info.is_longpressed = EINA_FALSE;
125 s_info.timer_longpress = ecore_timer_add(TAP_AND_DELAY_LONG,_icon_handler_longpress, obj);
127 evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_MOVE,
128 _icon_mouse_move_cb, NULL);
131 #ifdef QP_SCREENREADER_ENABLE
132 static void _icon_focus_clicked_cb(void *data, Evas_Object *obj, void *event_info)
134 Evas_Object *icon = NULL;
135 Edje_Signal_Cb func = NULL;
136 retif(obj == NULL, , "invalid argument");
138 struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
139 retif(ad == NULL, , "application data is NULL");
141 if (s_info.timer_longpress != NULL) {
142 ecore_timer_del(s_info.timer_longpress);
143 s_info.timer_longpress = NULL;
146 if (s_info.is_longpressed != EINA_TRUE) {
147 quickpanel_media_play_feedback();
150 icon = evas_object_data_get(obj, E_DATA_ICON_ORIGINAL_OBJ);
152 func = evas_object_data_get(icon, E_DATA_ICON_CLICKED_CB);
154 if (func != NULL && s_info.is_longpressed != EINA_TRUE) {
155 func(data, icon, "mouse,clicked,1", "background.super");
160 static void _icon_focus_clicked_cb_without_feedback(void *data, Evas_Object *obj, void *event_info)
162 Evas_Object *icon = NULL;
163 Edje_Signal_Cb func = NULL;
164 retif(obj == NULL, , "invalid argument");
166 struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
167 retif(ad == NULL, , "application data is NULL");
169 if (s_info.timer_longpress != NULL) {
170 ecore_timer_del(s_info.timer_longpress);
171 s_info.timer_longpress = NULL;
174 icon = evas_object_data_get(obj, E_DATA_ICON_ORIGINAL_OBJ);
176 func = evas_object_data_get(icon, E_DATA_ICON_CLICKED_CB);
178 if (func != NULL && s_info.is_longpressed != EINA_TRUE) {
179 func(data, icon, "mouse,clicked,1", "background.super");
184 HAPI int quickpanel_setting_icon_click_cb_add(Evas_Object *icon, Edje_Signal_Cb func, void *data)
186 retif(icon == NULL, QP_FAIL, "invalid parameter");
187 retif(func == NULL, QP_FAIL, "invalid parameter");
189 struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
190 retif(ad == NULL, QP_FAIL, "application data is NULL");
192 elm_object_signal_callback_add(icon, "mouse,up,1", "background.super", _icon_mouse_up_cb, data);
193 elm_object_signal_callback_add(icon, "mouse,down,1", "background.super", _icon_mouse_down_cb, data);
195 evas_object_data_set(icon, E_DATA_ICON_CLICKED_CB, func);
197 #ifdef QP_SCREENREADER_ENABLE
198 Evas_Object *ao = NULL;
199 ao = quickpanel_accessibility_screen_reader_object_get(icon,
200 SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
202 evas_object_smart_callback_add(ao, "clicked",
203 _icon_focus_clicked_cb, data);
204 evas_object_data_set(ao, E_DATA_ICON_ORIGINAL_OBJ, icon);
211 HAPI int quickpanel_setting_icon_click_cb_without_feedback_add(Evas_Object *icon, Edje_Signal_Cb func, void *data)
213 retif(icon == NULL, QP_FAIL, "invalid parameter");
214 retif(func == NULL, QP_FAIL, "invalid parameter");
216 struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
217 retif(ad == NULL, QP_FAIL, "application data is NULL");
219 elm_object_signal_callback_add(icon, "mouse,up,1", "background.super", _icon_mouse_up_cb, data);
220 elm_object_signal_callback_add(icon, "mouse,down,1", "background.super", _icon_mouse_down_cb, data);
222 evas_object_data_set(icon, E_DATA_ICON_CLICKED_CB, func);
224 #ifdef QP_SCREENREADER_ENABLE
225 Evas_Object *ao = NULL;
226 ao = quickpanel_accessibility_screen_reader_object_get(icon,
227 SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
229 evas_object_smart_callback_add(ao, "clicked",
230 _icon_focus_clicked_cb_without_feedback, data);
231 evas_object_data_set(ao, E_DATA_ICON_ORIGINAL_OBJ, icon);
238 HAPI int quickpanel_setting_icon_click_cb_del(Evas_Object *icon, Edje_Signal_Cb func)
240 retif(icon == NULL, QP_FAIL, "invalid parameter");
241 retif(func == NULL, QP_FAIL, "invalid parameter");
243 struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
244 retif(ad == NULL, QP_FAIL, "application data is NULL");
246 elm_object_signal_callback_del(icon, "mouse,clicked,1", "background.super", func);
251 HAPI void quickpanel_setting_icon_handler_longpress(const char *pkgname, void *data)
255 ret = quickpanel_uic_launch_ug_by_appcontrol(pkgname, data);
256 quickpanel_uic_launch_app_inform_result(pkgname, ret);
257 quickpanel_uic_close_quickpanel(true, 1);