Make basic dual mode work :) (this does not cover conformant apps yet, just

'basic' apps).



SVN revision: 44260
This commit is contained in:
Christopher Michael 2009-12-07 21:14:28 +00:00
parent 40d60d8c56
commit f95bb4526e
3 changed files with 72 additions and 38 deletions

View File

@ -347,24 +347,23 @@ illume_border_valid_borders_get(void)
return ret; return ret;
} }
Eina_Bool E_Border *
illume_border_at_xy(int x, int y) illume_border_at_xy_get(int x, int y)
{ {
Eina_List *bds, *l; Eina_List *bds, *l;
E_Border *bd; E_Border *bd, *b = NULL;
int ret = EINA_FALSE;
bds = illume_border_valid_borders_get(); bds = illume_border_valid_borders_get();
EINA_LIST_FOREACH(bds, l, bd) EINA_LIST_FOREACH(bds, l, bd)
{ {
if ((bd->x == x) && (bd->y == y)) if ((bd->fx.x == x) && (bd->fx.y == y))
{ {
ret = EINA_TRUE; b = bd;
break; break;
} }
} }
eina_list_free(bds); eina_list_free(bds);
return ret; return b;
} }
E_Border * E_Border *

View File

@ -54,7 +54,7 @@ Eina_Bool illume_border_is_overlay(E_Border *bd);
Eina_Bool illume_border_is_conformant(E_Border *bd); Eina_Bool illume_border_is_conformant(E_Border *bd);
Eina_List *illume_border_valid_borders_get(void); Eina_List *illume_border_valid_borders_get(void);
Eina_Bool illume_border_at_xy(int x, int y); E_Border *illume_border_at_xy_get(int x, int y);
E_Border *illume_border_top_shelf_get(void); E_Border *illume_border_top_shelf_get(void);
E_Border *illume_border_bottom_panel_get(void); E_Border *illume_border_bottom_panel_get(void);

View File

