Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_border.c e_border.h e_config.c e_container.c 
        e_ipc_handlers.h e_maximize.c e_maximize.h 


Log Message:
maximize zoom isn't a maximized mode, it's a fullscreen mode.
Check other windows when doing maximize fill.
Check windows of type dock when doing maximize expand and smart.

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.273
retrieving revision 1.274
diff -u -3 -r1.273 -r1.274
--- e_border.c  19 Jun 2005 14:59:40 -0000      1.273
+++ e_border.c  19 Jun 2005 17:13:26 -0000      1.274
@@ -1078,9 +1078,6 @@
    if ((bd->fullscreen) || (bd->shaded) || (bd->shading)) return;
    if (!bd->maximized)
      {
-       Evas_List *l;
-       E_Border_List *bl;
-       E_Border *bd2;
        int x1, y1, x2, y2;
        int w, h;
 
@@ -1096,10 +1093,6 @@
           case E_MAXIMIZE_NONE:
              /* Ignore */
              break;
-          case E_MAXIMIZE_ZOOM:
-             /* FIXME */
-             bd->maximized = E_MAXIMIZE_ZOOM;
-             break;
           case E_MAXIMIZE_FULLSCREEN:
              if (bd->bg_object)
                {
@@ -1143,27 +1136,8 @@
              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)))
-               {
-                  if (bd2->zone != bd->zone) continue;
-                  if ((bd->client.netwm.type != ECORE_X_WINDOW_TYPE_DOCK) &&
-                      (bd->client.netwm.type != ECORE_X_WINDOW_TYPE_TOOLBAR))
-                    continue;
-
-                  if ((bd2->x < x2) && (bd2->x >= (bd->x + bd->w)))
-                    x2 = bd2->x;
-                  if (((bd2->x + bd2->w) > x1) && ((bd2->x + bd2->w) <= bd->x))
-                    x1 = (bd2->x + bd2->w);
-                  if ((bd2->y < y2) && (bd2->y >= (bd->y + bd->w)))
-                    y2 = bd2->y;
-                  if (((bd2->y + bd2->h) > y1) && ((bd2->y + bd2->h) <= bd->y))
-                    y1 = (bd2->y + bd2->h);
-               }
-             e_container_border_list_free(bl);
-#endif
+             e_maximize_border_dock_fit(bd, &x1, &y1, &x2, &y2);
+
              w = x2 - x1;
              h = y2 - y1;
              _e_border_resize_limit(bd, &w, &h);
@@ -1182,24 +1156,7 @@
              e_maximize_border_gadman_fill(bd, &x1, &y1, &x2, &y2);
 
              /* walk through all windows */
-             /* FIXME */
-#if 0
-             bl = e_container_border_list_first(bd->zone->container);
-             while ((bd2 = e_container_border_list_next(bl)))
-               {
-                  if (bd2->zone != bd->zone) continue;
-
-                  if ((bd2->x < x2) && (bd2->x >= (bd->x + bd->w)))
-                    x2 = bd2->x;
-                  if (((bd2->x + bd2->w) > x1) && ((bd2->x + bd2->w) <= bd->x))
-                    x1 = (bd2->x + bd2->w);
-                  if ((bd2->y < y2) && (bd2->y >= (bd->y + bd->w)))
-                    y2 = bd2->y;
-                  if (((bd2->y + bd2->h) > y1) && ((bd2->y + bd2->h) <= bd->y))
-                    y1 = (bd2->y + bd2->h);
-               }
-             e_container_border_list_free(bl);
-#endif
+             e_maximize_border_border_fill(bd, &x1, &y1, &x2, &y2);
 
              w = x2 - x1;
              h = y2 - y1;
@@ -1237,9 +1194,6 @@
           case E_MAXIMIZE_NONE:
              /* Ignore */
              break;
