forked from enlightenment/enlightenment
redo zone edge flip blocker to require mouse out of current edge before reactivating
This commit is contained in:
parent
41ab2d4158
commit
6e8631b013
|
@ -15,9 +15,6 @@ static void _e_zone_cb_bg_mouse_up(void *data,
|
||||||
void *event_info);
|
void *event_info);
|
||||||
static void _e_zone_event_zone_desk_count_set_free(void *data,
|
static void _e_zone_event_zone_desk_count_set_free(void *data,
|
||||||
void *ev);
|
void *ev);
|
||||||
static Eina_Bool _e_zone_cb_desk_after_show(void *data,
|
|
||||||
int type,
|
|
||||||
void *event);
|
|
||||||
static Eina_Bool _e_zone_cb_edge_timer(void *data);
|
static Eina_Bool _e_zone_cb_edge_timer(void *data);
|
||||||
static void _e_zone_event_move_resize_free(void *data,
|
static void _e_zone_event_move_resize_free(void *data,
|
||||||
void *ev);
|
void *ev);
|
||||||
|
@ -230,8 +227,6 @@ e_zone_new(E_Comp *c, int num, int id, int x, int y, int w, int h)
|
||||||
zone->useful_geometry.h = -1;
|
zone->useful_geometry.h = -1;
|
||||||
|
|
||||||
//printf("@@@@@@@@@@ e_zone_new: %i %i | %i %i %ix%i = %p\n", num, id, x, y, w, h, zone);
|
//printf("@@@@@@@@@@ e_zone_new: %i %i | %i %i %ix%i = %p\n", num, id, x, y, w, h, zone);
|
||||||
E_LIST_HANDLER_APPEND(zone->handlers, E_EVENT_DESK_AFTER_SHOW,
|
|
||||||
_e_zone_cb_desk_after_show, zone);
|
|
||||||
|
|
||||||
snprintf(name, sizeof(name), "Zone %d", zone->num);
|
snprintf(name, sizeof(name), "Zone %d", zone->num);
|
||||||
zone->name = eina_stringshare_add(name);
|
zone->name = eina_stringshare_add(name);
|
||||||
|
@ -436,7 +431,75 @@ e_zone_flip_coords_handle(E_Zone *zone,
|
||||||
E_OBJECT_CHECK(zone);
|
E_OBJECT_CHECK(zone);
|
||||||
E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
|
E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
|
||||||
|
|
||||||
if (!e_config->edge_flip_dragging || zone->flip.switching) return;
|
if (zone->flip.switching)
|
||||||
|
{
|
||||||
|
int cx, cy, w, h;
|
||||||
|
|
||||||
|
switch (zone->flip.switching)
|
||||||
|
{
|
||||||
|
case E_ZONE_EDGE_LEFT:
|
||||||
|
evas_object_geometry_get(zone->edge.left, &cx, &cy, &w, &h);
|
||||||
|
if (!E_INSIDE(x, y, cx, cy, w, h))
|
||||||
|
zone->flip.switching = E_ZONE_EDGE_NONE;
|
||||||
|
break;
|
||||||
|
case E_ZONE_EDGE_RIGHT:
|
||||||
|
evas_object_geometry_get(zone->edge.right, &cx, &cy, &w, &h);
|
||||||
|
if (!E_INSIDE(x, y, cx, cy, w, h))
|
||||||
|
zone->flip.switching = E_ZONE_EDGE_NONE;
|
||||||
|
break;
|
||||||
|
case E_ZONE_EDGE_TOP:
|
||||||
|
evas_object_geometry_get(zone->edge.top, &cx, &cy, &w, &h);
|
||||||
|
if (!E_INSIDE(x, y, cx, cy, w, h))
|
||||||
|
zone->flip.switching = E_ZONE_EDGE_NONE;
|
||||||
|
break;
|
||||||
|
case E_ZONE_EDGE_BOTTOM:
|
||||||
|
evas_object_geometry_get(zone->edge.bottom, &cx, &cy, &w, &h);
|
||||||
|
if (!E_INSIDE(x, y, cx, cy, w, h))
|
||||||
|
zone->flip.switching = E_ZONE_EDGE_NONE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case E_ZONE_EDGE_TOP_LEFT:
|
||||||
|
evas_object_geometry_get(zone->corner.left_top, &cx, &cy, &w, &h);
|
||||||
|
if (!E_INSIDE(x, y, cx, cy, w, h))
|
||||||
|
{
|
||||||
|
evas_object_geometry_get(zone->corner.top_left, &cx, &cy, &w, &h);
|
||||||
|
if (!E_INSIDE(x, y, cx, cy, w, h))
|
||||||
|
zone->flip.switching = E_ZONE_EDGE_NONE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case E_ZONE_EDGE_TOP_RIGHT:
|
||||||
|
evas_object_geometry_get(zone->corner.right_top, &cx, &cy, &w, &h);
|
||||||
|
if (!E_INSIDE(x, y, cx, cy, w, h))
|
||||||
|
{
|
||||||
|
evas_object_geometry_get(zone->corner.top_right, &cx, &cy, &w, &h);
|
||||||
|
if (!E_INSIDE(x, y, cx, cy, w, h))
|
||||||
|
zone->flip.switching = E_ZONE_EDGE_NONE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case E_ZONE_EDGE_BOTTOM_RIGHT:
|
||||||
|
evas_object_geometry_get(zone->corner.right_bottom, &cx, &cy, &w, &h);
|
||||||
|
if (!E_INSIDE(x, y, cx, cy, w, h))
|
||||||
|
{
|
||||||
|
evas_object_geometry_get(zone->corner.bottom_right, &cx, &cy, &w, &h);
|
||||||
|
if (!E_INSIDE(x, y, cx, cy, w, h))
|
||||||
|
zone->flip.switching = E_ZONE_EDGE_NONE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case E_ZONE_EDGE_BOTTOM_LEFT:
|
||||||
|
evas_object_geometry_get(zone->corner.left_bottom, &cx, &cy, &w, &h);
|
||||||
|
if (!E_INSIDE(x, y, cx, cy, w, h))
|
||||||
|
{
|
||||||
|
evas_object_geometry_get(zone->corner.bottom_left, &cx, &cy, &w, &h);
|
||||||
|
if (!E_INSIDE(x, y, cx, cy, w, h))
|
||||||
|
zone->flip.switching = E_ZONE_EDGE_NONE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
if (zone->flip.switching) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!e_config->edge_flip_dragging) return;
|
||||||
/* if we have only 1 row we can flip up/down even if we have xinerama */
|
/* if we have only 1 row we can flip up/down even if we have xinerama */
|
||||||
if (eina_list_count(zone->comp->zones) > 1)
|
if (eina_list_count(zone->comp->zones) > 1)
|
||||||
{
|
{
|
||||||
|
@ -554,7 +617,7 @@ noflip:
|
||||||
zev->edge = edge;
|
zev->edge = edge;
|
||||||
zone->flip.ev = zev;
|
zone->flip.ev = zev;
|
||||||
zone->flip.bind = binding;
|
zone->flip.bind = binding;
|
||||||
zone->flip.switching = 1;
|
zone->flip.switching = edge;
|
||||||
binding->timer = ecore_timer_add(((double)binding->delay), _e_zone_cb_edge_timer, zone);
|
binding->timer = ecore_timer_add(((double)binding->delay), _e_zone_cb_edge_timer, zone);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -797,6 +860,7 @@ e_zone_edge_disable(void)
|
||||||
{
|
{
|
||||||
EINA_LIST_FOREACH(c->zones, ll, zone)
|
EINA_LIST_FOREACH(c->zones, ll, zone)
|
||||||
{
|
{
|
||||||
|
zone->flip.switching = E_ZONE_EDGE_NONE;
|
||||||
if (zone->edge.left) evas_object_hide(zone->edge.left);
|
if (zone->edge.left) evas_object_hide(zone->edge.left);
|
||||||
if (zone->edge.right) evas_object_hide(zone->edge.right);
|
if (zone->edge.right) evas_object_hide(zone->edge.right);
|
||||||
if (zone->edge.top) evas_object_hide(zone->edge.top);
|
if (zone->edge.top) evas_object_hide(zone->edge.top);
|
||||||
|
@ -1056,6 +1120,8 @@ e_zone_edge_free(E_Zone_Edge edge)
|
||||||
{
|
{
|
||||||
EINA_LIST_FOREACH(c->zones, ll, zone)
|
EINA_LIST_FOREACH(c->zones, ll, zone)
|
||||||
{
|
{
|
||||||
|
if (zone->flip.switching == edge)
|
||||||
|
zone->flip.switching = E_ZONE_EDGE_NONE;
|
||||||
switch (edge)
|
switch (edge)
|
||||||
{
|
{
|
||||||
case E_ZONE_EDGE_NONE:
|
case E_ZONE_EDGE_NONE:
|
||||||
|
@ -1451,22 +1517,6 @@ _e_zone_event_zone_desk_count_set_free(void *data __UNUSED__,
|
||||||
free(e);
|
free(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
|
||||||
_e_zone_cb_desk_after_show(void *data,
|
|
||||||
int type __UNUSED__,
|
|
||||||
void *event)
|
|
||||||
{
|
|
||||||
E_Event_Desk_Show *ev;
|
|
||||||
E_Zone *zone;
|
|
||||||
|
|
||||||
ev = event;
|
|
||||||
zone = data;
|
|
||||||
if (ev->desk->zone != zone) return ECORE_CALLBACK_PASS_ON;
|
|
||||||
|
|
||||||
zone->flip.switching = 0;
|
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
|
||||||
}
|
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_e_zone_cb_edge_timer(void *data)
|
_e_zone_cb_edge_timer(void *data)
|
||||||
{
|
{
|
||||||
|
|
|
@ -62,7 +62,7 @@ struct _E_Zone
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
unsigned char switching : 1;
|
E_Zone_Edge switching;
|
||||||
E_Shelf *es;
|
E_Shelf *es;
|
||||||
E_Event_Zone_Edge *ev;
|
E_Event_Zone_Edge *ev;
|
||||||
E_Binding_Edge *bind;
|
E_Binding_Edge *bind;
|
||||||
|
|
Loading…
Reference in New Issue