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