Fix net popup window position for shelf stacking weirdness.
SVN revision: 28325
This commit is contained in:
parent
8a05c1b110
commit
b46d14e9a7
104
src/e_mod_net.c
104
src/e_mod_net.c
|
@ -124,8 +124,10 @@ _cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, void *event)
|
||||||
Config_Item *ci;
|
Config_Item *ci;
|
||||||
E_Container *con;
|
E_Container *con;
|
||||||
Evas_Object *bg, *box, *icon, *label;
|
Evas_Object *bg, *box, *icon, *label;
|
||||||
Evas_Coord x, y, w, h;
|
Evas_Coord cx, cy, cw, ch;
|
||||||
Evas_Coord ox, oy, ow, oh;
|
Evas_Coord ox, oy, ow, oh;
|
||||||
|
Evas_List *l;
|
||||||
|
int layer = -1;
|
||||||
int top, wx, wy, ww, wh;
|
int top, wx, wy, ww, wh;
|
||||||
char buf[PATH_MAX];
|
char buf[PATH_MAX];
|
||||||
|
|
||||||
|
@ -136,12 +138,10 @@ _cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, void *event)
|
||||||
ci = _config_item_get(inst->gcc->id);
|
ci = _config_item_get(inst->gcc->id);
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "%s/net.edj", e_module_dir_get(cfg->mod));
|
snprintf(buf, sizeof(buf), "%s/net.edj", e_module_dir_get(cfg->mod));
|
||||||
evas_object_geometry_get(inst->o_net, &ox, &oy, &ow, &oh);
|
|
||||||
|
|
||||||
con = e_container_current_get(e_manager_current_get());
|
con = e_container_current_get(e_manager_current_get());
|
||||||
inst->popup->win = e_popup_new(e_zone_current_get(con), 0, 0, 0, 0);
|
inst->popup->win = e_popup_new(e_zone_current_get(con), 0, 0, 0, 0);
|
||||||
bg = edje_object_add(inst->popup->win->evas);
|
bg = edje_object_add(inst->popup->win->evas);
|
||||||
inst->popup->o_bg = bg;
|
|
||||||
if (!e_theme_edje_object_set(bg, "base/theme/modules",
|
if (!e_theme_edje_object_set(bg, "base/theme/modules",
|
||||||
"modules/net/popup"))
|
"modules/net/popup"))
|
||||||
edje_object_file_set(bg, buf, "modules/net/popup");
|
edje_object_file_set(bg, buf, "modules/net/popup");
|
||||||
|
@ -157,57 +157,85 @@ _cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, void *event)
|
||||||
edje_object_size_min_calc(bg, &ww, &wh);
|
edje_object_size_min_calc(bg, &ww, &wh);
|
||||||
evas_object_move(bg, 0, 0);
|
evas_object_move(bg, 0, 0);
|
||||||
evas_object_resize(bg, ww, wh);
|
evas_object_resize(bg, ww, wh);
|
||||||
|
inst->popup->o_bg = bg;
|
||||||
|
|
||||||
e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, &x, &y, &w, &h);
|
/* Begin Butt Ugly hack for shelf "layer"/position changes */
|
||||||
wx = x + ox;
|
cx = cy = cw = ch = -1;
|
||||||
wy = y + oy;
|
for (l = e_shelf_list(); l; l = l->next)
|
||||||
if ((wy - con->y) < (con->h / 2))
|
{
|
||||||
top = 0;
|
E_Shelf *es;
|
||||||
else
|
|
||||||
top = 1;
|
|
||||||
|
|
||||||
|
es = l->data;
|
||||||
|
if (es->gadcon != inst->gcc->gadcon) continue;
|
||||||
|
layer = es->layer;
|
||||||
|
cx = es->x;
|
||||||
|
cy = es->y;
|
||||||
|
cw = es->w;
|
||||||
|
ch = es->h;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cx == -1) return;
|
||||||
|
evas_object_geometry_get(inst->o_net, &ox, &oy, &ow, &oh);
|
||||||
switch (inst->gcc->gadcon->orient)
|
switch (inst->gcc->gadcon->orient)
|
||||||
{
|
{
|
||||||
case E_GADCON_ORIENT_CORNER_LT:
|
case E_GADCON_ORIENT_CORNER_RT:
|
||||||
wx += ox + ow;
|
case E_GADCON_ORIENT_CORNER_RB:
|
||||||
if (top) wy += (oh - 5);
|
case E_GADCON_ORIENT_RIGHT:
|
||||||
|
wx = (cx - ww);
|
||||||
|
if (layer == 1)
|
||||||
|
wy = oy;
|
||||||
|
else
|
||||||
|
wy = (cy + oy);
|
||||||
|
if ((wy + wh) > (cy + ch))
|
||||||
|
wy = (cy + ch) - wh;
|
||||||
break;
|
break;
|
||||||
case E_GADCON_ORIENT_LEFT:
|
case E_GADCON_ORIENT_LEFT:
|
||||||
|
case E_GADCON_ORIENT_CORNER_LT:
|
||||||
case E_GADCON_ORIENT_CORNER_LB:
|
case E_GADCON_ORIENT_CORNER_LB:
|
||||||
wx += ox + ow;
|
wx = (cx + cw);
|
||||||
wy = y;
|
if (layer == 1)
|
||||||
break;
|
wy = oy;
|
||||||
case E_GADCON_ORIENT_CORNER_RT:
|
else
|
||||||
wx -= ww - (ox - 5);
|
wy = (cy + oy);
|
||||||
if (top) wy += oh;
|
if ((wy + wh) > (cy + ch))
|
||||||
break;
|
wy = (cy + ch) - wh;
|
||||||
case E_GADCON_ORIENT_RIGHT:
|
|
||||||
wx -= ww - (ox - 5);
|
|
||||||
if (top) wy -= (oh - 5);
|
|
||||||
break;
|
|
||||||
case E_GADCON_ORIENT_CORNER_RB:
|
|
||||||
wx -= ww - (ox - 5);
|
|
||||||
wy -= oy;
|
|
||||||
break;
|
break;
|
||||||
case E_GADCON_ORIENT_TOP:
|
case E_GADCON_ORIENT_TOP:
|
||||||
case E_GADCON_ORIENT_CORNER_TL:
|
case E_GADCON_ORIENT_CORNER_TL:
|
||||||
|
if (layer == 1)
|
||||||
|
wx = ox;
|
||||||
|
else
|
||||||
|
wx = (cx + ox);
|
||||||
|
wy = (cy + ch);
|
||||||
|
break;
|
||||||
case E_GADCON_ORIENT_CORNER_TR:
|
case E_GADCON_ORIENT_CORNER_TR:
|
||||||
wx += ((ow - ww) / 2);
|
if (layer == 1)
|
||||||
if (wx < x) wx = x;
|
wx = ox;
|
||||||
if ((wx + ww) > (x + w)) wx = ((x + w) - ww);
|
else
|
||||||
if (!top) wy += oh;
|
wx = (cx + ox);
|
||||||
|
wy = (cy + ch);
|
||||||
|
if ((wx + ww) > (cx + cw))
|
||||||
|
wx = (cx + cw) - ww;
|
||||||
break;
|
break;
|
||||||
case E_GADCON_ORIENT_BOTTOM:
|
case E_GADCON_ORIENT_BOTTOM:
|
||||||
case E_GADCON_ORIENT_CORNER_BL:
|
case E_GADCON_ORIENT_CORNER_BL:
|
||||||
wx += ((ow - ww) / 2);
|
if (layer == 1)
|
||||||
if (wx < x) wx = x;
|
wx = ox;
|
||||||
wy = (y - wh);
|
else
|
||||||
|
wx = (cx + ox);
|
||||||
|
wy = (cy - wh);
|
||||||
break;
|
break;
|
||||||
case E_GADCON_ORIENT_CORNER_BR:
|
case E_GADCON_ORIENT_CORNER_BR:
|
||||||
wx += ((ow - ww) / 2);
|
if (layer == 1)
|
||||||
if (wx < x) wx = x;
|
wx = ox;
|
||||||
if ((wx + ww) > (x + w)) wx = ((x + w) - ww);
|
else
|
||||||
wy = (y - wh);
|
wx = (cx + ox);
|
||||||
|
wy = (cy - wh);
|
||||||
|
if ((wx + ww) > (cx + cw))
|
||||||
|
wx = (cx + cw) - ww;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
e_popup_move_resize(inst->popup->win, wx, wy, ww, wh);
|
e_popup_move_resize(inst->popup->win, wx, wy, ww, wh);
|
||||||
|
|
Loading…
Reference in New Issue