-          case E_MAXIMIZE_ZOOM:
-             /* FIXME */
-             break;
           case E_MAXIMIZE_FULLSCREEN:
              if (bd->bg_object)
                {
@@ -1290,6 +1244,11 @@
    E_OBJECT_CHECK(bd);
    E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
 
+   /* FIXME:
+    * Implement both fullscreen modes!
+    * Black background!
+    */
+
    /* FIXME: Some types of maximized might allow this */
    if ((bd->maximized) || (bd->shaded) || (bd->shading)) return;
    if (!bd->fullscreen)
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -3 -r1.78 -r1.79
--- e_border.h  19 Jun 2005 14:59:41 -0000      1.78
+++ e_border.h  19 Jun 2005 17:13:37 -0000      1.79
@@ -36,13 +36,20 @@
 typedef enum _E_Maximize
 {
    E_MAXIMIZE_NONE,
-   E_MAXIMIZE_ZOOM,
    E_MAXIMIZE_FULLSCREEN,
    E_MAXIMIZE_SMART,
    E_MAXIMIZE_EXPAND,
    E_MAXIMIZE_FILL
 } E_Maximize;
 
+typedef enum _E_Fullscreen
+{
+   /* Resize window */
+   E_FULLSCREEN_RESIZE,
+   /* Change screen resoultion and resize window */
+   E_FULLSCREEN_ZOOM
+} E_Fullscreen;
+
 
 
 typedef struct _E_Border                     E_Border;
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_config.c,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -3 -r1.63 -r1.64
--- e_config.c  18 Jun 2005 04:30:35 -0000      1.63
+++ e_config.c  19 Jun 2005 17:13:37 -0000      1.64
@@ -790,7 +790,7 @@
    E_CONFIG_LIMIT(e_config->winlist_pos_min_h, 0, 4000);
    E_CONFIG_LIMIT(e_config->winlist_pos_max_w, 8, 4000);
    E_CONFIG_LIMIT(e_config->winlist_pos_max_h, 8, 4000);
-   E_CONFIG_LIMIT(e_config->maximize_policy, E_MAXIMIZE_ZOOM, E_MAXIMIZE_FILL);
+   E_CONFIG_LIMIT(e_config->maximize_policy, E_MAXIMIZE_FULLSCREEN, 
E_MAXIMIZE_FILL);
 ;
    /* apply lang config - exception because config is loaded after intl setup 
*/
    
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_container.c,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -3 -r1.68 -r1.69
--- e_container.c       18 Jun 2005 13:03:00 -0000      1.68
+++ e_container.c       19 Jun 2005 17:13:37 -0000      1.69
@@ -976,6 +976,10 @@
    e_gadman_container_resize(con->gadman);
    e_object_ref(E_OBJECT(con));
    ecore_event_add(E_EVENT_CONTAINER_RESIZE, ev, 
_e_container_event_container_resize_free, NULL);
+#if 0
+   /* FIXME: This is wrong, we should only move/resize to save things from
+    * disappearing!
+    */
    for (i = 0; i < 7; i++)
      {
        for (l = con->layers[i].clients; l; l = l->next)
@@ -995,6 +999,7 @@
               e_border_move(bd, bd->x, bd->zone->y + bd->zone->h - bd->h);
          }
      }
+#endif
 }
 
 static void
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_ipc_handlers.h,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -3 -r1.39 -r1.40
--- e_ipc_handlers.h    19 Jun 2005 14:56:21 -0000      1.39
+++ e_ipc_handlers.h    19 Jun 2005 17:13:37 -0000      1.40
@@ -1413,25 +1413,24 @@
 /****************************************************************************/
 #define HDL E_IPC_OP_MAXIMIZE_POLICY_SET
 #if (TYPE == E_REMOTE_OPTIONS)
