E_CONFIG_VAL(D, T, qp_handler.alpha, INT);
E_CONFIG_VAL(D, T, gesture_service.wait_time, DOUBLE);
E_CONFIG_VAL(D, T, gesture_service.wait_dist, INT);
+ E_CONFIG_VAL(D, T, gesture_service.use_cleanup_timer, INT);
+ E_CONFIG_VAL(D, T, gesture_service.cleanup_time, INT);
E_CONFIG_VAL(D, T, configured_output_resolution.use, UCHAR);
E_CONFIG_VAL(D, T, configured_output_resolution.w, INT);
E_CONFIG_VAL(D, T, configured_output_resolution.h, INT);
E_CONFIG_LIMIT(e_config->qp_use_bg_rect, 0, 1);
E_CONFIG_LIMIT(e_config->qp_handler.use_alpha, 0, 1);
E_CONFIG_LIMIT(e_config->qp_handler.alpha, 0, 255);
+ E_CONFIG_LIMIT(e_config->gesture_service.use_cleanup_timer, 0, 1);
E_CONFIG_LIMIT(e_config->configured_output_resolution.use, 0, 1);
E_CONFIG_LIMIT(e_config->global_object_not_provide.launch_effect, 0, 1);
E_CONFIG_LIMIT(e_config->use_thread_max_cpu, 0, 1);
E_Policy_Gesture_End_Cb end;
void *data;
} cb;
+
+ int cleanup_time;
+ Ecore_Timer *cleanup_timer;
};
static void
return ECORE_CALLBACK_CANCEL;
}
+static Eina_Bool
+_gesture_cleanup_timer(void *data)
+{
+ int cx = 0, cy = 0;
+ E_Policy_Gesture *gesture = data;
+ unsigned int timestamp;
+
+ E_FREE_FUNC(gesture->cleanup_timer, ecore_timer_del);
+
+ WRN("cleanup_timer TIMEOUT: set_fingers: 0x%x, pressed: %d(0x%x)",
+ gesture->set_fingers, gesture->pressed_fingers, (1 << gesture->pressed_fingers));
+
+ timestamp = (int)(ecore_time_get() * 1000);
+ _gesture_util_center_cur_point_get(gesture, &cx, &cy);
+ _gesture_check(gesture, gesture->obj, cx, cy, timestamp);
+ WRN("cleanup_timer gesture->status: %d cx: %d, cy: %d", gesture->status, cx, cy);
+ if (gesture->status == POL_GESTURE_STATUS_ACTIVE)
+ {
+ if (gesture->cb.end)
+ {
+ gesture->cb.end(gesture->cb.data, gesture->obj, gesture->gesture_fingers, cx, cy, timestamp);
+ }
+ }
+
+ for (int i = 0; i < gesture->pressed_fingers; i++)
+ gesture->touch_info[i].pressed = EINA_FALSE;
+
+ _gesture_cleanup(gesture);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
static void
_gesture_touch_up(E_Policy_Gesture *gesture, Evas_Object *obj, int idx, int x, int y, int timestamp)
{
gesture->pressed_fingers--;
_gesture_touch_up(gesture, obj, 0, ev->canvas.x, ev->canvas.y, ev->timestamp);
+
+ if (e_config->gesture_service.use_cleanup_timer)
+ {
+ E_FREE_FUNC(gesture->cleanup_timer, ecore_timer_del);
+ }
}
static void
Evas_Event_Mouse_Down *ev = event;
gesture->pressed_fingers++;
+
_gesture_touch_down(data, obj, 0, ev->canvas.x, ev->canvas.y, ev->timestamp);
+
+ if (e_config->gesture_service.use_cleanup_timer)
+ {
+ E_FREE_FUNC(gesture->cleanup_timer, ecore_timer_del);
+ gesture->cleanup_timer = ecore_timer_add(gesture->cleanup_time, _gesture_cleanup_timer, (void *)gesture);
+ }
}
static void
gesture->type = type;
gesture->set_fingers |= 1 << nfingers;
- // attempt to get wait_time and wait_dist to config file.
+ // attempt to get wait_time, wait_dist and cleanup_time from config file.
// but if failed, set default VALUE
if (e_config)
{
gesture->wait_time = e_config->gesture_service.wait_time;
if (e_config->gesture_service.wait_dist)
gesture->wait_dist = e_config->gesture_service.wait_dist;
+ if (e_config->gesture_service.use_cleanup_timer)
+ gesture->cleanup_time = e_config->gesture_service.cleanup_time ?: 60;
}
if (!gesture->wait_time)
gesture->wait_time = 0.1;
evas_object_data_del(gesture->obj, E_SERVICE_GESTURE_KEY);
E_FREE_FUNC(gesture->waiting_timer, ecore_timer_del);
+ E_FREE_FUNC(gesture->cleanup_timer, ecore_timer_del);
free(gesture);
}