@ -19,6 +19,15 @@ _border_add(E_Border *bd)
if (illume_border_is_top_shelf(bd)) return; if (illume_border_is_top_shelf(bd)) return;
if (illume_border_is_bottom_panel(bd)) return; if (illume_border_is_bottom_panel(bd)) return;
if (illume_border_is_keyboard(bd)) return; if (illume_border_is_keyboard(bd)) return;
if (illume_border_is_conformant(bd))
{
E_Border *b;
b = illume_border_top_shelf_get();
if (b) e_border_fx_offset(b, 0, -shelfsize);
b = illume_border_bottom_panel_get();
if (b) e_border_fx_offset(b, 0, -panelsize);
}
e_border_raise(bd); e_border_raise(bd);
e_border_focus_set(bd, 1, 1); e_border_focus_set(bd, 1, 1);
} }
@ -26,7 +35,12 @@ _border_add(E_Border *bd)
static void static void
_border_del(E_Border *bd) _border_del(E_Border *bd)
{ // handle a border being deleted { // handle a border being deleted
E_Border *b;
b = illume_border_top_shelf_get();
if (b) e_border_fx_offset(b, 0, 0);
b = illume_border_bottom_panel_get();
if (b) e_border_fx_offset(b, 0, 0);
} }
static void static void
@ -85,55 +99,76 @@ _zone_layout(E_Zone *z)
illume_border_min_get(bd, &mw, &mh); illume_border_min_get(bd, &mw, &mh);
if (illume_border_is_top_shelf(bd)) if (illume_border_is_top_shelf(bd))
{ {
if ((bd->x != z->x) || (bd->y != z->y) || (bd->w != z->w) || if ((bd->w != z->w) || (bd->h != shelfsize))
(bd->h != shelfsize)) e_border_resize(bd, z->w, shelfsize);
e_border_move_resize(bd, z->x, z->y, z->w, shelfsize); if ((bd->x != z->x) || (bd->y != z->y))
e_border_fx_offset(bd, z->x, z->y);
e_border_stick(bd); e_border_stick(bd);
} }
else if (illume_border_is_bottom_panel(bd)) else if (illume_border_is_bottom_panel(bd))
{ {
if ((bd->x != z->x) || (bd->y != (z->y + z->h - panelsize)) || if ((bd->w != z->w) || (bd->h != panelsize))
(bd->w != z->w) || (bd->h != panelsize)) e_border_resize(bd, z->w, panelsize);
e_border_move_resize(bd, z->x, z->y + z->h - panelsize, if ((bd->x != z->x) || (bd->y != (z->y + z->h - panelsize)))
z->w, panelsize); e_border_fx_offset(bd, z->x, (z->y + z->h - panelsize));
e_border_stick(bd); e_border_stick(bd);
} }
else if (illume_border_is_keyboard(bd)) else if (illume_border_is_keyboard(bd))
{ {
if ((bd->x != z->x) || (bd->y != (z->y + z->h - kbdsize)) || if ((bd->w != z->w) || (bd->h != kbdsize))
(bd->w != z->w) || (bd->h != kbdsize)) e_border_resize(bd, z->w, kbdsize);
e_border_move_resize(bd, z->x, z->y + z->h - kbdsize, if ((bd->x != z->x) || (bd->y != (z->y + z->h - kbdsize)))
z->w, kbdsize); e_border_fx_offset(bd, z->x, (z->y + z->h - kbdsize));
}
else if (illume_border_is_home(bd))
{
if ((bd->x != z->x) || (bd->y != z->y + shelfsize) ||
(bd->w != z->w) || (bd->h != (z->h - shelfsize - panelsize)))
e_border_move_resize(bd, z->x, z->y + shelfsize, z->w,
z->h - shelfsize - panelsize);
} }
else if (illume_border_is_dialog(bd)) else if (illume_border_is_dialog(bd))
{ {
if (mh > z->h) mh = z->h; if (mh > z->h) mh = z->h;
if ((bd->x != z->x) || (bd->y != (z->y + ((z->h - mh) / 2))) || if ((bd->w != z->w) || (bd->h != mh))
(bd->w != z->w) || (bd->h != mh)) e_border_resize(bd, z->w, mh);
e_border_move_resize(bd, z->x, z->y + ((z->h - mh) / 2), if ((bd->x != z->x) || (bd->y != (z->y + ((z->h - mh) / 2))))
z->w, mh); e_border_fx_offset(bd, z->x, (z->y + ((z->h - mh) / 2)));
} }
else else
{ {
if (illume_border_is_conformant(bd)) if (!il_cfg->policy.mode.dual)
{ {
if ((bd->x != z->x) || (bd->y != z->y) || if (illume_border_is_conformant(bd))
(bd->w != z->w) || (bd->h != z->h)) {
e_border_move_resize(bd, z->x, z->y, z->w, z->h); if ((bd->w != z->w) || (bd->h != z->h))
e_border_resize(bd, z->w, z->h);
if ((bd->x != z->x) || (bd->y != z->y))
e_border_fx_offset(bd, z->x, z->y);
}
else
{
if ((bd->w != z->w) || (bd->h != (z->h - shelfsize - panelsize)))
e_border_resize(bd, z->w, (z->h - shelfsize - panelsize));
if ((bd->x != z->x) || (bd->y != (z->y + shelfsize)))
e_border_fx_offset(bd, z->x, (z->y + shelfsize));
}
} }
else else
{ {
if ((bd->x != z->x) || (bd->y != z->y + shelfsize) || E_Border *b;
(bd->w != z->w) || (bd->h != z->h - shelfsize - panelsize)) int bx, by, bw, bh;
e_border_move_resize(bd, z->x, z->y + shelfsize, z->w,
z->h - shelfsize - panelsize); /* in dual mode */
if (il_cfg->policy.mode.side == 0) /* top/left */
{
bx = z->x;
bw = z->w;
by = (z->y + shelfsize);
bh = ((z->h - shelfsize - panelsize) / 2);
b = illume_border_at_xy_get(bx, by);
if ((b) && (bd != b))
by = by + bh;
else if (b)
by = bd->y;
if ((bd->w != bw) || (bd->h != bh))
e_border_resize(bd, bw, bh);
if ((bd->x != bx) || (bd->y != by))
e_border_fx_offset(bd, bx, by);
}
} }
} }
} }