-   OP("-maximize-policy-set", 1, "Set the maximize policy. OPT1 = ZOOM, 
FULLSCREEN, SMART, EXPAND or FILL", 0, HDL)
+   OP("-maximize-policy-set", 1, "Set the maximize policy. OPT1 = FULLSCREEN, 
SMART, EXPAND or FILL", 0, HDL)
 #elif (TYPE == E_REMOTE_OUT)
    REQ_INT_START(HDL)
    int value = 0;
-   if (!strcmp(params[0], "ZOOM")) value = E_MAXIMIZE_ZOOM;
-   else if (!strcmp(params[0], "FULLSCREEN")) value = E_MAXIMIZE_FULLSCREEN;
+   if (!strcmp(params[0], "FULLSCREEN")) value = E_MAXIMIZE_FULLSCREEN;
    else if (!strcmp(params[0], "SMART")) value = E_MAXIMIZE_SMART;
    else if (!strcmp(params[0], "EXPAND")) value = E_MAXIMIZE_EXPAND;
    else if (!strcmp(params[0], "FILL")) value = E_MAXIMIZE_FILL;
    else
      {
-        printf("maximize must be ZOOM, FULLSCREEN, SMART, EXPAND or FILL\n");
+        printf("maximize must be FULLSCREEN, SMART, EXPAND or FILL\n");
         exit(-1);
      }
    REQ_INT_END(value, HDL);
 #elif (TYPE == E_WM_IN)
    START_INT(value, HDL);
    e_config->maximize_policy = value;
-   E_CONFIG_LIMIT(e_config->maximize_policy, E_MAXIMIZE_ZOOM, E_MAXIMIZE_FILL);
+   E_CONFIG_LIMIT(e_config->maximize_policy, E_MAXIMIZE_FULLSCREEN, 
E_MAXIMIZE_FILL);
    SAVE;
    END_INT
 #elif (TYPE == E_REMOTE_IN)
@@ -1457,9 +1456,7 @@
 #elif (TYPE == E_WM_IN)
 #elif (TYPE == E_REMOTE_IN)
    START_INT(policy, HDL);
-   if (policy == E_MAXIMIZE_ZOOM)
-     printf("REPLY: ZOOM\n");
-   else if (policy == E_MAXIMIZE_FULLSCREEN)
+   if (policy == E_MAXIMIZE_FULLSCREEN)
      printf("REPLY: FULLSCREEN\n");
    else if (policy == E_MAXIMIZE_SMART)
      printf("REPLY: SMART\n");
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_maximize.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- e_maximize.c        19 Jun 2005 14:59:41 -0000      1.2
+++ e_maximize.c        19 Jun 2005 17:13:37 -0000      1.3
@@ -3,6 +3,22 @@
  */
 #include "e.h"
 
+typedef struct _E_Maximize_Rect E_Maximize_Rect;
+
+struct _E_Maximize_Rect
+{
+   int x1, y1, x2, y2;
+};
+
+#define OBSTACLE(_x1, _y1, _x2, _y2) \
+   { \
+      r = E_NEW(E_Maximize_Rect, 1); \
+      r->x1 = (_x1); r->y1 = (_y1); r->x2 = (_x2); r->y2 = (_y2); \
+      rects = evas_list_append(rects, r); \
+   }
+
+static void _e_maximize_border_rects_fill(E_Border *bd, Evas_List *list, 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)
 {
@@ -61,8 +77,149 @@
 }
 
 void
+e_maximize_border_dock_fit(E_Border *bd, int *x1, int *y1, int *x2, int *y2)
+{
+   E_Border_List *bl;
+   E_Border *bd2;
+   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;
+
+   bl = e_container_border_list_first(bd->zone->container);
+   while ((bd2 = e_container_border_list_next(bl)))
+     {
+       enum {
+            TOP,
+            RIGHT,
+            BOTTOM,
+            LEFT
+       } edge;
+
+       if ((bd2->zone != bd->zone) || (bd2 == bd) ||
+           (bd2->client.netwm.type != ECORE_X_WINDOW_TYPE_DOCK))
+         continue;
+
+       if (((bd2->x == bd2->zone->x) || ((bd2->x + bd2->w) == (bd2->zone->x + 
bd2->zone->w))) &&
+           ((bd2->y == bd2->zone->y) || ((bd2->x + bd2->h) == (bd2->zone->x + 
bd2->zone->h))))
+         {
+            /* corner */
+            if (bd2->w > bd2->h)
+              {
+                 if (bd2->y == bd2->zone->y)
+                   edge = TOP;
+                 else if ((bd2->x + bd2->h) == (bd2->zone->x + bd2->zone->h))
+                   edge = BOTTOM;
+              }
+            else
+              {
+                 if ((bd2->x + bd2->w) == (bd2->zone->x + bd2->zone->w))
+                   edge = RIGHT;
+                 else if ((bd2->y == bd2->zone->y))
+                   edge = LEFT;
+              }
+         }
+       else
+         {
+            if (bd2->y == bd2->zone->y)
+              edge = TOP;
+            else if ((bd2->x + bd2->w) == (bd2->zone->x + bd2->zone->w))
+              edge = RIGHT;
+            else if ((bd2->x + bd2->h) == (bd2->zone->x + bd2->zone->h))
+              edge = BOTTOM;
+            else if ((bd2->y == bd2->zone->y))
+              edge = LEFT;
+         }
+
+       switch (edge)
+         {
+          case TOP:
+             if ((bd2->y + bd2->h) > cy1)
+               cy1 = (bd2->y + bd2->h);
+             break;
+          case RIGHT:
+             if (bd2->x < cx2)
+               cx2 = bd2->x;
+             break;
+          case BOTTOM:
+             if (bd2->y < cy2)
+               cy2 = bd2->y;
+             break;
+          case LEFT:
+             if ((bd2->x + bd2->w) > cx1)
+               cx1 = (bd2->x + bd2->w);
+             break;
+         }
+     }
+   e_container_border_list_free(bl);
+
+   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, *rects = NULL;
+   E_Maximize_Rect *r;
+
+   for (l = bd->zone->container->gadman->clients; l; l = l->next)
+     {
+       E_Gadman_Client *gmc;
+
+       gmc = l->data;
+       if ((gmc->zone != bd->zone)) continue;
+       OBSTACLE(gmc->x, gmc->y, gmc->x + gmc->w, gmc->y + gmc->h);
+     }
+   if (rects)
+     {
+       _e_maximize_border_rects_fill(bd, rects, x1, y1, x2, y2);
+       for (l = rects; l; l = l->next)
+         free(l->data);
+       evas_list_free(rects);
+     }
+}
+
+void
+e_maximize_border_border_fill(E_Border *bd, int *x1, int *y1, int *x2, int *y2)
+{
+   Evas_List *l, *rects = NULL;
+   E_Border_List *bl;
+   E_Maximize_Rect *r;
+   E_Border *bd2;
+
+   bl = e_container_border_list_first(bd->zone->container);
+   while ((bd2 = e_container_border_list_next(bl)))
+     {
+       if ((bd2->zone != bd->zone) ||
+           (bd == bd2))
+         continue;
+       OBSTACLE(bd2->x, bd2->y, bd2->x + bd2->w, bd2->y + bd2->h);
+     }
+   e_container_border_list_free(bl);
+   if (rects)
+     {
+       _e_maximize_border_rects_fill(bd, rects, x1, y1, x2, y2);
+       for (l = rects; l; l = l->next)
+         free(l->data);
+       evas_list_free(rects);
+     }
+}
+
+void
+_e_maximize_border_rects_fill(E_Border *bd, Evas_List *rects, int *x1, int 
*y1, int *x2, int *y2)
+{
    Evas_List *l;
    int bx, by, bw, bh;
    int cx1, cx2, cy1, cy2;
@@ -85,69 +242,57 @@
    by = bd->y;
    bw = bd->w;
    bh = bd->h;
-   for (l = bd->zone->container->gadman->clients; l; l = l->next)
+   for (l = rects; l; l = l->next)
      {
        /* expand left */
-       E_Gadman_Client *gmc;
-       int gx2;
-
-       gmc = l->data;
-       if ((gmc->zone != bd->zone)) continue;
+       E_Maximize_Rect *rect;
 
-       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))
+       rect = l->data;
+       if ((rect->x2 > cx1) && (rect->x2 <= bx) &&
+           E_INTERSECTS(0, rect->y1, bd->zone->w, (rect->y2 - rect->y1), 0, 
by, bd->zone->w, bh))
          {
-            cx1 = gx2;
+            cx1 = rect->x2;
          }
      }
    bw += (bx - cx1);
    bx = cx1;
-   for (l = bd->zone->container->gadman->clients; l; l = l->next)
+   for (l = rects; l; l = l->next)
      {
        /* expand up */
-       E_Gadman_Client *gmc;
-       int gy2;
-
-       gmc = l->data;
-       if ((gmc->zone != bd->zone)) continue;
+       E_Maximize_Rect *rect;
 
-       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))
+       rect = l->data;
+       if ((rect->y2 > cy1) && (rect->y2 <= by) &&
+           E_INTERSECTS(rect->x1, 0, (rect->x2 - rect->x1), bd->zone->h, bx, 
0, bw, bd->zone->h))
          {
-            cy1 = gy2;
+            cy1 = rect->y2;
          }
      }
    bh += (by - cy1);
    by = cy1;
