fix gadcon popups across multiple zones.

SVN revision: 36120
This commit is contained in:
Carsten Haitzler 2008-09-20 05:16:49 +00:00
parent bd470ac03d
commit 2fe970f02a
1 changed files with 11 additions and 10 deletions

View File

@ -62,7 +62,7 @@ EAPI void
e_gadcon_popup_show(E_Gadcon_Popup *pop) e_gadcon_popup_show(E_Gadcon_Popup *pop)
{ {
Evas_Object *o; Evas_Object *o;
Evas_Coord gx, gy, gw, gh, zw, zh, zx; Evas_Coord gx, gy, gw, gh, zw, zh, zx, zy;
Evas_Coord px, py, ww, wh; Evas_Coord px, py, ww, wh;
if (!pop) return; if (!pop) return;
@ -91,9 +91,10 @@ e_gadcon_popup_show(E_Gadcon_Popup *pop)
/* Popup positioning */ /* Popup positioning */
e_gadcon_client_geometry_get(pop->gcc, &gx, &gy, &gw, &gh); e_gadcon_client_geometry_get(pop->gcc, &gx, &gy, &gw, &gh);
zx = pop->gcc->gadcon->zone->x;
zy = pop->gcc->gadcon->zone->y;
zw = pop->gcc->gadcon->zone->w; zw = pop->gcc->gadcon->zone->w;
zh = pop->gcc->gadcon->zone->h; zh = pop->gcc->gadcon->zone->h;
zx = pop->gcc->gadcon->zone->x;
switch (pop->gcc->gadcon->orient) switch (pop->gcc->gadcon->orient)
{ {
case E_GADCON_ORIENT_CORNER_RT: case E_GADCON_ORIENT_CORNER_RT:
@ -101,7 +102,7 @@ e_gadcon_popup_show(E_Gadcon_Popup *pop)
case E_GADCON_ORIENT_RIGHT: case E_GADCON_ORIENT_RIGHT:
px = gx - pop->w; px = gx - pop->w;
py = gy; py = gy;
if (py + pop->h >= zh) if (py + pop->h >= (zy + zh))
py = gy + gh - pop->h; py = gy + gh - pop->h;
break; break;
case E_GADCON_ORIENT_LEFT: case E_GADCON_ORIENT_LEFT:
@ -109,7 +110,7 @@ e_gadcon_popup_show(E_Gadcon_Popup *pop)
case E_GADCON_ORIENT_CORNER_LB: case E_GADCON_ORIENT_CORNER_LB:
px = gx + gw; px = gx + gw;
py = gy; py = gy;
if (py + pop->h >= zh) if (py + pop->h >= (zy + zh))
py = gy + gh - pop->h; py = gy + gh - pop->h;
break; break;
break; break;
@ -118,7 +119,7 @@ e_gadcon_popup_show(E_Gadcon_Popup *pop)
case E_GADCON_ORIENT_CORNER_TR: case E_GADCON_ORIENT_CORNER_TR:
py = gy + gh; py = gy + gh;
px = (gx + (gw / 2)) - (pop->w / 2); px = (gx + (gw / 2)) - (pop->w / 2);
if (px + pop->w >= zw) if ((px + pop->w) >= (zx + zw))
px = gx + gw - pop->w; px = gx + gw - pop->w;
else if (px < zx) else if (px < zx)
px = zx; px = zx;
@ -128,19 +129,19 @@ e_gadcon_popup_show(E_Gadcon_Popup *pop)
case E_GADCON_ORIENT_CORNER_BR: case E_GADCON_ORIENT_CORNER_BR:
py = gy - pop->h; py = gy - pop->h;
px = (gx + (gw / 2)) - (pop->w / 2); px = (gx + (gw / 2)) - (pop->w / 2);
if (px + pop->w >= zw) if ((px + pop->w) >= (zx + zw))
px = gx + gw - pop->w; px = gx + gw - pop->w;
else if (px < zx) else if (px < zx)
px = zx; px = zx;
break; break;
case E_GADCON_ORIENT_FLOAT: case E_GADCON_ORIENT_FLOAT:
px = (gx + (gw / 2)) - (pop->w / 2); px = (gx + (gw / 2)) - (pop->w / 2);
if (gy >= zh / 2) if (gy >= (zy + (zh / 2)))
py = gy - pop->h; py = gy - pop->h;
else else
py = gy + gh; py = gy + gh;
if (px + pop->w >= zw) if ((px + pop->w) >= (zx + zw))
px = zw - pop->w; px = gx + gw - pop->w;
else if (px < zx) else if (px < zx)
px = zx; px = zx;
break; break;
@ -148,7 +149,7 @@ e_gadcon_popup_show(E_Gadcon_Popup *pop)
e_popup_move_resize(pop->win, 50, 50, pop->w, pop->h); e_popup_move_resize(pop->win, 50, 50, pop->w, pop->h);
return; return;
} }
e_popup_move_resize(pop->win, px, py, pop->w, pop->h); e_popup_move_resize(pop->win, px - zx, py - zy, pop->w, pop->h);
} }
EAPI void EAPI void