Handle resizing border when vkbd appears. Works for single mode and dual

mode (top & bottom).



SVN revision: 44438
This commit is contained in:
Christopher Michael 2009-12-14 06:56:43 +00:00
parent 50e925ff40
commit eb8d577866
1 changed files with 41 additions and 70 deletions

View File

@ -16,16 +16,6 @@ _border_add(E_Border *bd)
if (illume_border_is_top_shelf(bd)) return;
if (illume_border_is_bottom_panel(bd)) return;
if (illume_border_is_keyboard(bd)) return;
if ((bd->need_fullscreen) || (bd->fullscreen))
{
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_focus_set(bd, 1, 1);
}
@ -36,15 +26,6 @@ _border_del(E_Border *bd)
if (illume_border_is_top_shelf(bd)) return;
if (illume_border_is_bottom_panel(bd)) return;
if (illume_border_is_keyboard(bd)) return;
if ((bd->need_fullscreen) || (bd->fullscreen))
{
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
@ -134,82 +115,72 @@ _zone_layout(E_Zone *z)
e_border_fx_offset(bd, z->x, (z->y + ((z->h - mh) / 2)));
}
else if ((bd->need_fullscreen) || (bd->fullscreen))
e_border_fullscreen(bd, E_FULLSCREEN_RESIZE);
else
{
int kx, ky, kw, kh;
e_kbd_safe_app_region_get(z, &kx, &ky, &kw, &kh);
if (!il_cfg->policy.mode.dual)
{
if (illume_border_is_conformant(bd))
if ((bd->w != kw) || (bd->h != kh))
{
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);
bd->w = kw;
bd->h = kh;
bd->client.w = kw;
bd->client.h = kh;
bd->changes.size = 1;
}
else
if ((bd->x != kx) || (bd->y != ky))
{
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));
bd->x = kx;
bd->y = ky;
bd->changes.pos = 1;
}
}
else
}
else /* not fullscreen border; handle all other borders */
{
int kx, ky, kw, kh, ps, ss;
int bx, by, bw, bh;
ss = 0;
ps = 0;
e_kbd_safe_app_region_get(z, &kx, &ky, &kw, &kh);
if (!illume_border_is_conformant(bd))
{
if (kh >= z->h) ps = panelsize;
ss = shelfsize;
}
bx = kx;
by = (ky + ss);
bw = kw;
bh = (kh - ss - ps);
if (il_cfg->policy.mode.dual)
{
E_Border *b;
int bx, by, bw, bh;
bx = z->x;
bw = z->w;
by = (z->y + shelfsize);
bh = (z->h - shelfsize - panelsize);
/* in dual mode */
if (il_cfg->policy.mode.side == 0) /* top/bottom */
{
bh = ((z->h - shelfsize - panelsize) / 2);
bh = (bh / 2);
b = illume_border_at_xy_get(bx, by);
if ((b) && (bd != b))
by = by + bh;
by = (by + bh);
else if (b)
by = bd->fx.y;
if (illume_border_is_conformant(bd))
{
by = z->y;
bh = (z->h / 2);
if ((b) && (bd != b))
{
by = b->fx.y + b->h;
bh = (z->h - (b->fx.y + b->h));
}
else if (b)
by = bd->fx.y;
}
}
else if (il_cfg->policy.mode.side == 1) /* left/right */
{
bw = (z->w / 2);
b = illume_border_at_xy_get(bx, by);
bw = (bw / 2);
b = illume_border_at_xy_get(kx, by);
if ((b) && (bd != b))
bx = bx + bw;
bx = (bx + bw);
else if (b)
bx = bd->x;
if (illume_border_is_conformant(bd))
{
bx = z->x;
by = z->y;
bw = (z->w / 2);
bh = z->h;
if ((b) && (bd != b))
bx = b->fx.x + b->w;
}
}
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);
}
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);
}
}
}