-   for (l = bd->zone->container->gadman->clients; l; l = l->next)
+   for (l = rects; l; l = l->next)
      {
        /* expand right */
-       E_Gadman_Client *gmc;
-
-       gmc = l->data;
-       if ((gmc->zone != bd->zone)) continue;
+       E_Maximize_Rect *rect;
 
-       if ((gmc->x < cx2) && (gmc->x >= (bx + bw)) &&
-           E_INTERSECTS(0, gmc->y, bd->zone->w, gmc->h, 0, by, bd->zone->w, 
bh))
+       rect = l->data;
+       if ((rect->x1 < cx2) && (rect->x1 >= (bx + bw)) &&
+           E_INTERSECTS(0, rect->y1, bd->zone->w, (rect->y2 - rect->y1), 0, 
by, bd->zone->w, bh))
          {
-            cx2 = gmc->x;
+            cx2 = rect->x1;
          }
      }
    bw = (cx2 - cx1);
-   for (l = bd->zone->container->gadman->clients; l; l = l->next)
+   for (l = rects; l; l = l->next)
      {
        /* expand down */
-       E_Gadman_Client *gmc;
-
-       gmc = l->data;
-       if ((gmc->zone != bd->zone)) continue;
+       E_Maximize_Rect *rect;
 
-       if ((gmc->y < cy2) && (gmc->y >= (by + bh)) &&
-           E_INTERSECTS(gmc->x, 0, gmc->w, bd->zone->h, bx, 0, bw, 
bd->zone->h))
+       rect = l->data;
+       if ((rect->y1 < cy2) && (rect->y1 >= (by + bh)) &&
+           E_INTERSECTS(rect->x1, 0, (rect->x2 - rect->x1), bd->zone->h, bx, 
0, bw, bd->zone->h))
          {
-            cy2 = gmc->y;
+            cy2 = rect->y1;
          }
      }
    bh = (cy2 - cy1);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_maximize.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- e_maximize.h        19 Jun 2005 14:59:41 -0000      1.2
+++ e_maximize.h        19 Jun 2005 17:13:37 -0000      1.3
@@ -7,7 +7,9 @@
 #define E_MAXIMIZE_H
 
 void e_maximize_border_gadman_fit(E_Border *bd, int *x1, int *y1, int *x2, int 
*y2);
+void e_maximize_border_dock_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);
+void e_maximize_border_border_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