Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_actions.c e_border.c e_border.h e_hints.c e_maximize.c 
        e_maximize.h 


Log Message:
Maximize type as an arg to e_border_maximize. Makes it possible to use
several different maximization types in one session.
Fix the different maximization policies. They only care about gadgets now,
must be fixed to care about other constraints.

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_actions.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- e_actions.c 14 Jun 2005 10:52:05 -0000      1.13
+++ e_actions.c 19 Jun 2005 14:59:40 -0000      1.14
@@ -251,7 +251,7 @@
        
        bd = (E_Border *)obj;
        if (bd->maximized) e_border_unmaximize(bd);
-        else e_border_maximize(bd);
+        else e_border_maximize(bd, e_config->maximize_policy);
      }
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.272
retrieving revision 1.273
diff -u -3 -r1.272 -r1.273
--- e_border.c  19 Jun 2005 12:35:05 -0000      1.272
+++ e_border.c  19 Jun 2005 14:59:40 -0000      1.273
@@ -1070,7 +1070,7 @@
 }
 
 void
-e_border_maximize(E_Border *bd)
+e_border_maximize(E_Border *bd, E_Maximize max)
 {
    E_OBJECT_CHECK(bd);
    E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
@@ -1091,7 +1091,7 @@
        bd->saved.h = bd->h;
 
        e_border_raise(bd);
-       switch (e_config->maximize_policy)
+       switch (max)
          {
           case E_MAXIMIZE_NONE:
              /* Ignore */
@@ -1140,9 +1140,11 @@
              y2 = bd->zone->y + bd->zone->h;
 
              /* walk through all gadgets */
-             e_maximize_border_gadman(bd, &x1, &y1, &x2, &y2);
+             e_maximize_border_gadman_fit(bd, &x1, &y1, &x2, &y2);
 
              /* walk through docks and toolbars */
+             /* FIXME */
+#if 0
              bl = e_container_border_list_first(bd->zone->container);
              while ((bd2 = e_container_border_list_next(bl)))
                {
@@ -1161,6 +1163,7 @@
                     y1 = (bd2->y + bd2->h);
                }
              e_container_border_list_free(bl);
+#endif
              w = x2 - x1;
              h = y2 - y1;
              _e_border_resize_limit(bd, &w, &h);
@@ -1176,23 +1179,11 @@
              y2 = bd->zone->y + bd->zone->h;
 
              /* walk through all gadgets */
-             for (l = bd->zone->container->gadman->clients; l; l = l->next)
-               {
-                  E_Gadman_Client *gmc;
-
-                  gmc = l->data;
-                  if ((gmc->zone != bd->zone)) continue;
+             e_maximize_border_gadman_fill(bd, &x1, &y1, &x2, &y2);
 
-                  if ((gmc->x < x2) && (gmc->x >= (bd->x + bd->w)))
-                    x2 = gmc->x;
-                  if (((gmc->x + gmc->w) > x1) && ((gmc->x + gmc->w) <= bd->x))
-                    x1 = (gmc->x + gmc->w);
-                  if ((gmc->y < y2) && (gmc->y >= (bd->y + bd->w)))
-                    y2 = gmc->y;
-                  if (((gmc->y + gmc->h) > y1) && ((gmc->y + gmc->h) <= bd->y))
-                    y1 = (gmc->y + gmc->h);
-               }
              /* walk through all windows */
+             /* FIXME */
+#if 0
              bl = e_container_border_list_first(bd->zone->container);
              while ((bd2 = e_container_border_list_next(bl)))
                {
@@ -1208,6 +1199,7 @@
                     y1 = (bd2->y + bd2->h);
                }
              e_container_border_list_free(bl);
+#endif
 
              w = x2 - x1;
              h = y2 - y1;
@@ -2930,7 +2922,7 @@
    else if (!strcmp(source, "maximize"))
      {
        if (bd->maximized) e_border_unmaximize(bd);
-       else e_border_maximize(bd);
+       else e_border_maximize(bd, e_config->maximize_policy);
      }
    else if (!strcmp(source, "iconify"))
      {
@@ -4802,7 +4794,7 @@
 
    bd = data;
    if (bd->maximized) e_border_unmaximize(bd);
-   else e_border_maximize(bd);
+   else e_border_maximize(bd, e_config->maximize_policy);
 }
 
 static void
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -3 -r1.77 -r1.78
--- e_border.h  19 Jun 2005 12:35:05 -0000      1.77
+++ e_border.h  19 Jun 2005 14:59:41 -0000      1.78
@@ -33,7 +33,7 @@
    E_FOCUS_SLOPPY
 } E_Focus_Policy;
 
-typedef enum _E_Maximize_Policy
+typedef enum _E_Maximize
 {
    E_MAXIMIZE_NONE,
    E_MAXIMIZE_ZOOM,
@@ -41,7 +41,7 @@
    E_MAXIMIZE_SMART,
    E_MAXIMIZE_EXPAND,
    E_MAXIMIZE_FILL
-} E_Maximize_Policy;
+} E_Maximize;
 
 
 
