forked from enlightenment/enlightenment
gadgets - get long press plus dnd to behave nice
we had multiple drag resistance values here - unify with 1 and make it work, now it gets it right deciding between dnd and a long press menu etc. etc. ...
This commit is contained in:
parent
63a4475497
commit
c49f49829f
|
@ -1514,11 +1514,8 @@ _site_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, vo
|
|||
}
|
||||
else if (ev->button == 3)
|
||||
{
|
||||
Evas_Coord dx, dy;
|
||||
|
||||
dx = ev->canvas.x - zgs->down_3_x;
|
||||
dy = ev->canvas.y - zgs->down_3_y;
|
||||
if (((dx * dx) + (dy * dy)) < (5 * 5))
|
||||
if (!is_dragged(ev->canvas.x - zgs->down_3_x,
|
||||
ev->canvas.y - zgs->down_3_y))
|
||||
{
|
||||
E_Gadget_Config *zgc;
|
||||
Evas_Object *g = NULL;
|
||||
|
@ -1541,11 +1538,8 @@ _site_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
|
|||
|
||||
if ((zgs->down_timer) || (zgs->longpressed))
|
||||
{
|
||||
Evas_Coord dx, dy;
|
||||
|
||||
dx = ev->cur.canvas.x - zgs->down_1_x;
|
||||
dy = ev->cur.canvas.y - zgs->down_1_y;
|
||||
if (((dx * dx) + (dy * dy)) >= (5 * 5))
|
||||
if (is_dragged(ev->cur.canvas.x - zgs->down_1_x,
|
||||
ev->cur.canvas.y - zgs->down_1_y))
|
||||
{
|
||||
if (zgs->down_timer)
|
||||
{
|
||||
|
|
|
@ -82,5 +82,14 @@ dblequal(double a, double b)
|
|||
return fabs(a - b) < DBL_EPSILON;
|
||||
}
|
||||
|
||||
static inline Eina_Bool
|
||||
is_dragged(int dx, int dy)
|
||||
{
|
||||
Evas_Coord resist = elm_config_finger_size_get() / 2;
|
||||
|
||||
if ((dx * dx) + (dy * dy) > resist) return EINA_TRUE;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -29,7 +29,7 @@ struct _E_Config_Dialog_Data
|
|||
Evas_Object *ob1, *ob2, *ob3;
|
||||
Eina_List *popup_list, *urgent_list;
|
||||
} gui;
|
||||
int drag_resist, flip_desk, show_desk_names;
|
||||
int flip_desk, show_desk_names;
|
||||
E_Config_Dialog *cfd;
|
||||
};
|
||||
|
||||
|
@ -98,7 +98,6 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
cfdata->popup.urgent_speed = pager_config->popup_urgent_speed;
|
||||
cfdata->popup.height = pager_config->popup_height;
|
||||
cfdata->popup.act_height = pager_config->popup_act_height;
|
||||
cfdata->drag_resist = pager_config->drag_resist;
|
||||
cfdata->btn.drag = pager_config->btn_drag;
|
||||
cfdata->btn.noplace = pager_config->btn_noplace;
|
||||
cfdata->btn.desk = pager_config->btn_desk;
|
||||
|
@ -187,11 +186,6 @@ _adv_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
|||
ow = e_widget_check_add(evas, _("Always show desktop names"),
|
||||
&(cfdata->show_desk_names));
|
||||
e_widget_list_object_append(ol, ow, 1, 0, 0.5);
|
||||
ow = e_widget_label_add(evas, _("Resistance to dragging"));
|
||||
e_widget_list_object_append(ol, ow, 1, 0, 0.5);
|
||||
ow = e_widget_slider_add(evas, 1, 0, _("%.0f pixels"), 0.0, 10.0, 1.0, 0, NULL,
|
||||
&(cfdata->drag_resist), 100);
|
||||
e_widget_list_object_append(ol, ow, 1, 0, 0.5);
|
||||
|
||||
#if 0
|
||||
ow = e_widget_label_add(evas, _("Select and Slide button"));
|
||||
|
@ -302,7 +296,6 @@ _adv_apply(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata)
|
|||
pager_config->show_desk_names = cfdata->show_desk_names;
|
||||
pager_config->popup_height = cfdata->popup.height;
|
||||
pager_config->popup_act_height = cfdata->popup.act_height;
|
||||
pager_config->drag_resist = cfdata->drag_resist;
|
||||
pager_config->btn_drag = cfdata->btn.drag;
|
||||
pager_config->btn_noplace = cfdata->btn.noplace;
|
||||
pager_config->btn_desk = cfdata->btn.desk;
|
||||
|
@ -328,7 +321,6 @@ _adv_check_changed(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdat
|
|||
if ((int)pager_config->show_desk_names != cfdata->show_desk_names) return 1;
|
||||
if (pager_config->popup_height != cfdata->popup.height) return 1;
|
||||
if (pager_config->popup_act_height != cfdata->popup.act_height) return 1;
|
||||
if ((int)pager_config->drag_resist != cfdata->drag_resist) return 1;
|
||||
if (pager_config->btn_drag != cfdata->btn.drag) return 1;
|
||||
if (pager_config->btn_noplace != cfdata->btn.noplace) return 1;
|
||||
if (pager_config->btn_desk != cfdata->btn.desk) return 1;
|
||||
|
|
|
@ -1162,8 +1162,6 @@ _pager_window_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EI
|
|||
Evas_Coord x, y, w, h;
|
||||
const char *drag_types[] =
|
||||
{ "enlightenment/pager_win", "enlightenment/border" };
|
||||
Evas_Coord dx, dy;
|
||||
unsigned int resist = 0;
|
||||
|
||||
ev = event_info;
|
||||
pw = data;
|
||||
|
@ -1176,13 +1174,8 @@ _pager_window_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EI
|
|||
/* prevent drag for a few pixels */
|
||||
if (!pw->drag.start) return;
|
||||
|
||||
dx = pw->drag.x - ev->cur.output.x;
|
||||
dy = pw->drag.y - ev->cur.output.y;
|
||||
if (pw->desk->pager)
|
||||
resist = pager_config->drag_resist;
|
||||
|
||||
if (((unsigned int)(dx * dx) + (unsigned int)(dy * dy)) <=
|
||||
(resist * resist)) return;
|
||||
if (!is_dragged(pw->drag.x - ev->cur.output.x,
|
||||
pw->drag.y - ev->cur.output.y)) return;
|
||||
|
||||
pw->desk->pager->dragging = 1;
|
||||
pw->drag.start = 0;
|
||||
|
@ -1581,8 +1574,6 @@ _pager_desk_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA
|
|||
{
|
||||
Evas_Event_Mouse_Move *ev;
|
||||
Pager_Desk *pd;
|
||||
Evas_Coord dx, dy;
|
||||
unsigned int resist = 0;
|
||||
E_Drag *drag;
|
||||
Evas_Object *o;
|
||||
Evas_Coord x, y, w, h;
|
||||
|
@ -1595,13 +1586,8 @@ _pager_desk_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA
|
|||
/* prevent drag for a few pixels */
|
||||
if (pd->drag.start)
|
||||
{
|
||||
dx = pd->drag.x - ev->cur.output.x;
|
||||
dy = pd->drag.y - ev->cur.output.y;
|
||||
if ((pd->pager) && (pd->pager->inst))
|
||||
resist = pager_config->drag_resist;
|
||||
|
||||
if (((unsigned int)(dx * dx) + (unsigned int)(dy * dy)) <=
|
||||
(resist * resist)) return;
|
||||
if (!is_dragged(pd->drag.x - ev->cur.output.x,
|
||||
pd->drag.y - ev->cur.output.y)) return;
|
||||
|
||||
if (pd->pager) pd->pager->dragging = 1;
|
||||
pd->drag.start = 0;
|
||||
|
|
|
@ -20,7 +20,6 @@ struct _Config_Objects
|
|||
Evas_Object *o_show_desk_names;
|
||||
Evas_Object *o_popup_act_height;
|
||||
Evas_Object *o_popup_height;
|
||||
Evas_Object *o_drag_resist;
|
||||
Evas_Object *o_btn_drag;
|
||||
Evas_Object *o_btn_noplace;
|
||||
Evas_Object *o_btn_desk;
|
||||
|
@ -101,8 +100,6 @@ _config_value_changed(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void
|
|||
elm_slider_value_get(pager_gadget_config_objects->o_popup_height);
|
||||
pager_config->popup_act_height =
|
||||
elm_slider_value_get(pager_gadget_config_objects->o_popup_act_height);
|
||||
pager_config->drag_resist =
|
||||
elm_slider_value_get(pager_gadget_config_objects->o_drag_resist);
|
||||
val = elm_check_state_get(pager_gadget_config_objects->o_permanent);
|
||||
if (val != pager_config->permanent_plain)
|
||||
changed = EINA_TRUE;
|
||||
|
@ -350,26 +347,6 @@ _config_create_pages(Evas_Object *parent)
|
|||
evas_object_show(ow);
|
||||
pager_gadget_config_objects->o_show_desk_names = ow;
|
||||
|
||||
ow = elm_label_add(m);
|
||||
elm_object_text_set(ow, _("Resistance to dragging"));
|
||||
elm_table_pack(tb, ow, 0, 3, 1, 1);
|
||||
E_ALIGN(ow, 0.0, 0.0);
|
||||
E_WEIGHT(ow, EVAS_HINT_EXPAND, 0);
|
||||
evas_object_show(ow);
|
||||
|
||||
ow = elm_slider_add(tb);
|
||||
elm_slider_min_max_set(ow, 0, 10);
|
||||
elm_slider_step_set(ow, 1);
|
||||
elm_slider_value_set(ow, pager_config->drag_resist);
|
||||
elm_slider_unit_format_set(ow, _("%.0f pixels"));
|
||||
elm_table_pack(tb, ow, 0, 4, 1, 1);
|
||||
E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||
E_WEIGHT(ow, EVAS_HINT_EXPAND, 0);
|
||||
evas_object_smart_callback_add(ow, "delay,changed",
|
||||
_config_value_changed, NULL);
|
||||
evas_object_show(ow);
|
||||
pager_gadget_config_objects->o_drag_resist = ow;
|
||||
|
||||
#if 0
|
||||
ow = elm_label_add(m);
|
||||
elm_object_text_set(ow, _("Select and Slide button"));
|
||||
|
|
|
@ -1985,12 +1985,15 @@ _pager_window_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA
|
|||
Evas_Event_Mouse_Up *ev = event_info;
|
||||
Pager_Win *pw = data;
|
||||
|
||||
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
|
||||
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
|
||||
{
|
||||
pw->drag.button = 0;
|
||||
return;
|
||||
}
|
||||
pw->drag.button = 0;
|
||||
if (_pager_check_modifiers(ev->modifiers)) return;
|
||||
|
||||
evas_object_smart_callback_call(e_gadget_site_get(pw->desk->pager->inst->o_pager), "gadget_site_unlocked", NULL);
|
||||
|
||||
pw->drag.button = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1998,6 +2001,7 @@ _pager_window_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EI
|
|||
{
|
||||
Evas_Event_Mouse_Down *ev = event_info;
|
||||
Pager_Win *pw;
|
||||
|
||||
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
|
||||
if (_pager_check_modifiers(ev->modifiers)) return;
|
||||
|
||||
|
@ -2039,8 +2043,6 @@ _pager_window_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EI
|
|||
Evas_Coord x, y, w, h;
|
||||
const char *drag_types[] =
|
||||
{ "enlightenment/pager_win", "enlightenment/border" };
|
||||
Evas_Coord dx, dy;
|
||||
unsigned int resist = 0;
|
||||
pw = data;
|
||||
|
||||
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
|
||||
|
@ -2053,13 +2055,8 @@ _pager_window_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EI
|
|||
/* prevent drag for a few pixels */
|
||||
if (!pw->drag.start) return;
|
||||
|
||||
dx = pw->drag.x - ev->cur.output.x;
|
||||
dy = pw->drag.y - ev->cur.output.y;
|
||||
if (pw->desk->pager)
|
||||
resist = pager_config->drag_resist;
|
||||
|
||||
if (((unsigned int)(dx * dx) + (unsigned int)(dy * dy)) <=
|
||||
(resist * resist)) return;
|
||||
if (!is_dragged(pw->drag.x - ev->cur.output.x,
|
||||
pw->drag.y - ev->cur.output.y)) return;
|
||||
|
||||
pw->desk->pager->dragging = 1;
|
||||
pw->drag.start = 0;
|
||||
|
@ -2427,7 +2424,12 @@ _pager_desk_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
|
|||
Pager_Desk *pd;
|
||||
Pager *p;
|
||||
|
||||
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
|
||||
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
|
||||
{
|
||||
pd->drag.start = 0;
|
||||
pd->drag.in_pager = 0;
|
||||
return;
|
||||
}
|
||||
if (_pager_check_modifiers(ev->modifiers)) return;
|
||||
|
||||
pd = data;
|
||||
|
@ -2460,8 +2462,6 @@ _pager_desk_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA
|
|||
{
|
||||
Evas_Event_Mouse_Move *ev = event_info;
|
||||
Pager_Desk *pd;
|
||||
Evas_Coord dx, dy;
|
||||
unsigned int resist = 0;
|
||||
E_Drag *drag;
|
||||
Evas_Object *o;
|
||||
Evas_Coord x, y, w, h;
|
||||
|
@ -2475,14 +2475,8 @@ _pager_desk_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA
|
|||
/* prevent drag for a few pixels */
|
||||
if (pd->drag.start)
|
||||
{
|
||||
dx = pd->drag.x - ev->cur.output.x;
|
||||
dy = pd->drag.y - ev->cur.output.y;
|
||||
if ((pd->pager) && (pd->pager->inst))
|
||||
resist = pager_config->drag_resist;
|
||||
|
||||
if (((unsigned int)(dx * dx) + (unsigned int)(dy * dy)) <=
|
||||
(resist * resist)) return;
|
||||
|
||||
if (!is_dragged(pd->drag.x - ev->cur.output.x,
|
||||
pd->drag.y - ev->cur.output.y)) return;
|
||||
if (pd->pager) pd->pager->dragging = 1;
|
||||
pd->drag.start = 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue