Handle resizing border when vkbd appears. Works for single mode and dual
authorChristopher Michael <cpmichael1@comcast.net>
Mon, 14 Dec 2009 06:56:43 +0000 (06:56 +0000)
committerChristopher Michael <cpmichael1@comcast.net>
Mon, 14 Dec 2009 06:56:43 +0000 (06:56 +0000)
mode (top & bottom).

SVN revision: 44438

src/modules/illume2/e_mod_layout_illume.c

index 88d06b4..5143133 100644 (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);
           }
      }
 }