@@ -255,7 +255,7 @@
    unsigned char   re_manage : 1;
    unsigned char   shading : 1;
    unsigned char   shaded : 1;
-   E_Maximize_Policy maximized;
+   E_Maximize      maximized;
    unsigned char   iconic : 1;
    unsigned char   sticky : 1;
    unsigned char   shaped : 1;
@@ -421,7 +421,7 @@
 EAPI void      e_border_focus_set(E_Border *bd, int focus, int set);
 EAPI void      e_border_shade(E_Border *bd, E_Direction dir);
 EAPI void      e_border_unshade(E_Border *bd, E_Direction dir);
-EAPI void      e_border_maximize(E_Border *bd);
+EAPI void      e_border_maximize(E_Border *bd, E_Maximize max);
 EAPI void      e_border_unmaximize(E_Border *bd);
 EAPI void      e_border_fullscreen(E_Border *bd);
 EAPI void      e_border_unfullscreen(E_Border *bd);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.c,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -3 -r1.53 -r1.54
--- e_hints.c   17 Jun 2005 09:29:27 -0000      1.53
+++ e_hints.c   19 Jun 2005 14:59:41 -0000      1.54
@@ -389,7 +389,7 @@
    if (bd->client.netwm.state.shaded)
      e_border_shade(bd, e_hints_window_shade_direction_get(bd));
    if ((bd->client.netwm.state.maximized_v) && 
(bd->client.netwm.state.maximized_h))
-     e_border_maximize(bd);
+     e_border_maximize(bd, e_config->maximize_policy);
    if (bd->client.netwm.state.fullscreen)
      e_border_fullscreen(bd);
    if ((bd->client.icccm.state == ECORE_X_WINDOW_STATE_HINT_ICONIC)
@@ -561,7 +561,7 @@
              bd->changed = 1;
              if ((bd->client.netwm.state.maximized_v)
                  && (bd->client.netwm.state.maximized_h))
-               e_border_maximize(bd);
+               e_border_maximize(bd, e_config->maximize_policy);
              else if ((!bd->client.netwm.state.maximized_v)
                       && (!bd->client.netwm.state.maximized_h))
                e_border_unmaximize(bd);
@@ -596,7 +596,7 @@
              bd->changed = 1;
              if ((bd->client.netwm.state.maximized_v)
                  && (bd->client.netwm.state.maximized_h))
-               e_border_maximize(bd);
+               e_border_maximize(bd, e_config->maximize_policy);
              else if ((!bd->client.netwm.state.maximized_v)
                       && (!bd->client.netwm.state.maximized_h))
                e_border_unmaximize(bd);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_maximize.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_maximize.c        18 Jun 2005 15:49:24 -0000      1.1
+++ e_maximize.c        19 Jun 2005 14:59:41 -0000      1.2
@@ -4,7 +4,7 @@
 #include "e.h"
 
 void
-e_maximize_border_gadman(E_Border *bd, int *x1, int *y1, int *x2, int *y2)
+e_maximize_border_gadman_fit(E_Border *bd, int *x1, int *y1, int *x2, int *y2)
 {
    Evas_List *l;
    int cx1, cx2, cy1, cy2;
@@ -25,20 +25,132 @@
    for (l = bd->zone->container->gadman->clients; l; l = l->next)
      {
        E_Gadman_Client *gmc;
+       double ax, ay;
 
        gmc = l->data;
        if ((gmc->zone != bd->zone)) continue;
 
-       if ((gmc->ax == 0.0) && ((gmc->x + gmc->w) > cx1))
+       ax = gmc->ax;
+       ay = gmc->ay;
+
+       if (((ax == 0.0) || (ax == 1.0)) &&
+           ((ay == 0.0) || (ay == 1.0)))
+         {
+            /* corner gadget */
+            /* Fake removal from one alignment :) */
+            if (gmc->w > gmc->h)
+              ax = 0.5;
+            else
+              ay = 0.5;
+         }
+
+       if ((ax == 0.0) && (gmc->x + gmc->w) > cx1)
          cx1 = (gmc->x + gmc->w);
-       if ((gmc->ax == 1.0) && (gmc->x < cx2))
+       else if ((ax == 1.0) && (gmc->x < cx2))
          cx2 = gmc->x;
-       if ((gmc->ay == 0.0) && ((gmc->y + gmc->h) > cy1))
+       else if ((ay == 0.0) && ((gmc->y + gmc->h) > cy1))
          cy1 = (gmc->y + gmc->h);
-       if ((gmc->ay == 1.0) && (gmc->y < cy2))
+       else if ((ay == 1.0) && (gmc->y < cy2))
          cy2 = gmc->y;
      }
-   /* FIXME: Try to expand */
+
+   if (x1) *x1 = cx1;
+   if (y1) *y1 = cy1;
+   if (x2) *x2 = cx2;
+   if (y2) *y2 = cy2;
+}
+
+void
+e_maximize_border_gadman_fill(E_Border *bd, int *x1, int *y1, int *x2, int *y2)
+{
+   Evas_List *l;
+   int bx, by, bw, bh;
+   int cx1, cx2, cy1, cy2;
+
+   cx1 = bd->zone->x;
+   if (x1) cx1 = *x1;
+   
+   cy1 = bd->zone->y;
+   if (y1) cy1 = *y1;
+   
+   cx2 = bd->zone->x + bd->zone->w;
+   if (x2) cx2 = *x2;
+
+   cy2 = bd->zone->y + bd->zone->h;
+   if (y2) cy2 = *y2;
+
+   /* Loop four times. We expand left, up, right, down. */
+   /* FIXME: The right order? */
+   bx = bd->x;
+   by = bd->y;
+   bw = bd->w;
+   bh = bd->h;
+   for (l = bd->zone->container->gadman->clients; l; l = l->next)
+     {
+       /* expand left */
+       E_Gadman_Client *gmc;
+       int gx2;
+
+       gmc = l->data;
+       if ((gmc->zone != bd->zone)) continue;
+
+       gx2 = gmc->x + gmc->w;
+       if ((gx2 > cx1) && (gx2 <= bx) &&
+           E_INTERSECTS(0, gmc->y, bd->zone->w, gmc->h, 0, by, bd->zone->w, 
bh))
+         {
+            cx1 = gx2;
+         }
+     }
+   bw += (bx - cx1);
+   bx = cx1;
+   for (l = bd->zone->container->gadman->clients; l; l = l->next)
+     {
+       /* expand up */
+       E_Gadman_Client *gmc;
+       int gy2;
+
+       gmc = l->data;
+       if ((gmc->zone != bd->zone)) continue;
+
+       gy2 = gmc->y + gmc->h;
+       if ((gy2 > cy1) && (gy2 <= by) &&
+           E_INTERSECTS(gmc->x, 0, gmc->w, bd->zone->h, bx, 0, bw, 
bd->zone->h))
+         {
+            cy1 = gy2;
+         }
+     }
+   bh += (by - cy1);
+   by = cy1;
+   for (l = bd->zone->container->gadman->clients; l; l = l->next)
+     {
+       /* expand right */
+       E_Gadman_Client *gmc;
+
+       gmc = l->data;
+       if ((gmc->zone != bd->zone)) continue;
+
+       if ((gmc->x < cx2) && (gmc->x >= (bx + bw)) &&
+           E_INTERSECTS(0, gmc->y, bd->zone->w, gmc->h, 0, by, bd->zone->w, 
bh))
+         {
+            cx2 = gmc->x;
+         }
+     }
+   bw = (cx2 - cx1);
+   for (l = bd->zone->container->gadman->clients; l; l = l->next)
+     {
+       /* expand down */
+       E_Gadman_Client *gmc;
+
+       gmc = l->data;
+       if ((gmc->zone != bd->zone)) continue;
+
+       if ((gmc->y < cy2) && (gmc->y >= (by + bh)) &&
+           E_INTERSECTS(gmc->x, 0, gmc->w, bd->zone->h, bx, 0, bw, 
bd->zone->h))
+         {
+            cy2 = gmc->y;
+         }
+     }
+   bh = (cy2 - cy1);
 
    if (x1) *x1 = cx1;
    if (y1) *y1 = cy1;
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_maximize.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_maximize.h        18 Jun 2005 15:49:24 -0000      1.1
+++ e_maximize.h        19 Jun 2005 14:59:41 -0000      1.2
@@ -6,7 +6,8 @@
 #ifndef E_MAXIMIZE_H
 #define E_MAXIMIZE_H
 
-void e_maximize_border_gadman(E_Border *bd, int *x1, int *y1, int *x2, int 
*y2);
+void e_maximize_border_gadman_fit(E_Border *bd, int *x1, int *y1, int *x2, int 
*y2);
+void e_maximize_border_gadman_fill(E_Border *bd, int *x1, int *y1, int *x2, 
int *y2);
 
 #endif
 #endif




-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to