Evas_Object *vg;
Efl_VG *base_shape;
Ecore_Animator *anim;
+ Ecore_Timer *threshold_update_timer;
Evas_Object *btn1;
Evas_Object *btn2;
Eina_Tmpstr *part;
};
+static void _btn_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED);
+
static void
_signal_emit(Eo *obj, Eext_Floatingbutton_Data *sd)
{
edje_object_signal_emit(edje, buf, "elm");
sd->center = EINA_FALSE;
break;
- case EEXT_FLOATINGBUTTON_LAST:
+ default:
/* you must not reach here */
break;
}
}
static Eina_Bool
-_message_send(void *data)
+_threshold_update_timer_cb(void *data)
{
Eext_Floatingbutton_Data *fbd = data;
+ fbd->threshold_update_timer = NULL;
_threshold_update(fbd->obj, fbd);
- return ECORE_CALLBACK_CANCEL;
+ return ECORE_CALLBACK_DONE;
}
static void
fbd->on_update = EINA_FALSE;
if (!anim || fbd->anim)
- ecore_timer_add(0.4, _message_send, fbd);
+ {
+ if (fbd->threshold_update_timer) ecore_timer_del(fbd->threshold_update_timer);
+ fbd->threshold_update_timer = ecore_timer_add(0.4, _threshold_update_timer_cb, fbd);
+ }
}
static void
}
static void
-_size_hints_changed_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
+_size_hints_changed_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
Evas_Display_Mode dispmode;
CRI("Failed to set layout!");
evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize_cb, sd);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb, sd);
+ evas_object_event_callback_add(obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb, NULL);
elm_layout_signal_callback_add(obj, "mouse,down,1", DRAGABLE_PART, _on_mouse_down, sd);
elm_layout_signal_callback_add(obj, "mouse,up,1", DRAGABLE_PART, _on_mouse_up, sd);
return obj;
}
+EOLIAN static void
+_eext_floatingbutton_efl_object_destructor(Eo *obj, Eext_Floatingbutton_Data *sd)
+{
+ evas_object_event_callback_del_full(obj, EVAS_CALLBACK_RESIZE, _resize_cb, sd);
+ evas_object_event_callback_del_full(obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb, NULL);
+ elm_layout_signal_callback_del(obj, "mouse,down,1", DRAGABLE_PART, _on_mouse_down);
+ elm_layout_signal_callback_del(obj, "mouse,up,1", DRAGABLE_PART, _on_mouse_up);
+ elm_layout_signal_callback_del(obj, "mouse,move", DRAGABLE_PART, _on_mouse_move);
+ evas_object_event_callback_del_full(sd->vg, EVAS_CALLBACK_RESIZE, _vg_resize_cb, sd);
+
+ if (sd->btn1)
+ {
+ evas_object_event_callback_del_full(sd->btn1, EVAS_CALLBACK_DEL, _btn_del_cb, obj);
+ sd->btn1 = NULL;
+ }
+
+ if (sd->btn2)
+ {
+ evas_object_event_callback_del_full(sd->btn2, EVAS_CALLBACK_DEL, _btn_del_cb, obj);
+ sd->btn2 = NULL;
+ }
+
+ if (sd->threshold_update_timer)
+ {
+ ecore_timer_del(sd->threshold_update_timer);
+ sd->threshold_update_timer = NULL;
+ }
+
+ efl_destructor(efl_super(obj, MY_CLASS));
+}
+
EOLIAN static void
_eext_floatingbutton_class_constructor(Efl_Class *klass)
{
if (fbd->btn1 == obj) fbd->btn1 = NULL;
else if (fbd->btn2 == obj) fbd->btn2 = NULL;
- _update_pos(obj, fbd, EINA_FALSE);
+ _update_pos(data, fbd, EINA_FALSE);
}
EOLIAN static Efl_Ui_Theme_Apply
sd->pos_disabled[EEXT_FLOATINGBUTTON_RIGHT] = 0;
sd->pos_disabled[EEXT_FLOATINGBUTTON_RIGHT_OUT] = 1;
break;
+ default:
+ /* you must not reach here */
+ break;
}
}