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_config.c e_container.c 
        e_hints.c e_hints.h e_int_border_menu.c e_int_config_modules.c 
        e_int_config_startup.c e_int_config_window_manipulation.c 
        e_int_shelf_config.c 


Log Message:
Clean up maximization, there is only one unmaximize function now. Think
this code can do more advanced stuff than the previous code.

The logic is that if the window is first maximized vertically, then
horizontally it should equal that both directions are maximized at once.

unmaximize can only be done in directions already maximized.

The code works, but hasn't been thorougly tested. Please report any errors
to me, and I will fix them!


===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_actions.c,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -3 -r1.60 -r1.61
--- e_actions.c 3 Jun 2006 10:19:11 -0000       1.60
+++ e_actions.c 7 Jun 2006 21:42:12 -0000       1.61
@@ -367,63 +367,60 @@
        E_Border *bd;
        
        bd = (E_Border *)obj;
-       /*if (bd->maximized) e_border_unmaximize(bd);*/
-       if ((bd->maximized != E_MAXIMIZE_NONE) &&
-           (bd->maximized != E_MAXIMIZE_VERTICAL) &&
-           (bd->maximized != E_MAXIMIZE_HORIZONTAL))
+       if ((bd->maximized & E_MAXIMIZE_TYPE) != E_MAXIMIZE_NONE)
          {
             if (!params)
-              e_border_unmaximize(bd);
+              e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
             else
               {
-                 if (!strcmp(params, "vertical"))
-                   e_border_unmaximize_vh(bd, E_MAXIMIZE_VERTICAL);
-                 else if  (!strcmp(params, "horizontal"))
-                   e_border_unmaximize_vh(bd, E_MAXIMIZE_HORIZONTAL);
+                 char s1[11], s2[11];
+
+                 /* FIXME: Move this to a parser func which returns an 
E_Maximize */
+                 if (sscanf(params, "%20s %20s", s1, s2) == 2)
+                   {
+                      if (!strcmp(s2, "vertical"))
+                        e_border_unmaximize(bd, E_MAXIMIZE_VERTICAL);
+                      else if (!strcmp(s2, "horizontal"))
+                        e_border_unmaximize(bd, E_MAXIMIZE_HORIZONTAL);
+                      else
+                        e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
+                   }
                  else
-                   e_border_unmaximize(bd);
+                   e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
               }
          }
        else
          {
-            if (!bd->maximized)
-              {
-                 if (!params)
-                   e_border_maximize(bd, e_config->maximize_policy);
-                 else
-                   {
-                      if (!strcmp(params, "fullscreen")) e_border_maximize(bd, 
E_MAXIMIZE_FULLSCREEN);
-                      else if (!strcmp(params, "smart")) e_border_maximize(bd, 
E_MAXIMIZE_SMART);
-                      else if (!strcmp(params, "expand")) 
e_border_maximize(bd, E_MAXIMIZE_EXPAND);
-                      else if (!strcmp(params, "fill")) e_border_maximize(bd, 
E_MAXIMIZE_FILL);
-                      else if (!strcmp(params, "vertical")) 
e_border_maximize(bd, E_MAXIMIZE_VERTICAL);
-                      else if (!strcmp(params, "horizontal")) 
e_border_maximize(bd, E_MAXIMIZE_HORIZONTAL);
-                      else e_border_maximize(bd, e_config->maximize_policy);
-                   }
-              }
+            if (!params)
+              e_border_maximize(bd, e_config->maximize_policy);
             else
               {
-                 if (!params)
-                   e_border_maximize( bd, e_config->maximize_policy);
-                 else
+                 char s1[32], s2[32];
+                 E_Maximize max;
+                 int ret;
+
+                 /* FIXME: Move this to a parser func which returns an 
E_Maximize */
+                 max = (e_config->maximize_policy & E_MAXIMIZE_DIRECTION);
+                 ret = sscanf(params, "%20s %20s", s1, s2);
+                 if (ret == 2)
                    {
-                      if (!strcmp(params, "vertical"))
-                        {
-                           if (bd->maximized == E_MAXIMIZE_VERTICAL)
-                             e_border_unmaximize_vh(bd, E_MAXIMIZE_VERTICAL);
-                           else
-                             e_border_maximize(bd, E_MAXIMIZE_VERTICAL);
-                        }
-                      else if (!strcmp(params, "horizontal"))
-                        {
-                           if (bd->maximized == E_MAXIMIZE_HORIZONTAL)
-                             e_border_unmaximize_vh(bd, E_MAXIMIZE_HORIZONTAL);
-                           else
-                             e_border_maximize(bd, E_MAXIMIZE_HORIZONTAL);
-                        }
+                      if (!strcmp(s2, "horizontal"))
+                        max = E_MAXIMIZE_HORIZONTAL;
+                      else if (!strcmp(s2, "vertical"))
+                        max = E_MAXIMIZE_VERTICAL;
                       else
-                        e_border_maximize(bd, e_config->maximize_policy);
+                        max = E_MAXIMIZE_BOTH;
                    }
+                 if (ret > 0)
+                   {
+                      if (!strcmp(s1, "fullscreen")) e_border_maximize(bd, 
E_MAXIMIZE_FULLSCREEN | max);
+                      else if (!strcmp(s1, "smart")) e_border_maximize(bd, 
E_MAXIMIZE_SMART | max);
+                      else if (!strcmp(s1, "expand")) e_border_maximize(bd, 
E_MAXIMIZE_EXPAND | max);
+                      else if (!strcmp(s1, "fill")) e_border_maximize(bd, 
E_MAXIMIZE_FILL | max);
+                      else e_border_maximize(bd, (e_config->maximize_policy & 
E_MAXIMIZE_TYPE) | max);
+                   }
+                 else
+                   e_border_maximize(bd, e_config->maximize_policy);
               }
          }
      }
@@ -445,20 +442,33 @@
        bd = (E_Border *)obj;
        if (params)
          {
-            int v;
-            char buf[32];
+            E_Maximize max;
+            int v, ret;
+            char s1[32], s2[32];
             
-            if (sscanf(params, "%i %20s", &v, buf) == 2)
+            max = (e_config->maximize_policy & E_MAXIMIZE_DIRECTION);
+            ret = sscanf(params, "%i %20s %20s", &v, s1, s2);
+            if (ret == 3)
+              {
+                 if (!strcmp(s2, "horizontal"))
+                   max = E_MAXIMIZE_HORIZONTAL;
+                 else if (!strcmp(s2, "vertical"))
+                   max = E_MAXIMIZE_VERTICAL;
+                 else
+                   max = E_MAXIMIZE_BOTH;
+              }
+            if (ret > 1);
               {
                  if (v == 1)
                    {
-                      if (!strcmp(buf, "fullscreen")) e_border_maximize(bd, 
E_MAXIMIZE_FULLSCREEN);
-                      else if (!strcmp(buf, "smart")) e_border_maximize(bd, 
E_MAXIMIZE_SMART);
-                      else if (!strcmp(buf, "expand")) e_border_maximize(bd, 
E_MAXIMIZE_EXPAND);
-                      else if (!strcmp(buf, "fill")) e_border_maximize(bd, 
E_MAXIMIZE_FILL);
+                      if (!strcmp(s1, "fullscreen")) e_border_maximize(bd, 
E_MAXIMIZE_FULLSCREEN | max);
+                      else if (!strcmp(s1, "smart")) e_border_maximize(bd, 
E_MAXIMIZE_SMART | max);
+                      else if (!strcmp(s1, "expand")) e_border_maximize(bd, 
E_MAXIMIZE_EXPAND | max);
+                      else if (!strcmp(s1, "fill")) e_border_maximize(bd, 
E_MAXIMIZE_FILL | max);
+                      else e_border_maximize(bd, (e_config->maximize_policy & 
E_MAXIMIZE_TYPE) | max);
                    }
                  else if (v == 0)
-                   e_border_unmaximize(bd);
+                   e_border_unmaximize(bd, max);
               }
          }
      }
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.491
retrieving revision 1.492
diff -u -3 -r1.491 -r1.492
--- e_border.c  7 Jun 2006 18:12:46 -0000       1.491
+++ e_border.c  7 Jun 2006 21:42:12 -0000       1.492
@@ -661,7 +661,7 @@
    E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
 
    if ((bd->fullscreen) || 
-          ((bd->maximized == E_MAXIMIZE_FULLSCREEN) && 
(!e_config->allow_manip))) 
+       (((bd->maximized & E_MAXIMIZE_TYPE) == E_MAXIMIZE_FULLSCREEN) && 
(!e_config->allow_manip))) 
           return;
    if (bd->new_client)
      {
@@ -714,7 +714,7 @@
    E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
 
    if ((bd->shaded) || (bd->shading) || (bd->fullscreen) ||
-       ((bd->maximized == E_MAXIMIZE_FULLSCREEN) && (!e_config->allow_manip)))
+       (((bd->maximized & E_MAXIMIZE_TYPE) == E_MAXIMIZE_FULLSCREEN) && 
(!e_config->allow_manip)))
      return;
    if (bd->new_client)
      {
@@ -772,7 +772,7 @@
    E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
 
    if ((bd->fullscreen) || 
-          ((bd->maximized == E_MAXIMIZE_FULLSCREEN) && 
(!e_config->allow_manip))) 
+       (((bd->maximized & E_MAXIMIZE_TYPE) == E_MAXIMIZE_FULLSCREEN) && 
(!e_config->allow_manip))) 
           return;
    if (bd->new_client)
      {
@@ -1331,8 +1331,8 @@
 
    E_OBJECT_CHECK(bd);
    E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
-   if ((bd->fullscreen) || ((bd->maximized) && (!e_config->allow_manip)) 
-        || (bd->shading)) return;
+   if ((bd->fullscreen) || ((bd->maximized) && (!e_config->allow_manip)) ||
+       (bd->shading)) return;
    if ((bd->client.border.name) && 
        (!strcmp("borderless", bd->client.border.name))) return;
    if (!bd->shaded)
@@ -1419,8 +1419,8 @@
 
    E_OBJECT_CHECK(bd);
    E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
-   if ((bd->fullscreen) || ((bd->maximized) && (!e_config->allow_manip)) 
-        || (bd->shading)) return;
+   if ((bd->fullscreen) || ((bd->maximized) && (!e_config->allow_manip)) ||
+       (bd->shading)) return;
    if (bd->shaded)
      {
 //     printf("UNSHADE!\n");
@@ -1525,40 +1525,49 @@
    E_OBJECT_CHECK(bd);
    E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
 
+   if (!(max & E_MAXIMIZE_DIRECTION))
+     {
+       printf("BUG: Maximize call without direction!\n");
+       return;
+     }
+   printf("%d %d\n", max & E_MAXIMIZE_HORIZONTAL, max & E_MAXIMIZE_VERTICAL);
+
    if ((bd->shaded) || (bd->shading)) return;
    if (bd->fullscreen)
      e_border_unfullscreen(bd);
-   if (bd->maximized == E_MAXIMIZE_VERTICAL && max == E_MAXIMIZE_VERTICAL)
-     ; // ignore. we are already maximized vertical.
-   else if (bd->maximized == E_MAXIMIZE_HORIZONTAL && max == 
E_MAXIMIZE_HORIZONTAL)
-     ; // ignore. we are already maximized horizontaly.
-   else if (( bd->maximized == E_MAXIMIZE_NONE ||
-             bd->maximized == E_MAXIMIZE_VERTICAL ||
-             bd->maximized == E_MAXIMIZE_HORIZONTAL))
+   /* Only allow changes in vertical/ horisontal maximization */
+   if (((bd->maximized & E_MAXIMIZE_DIRECTION) == (max & 
E_MAXIMIZE_DIRECTION)) || 
+       ((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH)) return;
+   if (bd->new_client)
+     {
+       bd->need_maximize = 1;
+       return;
+     }
+
      {
        int x1, y1, x2, y2;
        int w, h;
 
-       if (bd->new_client)
+       if (!(bd->maximized & E_MAXIMIZE_HORIZONTAL))
          {
-            bd->need_maximize = 1;
-            return;
+            /* Horisontal hasn't been set */
+            bd->saved.x = bd->x; 
+            bd->saved.w = bd->w; 
          }
-       
-       if (!bd->maximized) // E_MAXIMIZE_NONE
+       if (!(bd->maximized & E_MAXIMIZE_VERTICAL))
          {
-            bd->saved.x = bd->x; 
+            /* Vertical hasn't been set */
             bd->saved.y = bd->y; 
-            bd->saved.w = bd->w; 
             bd->saved.h = bd->h;
          }
        e_hints_window_size_set(bd);
 
        e_border_raise(bd);
-       switch (max)
+       switch (max & E_MAXIMIZE_TYPE)
          {
           case E_MAXIMIZE_NONE:
              /* Ignore */
+             max = E_MAXIMIZE_NONE;
              break;
           case E_MAXIMIZE_FULLSCREEN:
              if (bd->bg_object)
@@ -1590,6 +1599,8 @@
              /* center y-direction */
              y1 = bd->zone->y + (bd->zone->h - h) / 2;
              e_border_move_resize(bd, x1, y1, w, h);
+             /* FULLSCREEN doesn't work with VERTICAL/HORIZONTAL */
+             max |= E_MAXIMIZE_BOTH;
              break;
           case E_MAXIMIZE_SMART:
           case E_MAXIMIZE_EXPAND:
@@ -1607,7 +1618,12 @@
              w = x2 - x1;
              h = y2 - y1;
              e_border_resize_limit(bd, &w, &h);
-             e_border_move_resize(bd, x1, y1, w, h);
+             if ((max & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH)
+               e_border_move_resize(bd, x1, y1, w, h);
+             else if ((max & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL)
+               e_border_move_resize(bd, bd->x, y1, bd->w, h);
+             else if ((max & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL)
+               e_border_move_resize(bd, x1, bd->y, w, bd->h);
              edje_object_signal_emit(bd->bg_object, "maximize", "");
              break;
           case E_MAXIMIZE_FILL:
@@ -1625,156 +1641,55 @@
              w = x2 - x1;
              h = y2 - y1;
              e_border_resize_limit(bd, &w, &h);
-             e_border_move_resize(bd, x1, y1, w, h);
-             break;
-           case E_MAXIMIZE_VERTICAL:
-             x1 = bd->x;
-             y1 = bd->zone->y;
-             x2 = bd->x + bd->w;
-             y2 = bd->zone->y + bd->zone->h;
-
-             /* walk through all gadgets */
-             e_maximize_border_gadman_fit(bd, &x1, &y1, &x2, &y2);
-
-             /* walk through docks and toolbars */
-             //e_maximize_border_dock_fit(bd, &x1, &y1, &x2, &y2);
-
-             /* walk through all windows */
-             //e_maximize_border_border_fill(bd, &x1, &y1, &x2, &y2);
-
-             x1 = bd->x;
-             w = bd->w;
-             h = y2 - y1;
-             e_border_resize_limit(bd,&w,&h);
-             e_border_move_resize(bd,x1,y1,w,h);
-             break;
-           case E_MAXIMIZE_HORIZONTAL:
-             x1 = bd->zone->x;
-             y1 = bd->y;
-             x2 = bd->zone->x + bd->zone->w;
-             y2 = bd->y + bd->h;
-
-             /* walk through all gadgets */
-             e_maximize_border_gadman_fit(bd, &x1, &y1, &x2, &y2);
-
-             /* walk through docks and toolbars */
-             //e_maximize_border_dock_fit(bd, &x1, &y1, &x2, &y2);
-
-             /* walk through all windows */
-             //e_maximize_border_border_fill(bd, &x1, &y1, &x2, &y2);
-
-             y1 = bd->y;
-             h = bd->h;
-             w = x2 - x1;
-             e_border_resize_limit(bd,&w,&h);
-             e_border_move_resize(bd,x1,y1,w,h);
+             if ((max & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH)
+               e_border_move_resize(bd, x1, y1, w, h);
+             else if ((max & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_VERTICAL)
+               e_border_move_resize(bd, bd->x, y1, bd->w, h);
+             else if ((max & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL)
+               e_border_move_resize(bd, x1, bd->y, w, bd->h);
              break;
          }
-       if ((bd->maximized == E_MAXIMIZE_HORIZONTAL && max == 
E_MAXIMIZE_VERTICAL) ||
-           (bd->maximized == E_MAXIMIZE_VERTICAL && max == 
E_MAXIMIZE_HORIZONTAL))
-         bd->maximized = e_config->maximize_policy;
-       else
-         bd->maximized = max;
+       /* Remove previous type */
+       bd->maximized &= ~E_MAXIMIZE_TYPE;
+       /* Add new maximization. It must be added, so that VERTICAL + 
HORIZONTAL == BOTH */
+       bd->maximized |= max;
 
-       if (bd->maximized)
-         e_hints_window_maximized_set(bd, 1);
-       else
-         e_hints_window_maximized_set(bd, 0);
+       e_hints_window_maximized_set(bd, bd->maximized & E_MAXIMIZE_HORIZONTAL,
+                                    bd->maximized & E_MAXIMIZE_VERTICAL);
 
      }
 }
 
 EAPI void
-e_border_unmaximize_vh(E_Border *bd, E_Maximize max)
+e_border_unmaximize(E_Border *bd, E_Maximize max)
 {
    E_OBJECT_CHECK(bd);
    E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
-   if ((bd->shaded) || (bd->shading)) return;
-   if ((max != E_MAXIMIZE_VERTICAL) && (max != E_MAXIMIZE_HORIZONTAL)) return;
-   if ((bd->lock_user_maximize) || (!bd->maximized)) return;
-
-   switch (bd->maximized)
+   if (!(max & E_MAXIMIZE_DIRECTION))
      {
-      case E_MAXIMIZE_NONE:
-      case E_MAXIMIZE_FULLSCREEN:
-        /* Ignore */
-        break;
-      case E_MAXIMIZE_SMART:
-      case E_MAXIMIZE_EXPAND:
-      case E_MAXIMIZE_FILL:
-        if (max == E_MAXIMIZE_VERTICAL)
-          {
-             bd->maximized = E_MAXIMIZE_NONE;
-             e_hints_window_maximized_set(bd, 0);
-
-             bd->maximized = E_MAXIMIZE_HORIZONTAL;
-             e_hints_window_maximized_set(bd, 1);
-
-             e_border_move_resize(bd, bd->x, bd->saved.y, bd->w, bd->saved.h);
-             e_hints_window_size_unset(bd);
-
-             //edje_object_signal_emit(bd->bg_object, "unmaximize", "");
-          }
-        if (max == E_MAXIMIZE_HORIZONTAL)
-          {
-             bd->maximized = E_MAXIMIZE_NONE;
-             e_hints_window_maximized_set(bd, 0);
-
-             bd->maximized = E_MAXIMIZE_VERTICAL;
-             e_hints_window_maximized_set(bd, 1);
-
-             e_border_move_resize(bd, bd->saved.x, bd->y, bd->saved.w, bd->h);
-             e_hints_window_size_unset(bd);
-
-             //edje_object_signal_emit(bd->bg_object, "unmaximize", "");
-          }
-        break;
-      case E_MAXIMIZE_VERTICAL:
-        if (max == E_MAXIMIZE_HORIZONTAL)
-          ; // do nothing in this case
-        if (max == E_MAXIMIZE_VERTICAL)
-          {
-             bd->maximized = E_MAXIMIZE_NONE;
-             e_hints_window_maximized_set(bd, 0);
-
-             e_border_move_resize(bd, bd->x, bd->saved.y, bd->w, bd->saved.h);
-             bd->saved.x = bd->saved.y = bd->saved.w = bd->saved.h = 0;
-             e_hints_window_size_unset(bd);
-
-             edje_object_signal_emit(bd->bg_object, "unmaximize", "");
-          }
-        break;
-      case E_MAXIMIZE_HORIZONTAL:
-        if (max == E_MAXIMIZE_VERTICAL)
-          ; // do nothing in this case.
-        if (max == E_MAXIMIZE_HORIZONTAL)
-          {
-             bd->maximized = E_MAXIMIZE_NONE;
-             e_hints_window_maximized_set(bd, 0);
-
-             e_border_move_resize(bd, bd->saved.x, bd->y, bd->saved.w, bd->h);
-             bd->saved.x = bd->saved.y = bd->saved.w = bd->saved.h = 0;
-             e_hints_window_size_unset(bd);
-
-             edje_object_signal_emit(bd->bg_object, "unmaximize", "");
-          }
-        break;
+       printf("BUG: Unmaximize call without direction!\n");
+       return;
      }
-}
 
-EAPI void
-e_border_unmaximize(E_Border *bd)
-{
-   E_OBJECT_CHECK(bd);
-   E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
    if ((bd->shaded) || (bd->shading)) return;
-   if (bd->maximized)
+   /* Remove directions not used */
+   max &= (bd->maximized & E_MAXIMIZE_DIRECTION);
+   /* Can only remove existing maximization directions */
+   if (!max) return;
+   if (bd->maximized & E_MAXIMIZE_TYPE)
      {
 //     printf("UNMAXIMIZE!!\n");
+       E_Maximize dir;
+       int signal;
+
+       /* Get the resulting directions */
+       dir = (bd->maximized & E_MAXIMIZE_DIRECTION);
+       dir &= ~max;
+
        bd->need_maximize = 0;
-       e_hints_window_maximized_set(bd, 0);
 
-       switch (bd->maximized)
+       signal = 1;
+       switch (bd->maximized & E_MAXIMIZE_TYPE)
          {
           case E_MAXIMIZE_NONE:
              /* Ignore */
@@ -1785,6 +1700,7 @@
                   Evas_Coord cx, cy, cw, ch;
 
                   edje_object_signal_emit(bd->bg_object, 
"unmaximize,fullscreen", "");
+                  signal = 0;
                   edje_object_message_signal_process(bd->bg_object);
 
                   evas_object_resize(bd->bg_object, 1000, 1000);
@@ -1801,6 +1717,7 @@
                                            bd->client_inset.l, 
bd->client_inset.r,
                                            bd->client_inset.t, 
bd->client_inset.b);
                }
+             dir = 0;
              break;
           case E_MAXIMIZE_SMART:
              /* Don't have to do anything special */
@@ -1818,13 +1735,47 @@
              /*Ignore*/
             break;
          }
-       bd->maximized = E_MAXIMIZE_NONE;
-
-       e_border_move_resize(bd, bd->saved.x, bd->saved.y, bd->saved.w, 
bd->saved.h);
-       bd->saved.x = bd->saved.y = bd->saved.w = bd->saved.h = 0;
-       e_hints_window_size_unset(bd);
+       if (dir & E_MAXIMIZE_HORIZONTAL)
+         {
+            /* Remove vertical */
+            signal = 0;
+            bd->maximized &= ~E_MAXIMIZE_VERTICAL;
+            e_border_move_resize(bd, bd->x, bd->saved.y, bd->w, bd->saved.h);
+            bd->saved.y = bd->saved.h = 0;
+            e_hints_window_size_set(bd);
+         }
+       else if (dir & E_MAXIMIZE_VERTICAL)
+         {
+            /* Remove horisontal */
+            signal = 0;
+            bd->maximized &= ~E_MAXIMIZE_HORIZONTAL;
+            e_border_move_resize(bd, bd->saved.x, bd->y, bd->saved.w, bd->h);
+            bd->saved.x = bd->saved.w = 0;
+            e_hints_window_size_set(bd);
+         }
+       else
+         {
+            int x, y, w, h;
+            /* Maybe some of the sizes has already been set to 0 */
+            if (bd->saved.x) x = bd->saved.x;
+            else x = bd->x;
+            if (bd->saved.y) y = bd->saved.y;
+            else y = bd->y;
+            if (bd->saved.w) w = bd->saved.w;
+            else w = bd->w;
+            if (bd->saved.h) h = bd->saved.h;
+            else h = bd->h;
+
+            bd->maximized = E_MAXIMIZE_NONE;
+            e_border_move_resize(bd, x, y, w, h);
+            bd->saved.x = bd->saved.y = bd->saved.w = bd->saved.h = 0;
+            e_hints_window_size_unset(bd);
+         }
+       e_hints_window_maximized_set(bd, bd->maximized & E_MAXIMIZE_HORIZONTAL,
+                                    bd->maximized & E_MAXIMIZE_VERTICAL);
 
-       edje_object_signal_emit(bd->bg_object, "unmaximize", "");
+       if (signal)
+         edje_object_signal_emit(bd->bg_object, "unmaximize", "");
      }
 }
 
@@ -1836,7 +1787,7 @@
 
    if ((bd->shaded) || (bd->shading)) return;
    if (bd->maximized)
-     e_border_unmaximize(bd);
+     e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
    if (bd->new_client)
      {
        bd->need_fullscreen = 1;
@@ -3821,10 +3772,10 @@
    bd = e_border_find_by_client_window(e->win);
    if (!bd) return 1;
 
-   if ((bd->shaded) || (bd->shading) 
-        || ((bd->maximized == E_MAXIMIZE_FULLSCREEN) && 
(!e_config->allow_manip)) 
-        || (bd->fullscreen) || (bd->moving) 
-        || (bd->resize_mode != RESIZE_NONE))
+   if ((bd->shaded) || (bd->shading) ||
+       (((bd->maximized & E_MAXIMIZE_TYPE) == E_MAXIMIZE_FULLSCREEN) && 
(!e_config->allow_manip)) ||
+       (bd->fullscreen) || (bd->moving) ||
+       (bd->resize_mode != RESIZE_NONE))
      return 1;
 
    if ((e->button >= 1) && (e->button <= 3))
@@ -5199,9 +5150,9 @@
               }
             if (bd->shaded)
               edje_object_signal_emit(bd->bg_object, "shaded", "");
-            if (bd->maximized == E_MAXIMIZE_FULLSCREEN)
+            if ((bd->maximized & E_MAXIMIZE_TYPE) == E_MAXIMIZE_FULLSCREEN)
               edje_object_signal_emit(bd->bg_object, "maximize,fullscreen", 
"");
-            else if (bd->maximized > E_MAXIMIZE_FULLSCREEN)
+            else if ((bd->maximized & E_MAXIMIZE_TYPE) != E_MAXIMIZE_NONE)
               edje_object_signal_emit(bd->bg_object, "maximize", "");
             if (bd->fullscreen)
               edje_object_signal_emit(bd->bg_object, "fullscreen", "");
@@ -6412,8 +6363,8 @@
    if (!bd->lock_user_stacking)
      e_border_raise(bd);
    if ((bd->shaded) || (bd->shading) ||
-        ((bd->maximized == E_MAXIMIZE_FULLSCREEN) && (!e_config->allow_manip)) 
-        || (bd->fullscreen) || (bd->lock_user_size))
+       (((bd->maximized & E_MAXIMIZE_TYPE) == E_MAXIMIZE_FULLSCREEN) && 
(!e_config->allow_manip)) ||
+       (bd->fullscreen) || (bd->lock_user_size))
      return 0;
 
    if ((bd->client.icccm.base_w >= 0) &&
@@ -6513,8 +6464,8 @@
 {
    if (!bd->lock_user_stacking)
      e_border_raise(bd);
-   if (((bd->maximized == E_MAXIMIZE_FULLSCREEN) && (!e_config->allow_manip))
-          || (bd->fullscreen) || (bd->lock_user_location))
+   if ((((bd->maximized & E_MAXIMIZE_TYPE) == E_MAXIMIZE_FULLSCREEN) && 
(!e_config->allow_manip)) ||
+       (bd->fullscreen) || (bd->lock_user_location))
      return 0;
 
    if (grabbed)
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_border.h,v
retrieving revision 1.136
retrieving revision 1.137
diff -u -3 -r1.136 -r1.137
--- e_border.h  7 Jun 2006 18:12:46 -0000       1.136
+++ e_border.h  7 Jun 2006 21:42:12 -0000       1.137
@@ -43,13 +43,16 @@
 
 typedef enum _E_Maximize
 {
-   E_MAXIMIZE_NONE,
-   E_MAXIMIZE_FULLSCREEN,
-   E_MAXIMIZE_SMART,
-   E_MAXIMIZE_EXPAND,
-   E_MAXIMIZE_FILL,
-   E_MAXIMIZE_VERTICAL,
-   E_MAXIMIZE_HORIZONTAL
+   E_MAXIMIZE_NONE       = 0x00000000,
+   E_MAXIMIZE_FULLSCREEN = 0x00000001,
+   E_MAXIMIZE_SMART      = 0x00000002,
+   E_MAXIMIZE_EXPAND     = 0x00000003,
+   E_MAXIMIZE_FILL       = 0x00000004,
+   E_MAXIMIZE_TYPE       = 0x0000000f,
+   E_MAXIMIZE_VERTICAL   = 0x00000010,
+   E_MAXIMIZE_HORIZONTAL = 0x00000020,
+   E_MAXIMIZE_BOTH       = 0x00000030,
+   E_MAXIMIZE_DIRECTION  = 0x000000f0
 } E_Maximize;
 
 typedef enum _E_Fullscreen
@@ -523,8 +526,7 @@
 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, E_Maximize max);
-EAPI void      e_border_unmaximize(E_Border *bd);
-EAPI void      e_border_unmaximize_vh(E_Border *bd, E_Maximize max);
+EAPI void      e_border_unmaximize(E_Border *bd, E_Maximize max);
 EAPI void      e_border_fullscreen(E_Border *bd, E_Fullscreen policy);
 EAPI void      e_border_unfullscreen(E_Border *bd);
 EAPI void      e_border_iconify(E_Border *bd);
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_config.c,v
retrieving revision 1.176
retrieving revision 1.177
diff -u -3 -r1.176 -r1.177
--- e_config.c  5 Jun 2006 10:50:33 -0000       1.176
+++ e_config.c  7 Jun 2006 21:42:12 -0000       1.177
@@ -573,7 +573,7 @@
    e_config->winlist_pos_min_h = 0;
    e_config->winlist_pos_max_w = 320;
    e_config->winlist_pos_max_h = 320;
-   e_config->maximize_policy = E_MAXIMIZE_SMART;
+   e_config->maximize_policy = E_MAXIMIZE_SMART | E_MAXIMIZE_BOTH;
    e_config->allow_manip = 0;
    e_config->kill_if_close_not_possible = 1;
    e_config->kill_process = 1;
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_container.c,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -3 -r1.99 -r1.100
--- e_container.c       10 May 2006 14:54:59 -0000      1.99
+++ e_container.c       7 Jun 2006 21:42:12 -0000       1.100
@@ -1218,7 +1218,7 @@
                  E_Maximize max;
                  
                  max = bd->maximized;
-                 e_border_unmaximize(bd);
+                 e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
                  e_border_maximize(bd, max);
               }
             else
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_hints.c,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -3 -r1.83 -r1.84
--- e_hints.c   10 Jan 2006 04:23:43 -0000      1.83
+++ e_hints.c   7 Jun 2006 21:42:12 -0000       1.84
@@ -454,7 +454,27 @@
             e_border_maximize(bd, e_config->maximize_policy);
          }
        else
-         e_hints_window_maximized_set(bd, 0);
+         e_hints_window_maximized_set(bd, 0, 0);
+     }
+   else if (bd->client.netwm.state.maximized_h)
+     {
+       if (!bd->lock_client_maximize)
+         {
+            e_hints_window_size_get(bd);
+            e_border_maximize(bd, (e_config->maximize_policy & 
E_MAXIMIZE_TYPE) | E_MAXIMIZE_HORIZONTAL);
+         }
+       else
+         e_hints_window_maximized_set(bd, 0, 0);
+     }
+   else if (bd->client.netwm.state.maximized_v)
+     {
+       if (!bd->lock_client_maximize)
+         {
+            e_hints_window_size_get(bd);
+            e_border_maximize(bd, (e_config->maximize_policy & 
E_MAXIMIZE_TYPE) | E_MAXIMIZE_VERTICAL);
+         }
+       else
+         e_hints_window_maximized_set(bd, 0, 0);
      }
    if (bd->client.netwm.state.fullscreen)
      {
@@ -607,83 +627,43 @@
         break;
       case ECORE_X_WINDOW_STATE_MAXIMIZED_VERT:
         if (bd->lock_client_maximize) return;
-        /* We might end up in a state where maximized_h or maximized_v is
-         * set. This doesn't matter, because E only checks if both are
-         * set for maximization.
-         */
-        changed = 0;
         switch (action)
           {
            case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
-              if (bd->client.netwm.state.maximized_v)
-                {
-                   bd->client.netwm.state.maximized_v = 0;
-                   changed = 1;
-                }
+              if (bd->maximized & E_MAXIMIZE_VERTICAL)
+                e_border_unmaximize(bd, E_MAXIMIZE_VERTICAL);
               break;
            case ECORE_X_WINDOW_STATE_ACTION_ADD:
-              if (!bd->client.netwm.state.maximized_v)
-                {
-                   bd->client.netwm.state.maximized_v = 1;
-                   changed = 1;
-                }
+              if (!(bd->maximized & E_MAXIMIZE_VERTICAL))
+                e_border_maximize(bd, (e_config->maximize_policy & 
E_MAXIMIZE_TYPE) | E_MAXIMIZE_VERTICAL);
               break;
            case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
-              bd->client.netwm.state.maximized_v = 
!bd->client.netwm.state.maximized_v;
-              changed = 1;
+              if (bd->maximized & E_MAXIMIZE_VERTICAL)
+                e_border_unmaximize(bd, E_MAXIMIZE_VERTICAL);
+              else
+                e_border_maximize(bd, (e_config->maximize_policy & 
E_MAXIMIZE_TYPE) | E_MAXIMIZE_VERTICAL);
               break;
           }
-        if (changed)
-          {
-             bd->client.netwm.update.state = 1;
-             bd->changed = 1;
-             if ((bd->client.netwm.state.maximized_v) &&
-                 (bd->client.netwm.state.maximized_h))
-               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);
-          }
         break;
       case ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ:
         if (bd->lock_client_maximize) return;
-        /* We might end up in a state where maximized_h or maximized_v is
-         * set. This doesn't matter, because E only checks if both are
-         * set for maximization.
-         */
-        changed = 0;
         switch (action)
           {
            case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
-              if (bd->client.netwm.state.maximized_h)
-                {
-                   bd->client.netwm.state.maximized_h = 0;
-                   changed = 1;
-                }
+              if (bd->maximized & E_MAXIMIZE_HORIZONTAL)
+                e_border_unmaximize(bd, E_MAXIMIZE_HORIZONTAL);
               break;
            case ECORE_X_WINDOW_STATE_ACTION_ADD:
-              if (!bd->client.netwm.state.maximized_h)
-                {
-                   bd->client.netwm.state.maximized_h = 1;
-                   changed = 1;
-                }
+              if (!(bd->maximized & E_MAXIMIZE_HORIZONTAL))
+                e_border_maximize(bd, (e_config->maximize_policy & 
E_MAXIMIZE_TYPE) | E_MAXIMIZE_HORIZONTAL);
               break;
            case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
-              bd->client.netwm.state.maximized_h = 
!bd->client.netwm.state.maximized_h;
-              changed = 1;
+              if (bd->maximized & E_MAXIMIZE_HORIZONTAL)
+                e_border_unmaximize(bd, E_MAXIMIZE_HORIZONTAL);
+              else
+                e_border_maximize(bd, (e_config->maximize_policy & 
E_MAXIMIZE_TYPE) | E_MAXIMIZE_HORIZONTAL);
               break;
           }
-        if (changed)
-          {
-             bd->client.netwm.update.state = 1;
-             bd->changed = 1;
-             if ((bd->client.netwm.state.maximized_v) &&
-                 (bd->client.netwm.state.maximized_h))
-               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);
-          }
         break;
       case ECORE_X_WINDOW_STATE_SHADED:
         if (bd->lock_client_shade) return;
@@ -1022,85 +1002,33 @@
 }
 
 EAPI void
-e_hints_window_maximized_set(E_Border *bd, int on)
+e_hints_window_maximized_set(E_Border *bd, int horizontal, int vertical)
 {
 
-  if( on )
-  {
-    if( bd->maximized == E_MAXIMIZE_VERTICAL )
-    {
-      if( !bd->client.netwm.state.maximized_v )
-      {
-       bd->client.netwm.update.state = 1;
-       bd->client.netwm.state.maximized_v = 1;
-       bd->changed = 1;
-      }
-    }
-    else if( bd->maximized == E_MAXIMIZE_HORIZONTAL )
-    {
-      if( !bd->client.netwm.state.maximized_h )
-      {
-       bd->client.netwm.update.state = 1;
-       bd->client.netwm.state.maximized_h = 1;
-       bd->changed = 1;
-      }
-    }
-    else
-    {
-      if( !bd->client.netwm.state.maximized_v )
-      {
-       bd->client.netwm.update.state = 1;
-       bd->client.netwm.state.maximized_v = 1;
-       bd->changed = 1;
-      }
-      if( !bd->client.netwm.state.maximized_h )
-      {
-       bd->client.netwm.update.state = 1;
-       bd->client.netwm.state.maximized_h = 1;
-       bd->changed = 1;
-      }
-    }
-  }
-  else
-  {
-    if( bd->client.netwm.state.maximized_v )
-    {
-      bd->client.netwm.update.state = 1;
-      bd->client.netwm.state.maximized_v = 0;
-      bd->changed = 1;
-    }
-    if( bd->client.netwm.state.maximized_h )
-    {
-      bd->client.netwm.update.state = 1;
-      bd->client.netwm.state.maximized_h = 0;
-      bd->changed = 1;
-    }
-  }
-
-   /*if ((!bd->client.netwm.state.maximized_v) && (on))
+   if ((horizontal) && (!bd->client.netwm.state.maximized_h))
      {
        bd->client.netwm.update.state = 1;
-       bd->client.netwm.state.maximized_v = 1;
+       bd->client.netwm.state.maximized_h = 1;
        bd->changed = 1;
      }
-   else if ((bd->client.netwm.state.maximized_v) && (!on))
+   else if ((!horizontal) && (bd->client.netwm.state.maximized_h))
      {
        bd->client.netwm.update.state = 1;
-       bd->client.netwm.state.maximized_v = 0;
+       bd->client.netwm.state.maximized_h = 0;
        bd->changed = 1;
      }
-   if ((!bd->client.netwm.state.maximized_h) && (on))
+   if ((vertical) && (!bd->client.netwm.state.maximized_v))
      {
        bd->client.netwm.update.state = 1;
-       bd->client.netwm.state.maximized_h = 1;
+       bd->client.netwm.state.maximized_v = 1;
        bd->changed = 1;
      }
-   else if ((bd->client.netwm.state.maximized_h) && (!on))
+   else if ((!vertical) && (bd->client.netwm.state.maximized_v))
      {
        bd->client.netwm.update.state = 1;
-       bd->client.netwm.state.maximized_h = 0;
+       bd->client.netwm.state.maximized_v = 0;
        bd->changed = 1;
-     }*/
+     }
 }
 
 EAPI void
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_hints.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- e_hints.h   7 Oct 2005 04:27:51 -0000       1.22
+++ e_hints.h   7 Jun 2006 21:42:13 -0000       1.23
@@ -35,7 +35,7 @@
 EAPI int  e_hints_window_size_get(E_Border *bd);
 
 EAPI void e_hints_window_shaded_set(E_Border *bd, int on);
-EAPI void e_hints_window_maximized_set(E_Border *bd, int on);
+EAPI void e_hints_window_maximized_set(E_Border *bd, int horizontal, int 
vertical);
 EAPI void e_hints_window_fullscreen_set(E_Border *bd, int on);
 EAPI void e_hints_window_sticky_set(E_Border *bd, int on);
 EAPI void e_hints_window_stacking_set(E_Border *bd, E_Stacking stacking);
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_border_menu.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- e_int_border_menu.c 5 Jun 2006 15:36:02 -0000       1.22
+++ e_int_border_menu.c 7 Jun 2006 21:42:13 -0000       1.23
@@ -83,20 +83,15 @@
    if ((!bd->lock_user_maximize) && (!bd->shaded) &&
        ((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150)))
    { 
-     int __fullmaximization = 0;
-
      m = e_menu_new();
      e_menu_category_set(m,"border/maximize");
      e_menu_category_data_set("border/maximize",bd);
      bd->border_maximize_menu = m;
 
      mi = e_menu_item_new(m);
-     e_menu_item_label_set(mi, _("Maximized"));
+     e_menu_item_label_set(mi, _("Maximize"));
      e_menu_item_check_set(mi, 1);
-     //e_menu_item_toggle_set(mi, (bd->maximized ? 1 : 0));
-     e_menu_item_toggle_set( mi, ( ( (__fullmaximization = bd->maximized &&
-                                       bd->maximized != E_MAXIMIZE_VERTICAL &&
-                                       bd->maximized != 
E_MAXIMIZE_HORIZONTAL)) ? 1 : 0 ));
+     e_menu_item_toggle_set(mi, (bd->maximized & E_MAXIMIZE_DIRECTION) == 
E_MAXIMIZE_BOTH);
      e_menu_item_callback_set(mi, _e_border_menu_cb_maximize, bd);
      e_menu_item_icon_edje_set(mi,
                                (char 
*)e_theme_edje_file_get("base/theme/borders",
@@ -104,13 +99,9 @@
                                "widgets/border/default/maximize");
 
      mi = e_menu_item_new(m);
-     e_menu_item_label_set(mi, _("Maximized vertically"));
+     e_menu_item_label_set(mi, _("Maximize vertically"));
      e_menu_item_check_set(mi, 1);
-     //e_menu_item_toggle_set(mi, (bd->maximized ? 1 : 0));
-     e_menu_item_toggle_set( mi, ( ( (bd->maximized &&
-                                     bd->maximized == E_MAXIMIZE_VERTICAL &&
-                                     bd->maximized != E_MAXIMIZE_HORIZONTAL) ||
-                                    __fullmaximization ) ? 1 : 0 ));
+     e_menu_item_toggle_set(mi, (bd->maximized & E_MAXIMIZE_VERTICAL));
      e_menu_item_callback_set(mi, _e_border_menu_cb_maximize_vertically, bd);
      e_menu_item_icon_edje_set(mi,
                                (char 
*)e_theme_edje_file_get("base/theme/borders",
@@ -118,13 +109,9 @@
                                "widgets/border/default/maximize");
 
      mi = e_menu_item_new(m);
-     e_menu_item_label_set(mi, _("Maximized horizontally"));
+     e_menu_item_label_set(mi, _("Maximize horizontally"));
      e_menu_item_check_set(mi, 1);
-     //e_menu_item_toggle_set(mi, (bd->maximized ? 1 : 0));
-     e_menu_item_toggle_set( mi, ( ( (bd->maximized &&
-                                     bd->maximized != E_MAXIMIZE_VERTICAL &&
-                                     bd->maximized == E_MAXIMIZE_HORIZONTAL) ||
-                                    __fullmaximization ) ? 1 : 0 ));
+     e_menu_item_toggle_set(mi, (bd->maximized & E_MAXIMIZE_HORIZONTAL));
      e_menu_item_callback_set(mi, _e_border_menu_cb_maximize_horizontally, bd);
      e_menu_item_icon_edje_set(mi,
                                (char 
*)e_theme_edje_file_get("base/theme/borders",
@@ -209,45 +196,6 @@
                                  "widgets/border/default/shade");
      }
 
-   /*if (!bd->lock_user_maximize)
-   {
-     mi = e_menu_item_new(m);
-     e_menu_item_separator_set(mi, 1);
-
-     mi = e_menu_item_new(m);
-     e_menu_item_label_set(mi, _("Maximized"));
-     e_menu_item_check_set(mi, 1);
-     e_menu_item_toggle_set(mi, (bd->maximized ? 1 : 0));
-     e_menu_item_callback_set(mi, _e_border_menu_cb_maximize, bd);
-     e_menu_item_icon_edje_set(mi,
-                               (char 
*)e_theme_edje_file_get("base/theme/borders",
-                                                             
"widgets/border/default/maximize"),
-                               "widgets/border/default/maximize");
-
-     mi = e_menu_item_new(m);
-     e_menu_item_label_set(mi, _("Maximized vertically"));
-     e_menu_item_check_set(mi, 1);
-     e_menu_item_toggle_set(mi, (bd->maximized ? 1 : 0));
-     e_menu_item_callback_set(mi, _e_border_menu_cb_maximize, bd);
-     e_menu_item_icon_edje_set(mi,
-                               (char 
*)e_theme_edje_file_get("base/theme/borders",
-                                                             
"widgets/border/default/maximize"),
-                               "widgets/border/default/maximize");
-
-     mi = e_menu_item_new(m);
-     e_menu_item_label_set(mi, _("Maximized horizontally"));
-     e_menu_item_check_set(mi, 1);
-     e_menu_item_toggle_set(mi, (bd->maximized ? 1 : 0));
-     e_menu_item_callback_set(mi, _e_border_menu_cb_maximize, bd);
-     e_menu_item_icon_edje_set(mi,
-                               (char 
*)e_theme_edje_file_get("base/theme/borders",
-                                                             
"widgets/border/default/maximize"),
-                               "widgets/border/default/maximize");
-
-     mi = e_menu_item_new(m);
-     e_menu_item_separator_set(mi, 1);
-   }*/
-   
    if (!bd->lock_user_sticky)
      {
        mi = e_menu_item_new(m);
@@ -508,13 +456,13 @@
    bd = data;
    if (!bd->lock_user_maximize)
      {
-       if (bd->maximized != E_MAXIMIZE_NONE &&
-           bd->maximized != E_MAXIMIZE_VERTICAL &&
-           bd->maximized != E_MAXIMIZE_HORIZONTAL ) e_border_unmaximize(bd);
-       else e_border_maximize(bd, e_config->maximize_policy);
+       if (bd->maximized & E_MAXIMIZE_BOTH)
+         e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
+       else
+         e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) | 
E_MAXIMIZE_BOTH);
      }
 }
-/*** sndev : menu_cb_miximize_vertically callback **************/
+
 static void
 _e_border_menu_cb_maximize_vertically(void *data, E_Menu *m, E_Menu_Item *mi)
 {
@@ -523,12 +471,13 @@
    bd = data;
    if (!bd->lock_user_maximize)
      {
-       if (bd->maximized && bd->maximized != E_MAXIMIZE_HORIZONTAL ) 
-         e_border_unmaximize_vh(bd, E_MAXIMIZE_VERTICAL );
-       else e_border_maximize(bd, E_MAXIMIZE_VERTICAL );
+       if ((bd->maximized & E_MAXIMIZE_VERTICAL))
+         e_border_unmaximize(bd, E_MAXIMIZE_VERTICAL);
+       else
+         e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) | 
E_MAXIMIZE_VERTICAL);
      }
 }
-/*** sndev : menu_cb_miximize_vertically callback **************/
+
 static void
 _e_border_menu_cb_maximize_horizontally(void *data, E_Menu *m, E_Menu_Item *mi)
 {
@@ -537,11 +486,22 @@
    bd = data;
    if (!bd->lock_user_maximize)
      {
-       if (bd->maximized && bd->maximized != E_MAXIMIZE_VERTICAL ) 
-         e_border_unmaximize_vh(bd, E_MAXIMIZE_HORIZONTAL );
-       else e_border_maximize(bd, E_MAXIMIZE_HORIZONTAL );
+       if ((bd->maximized & E_MAXIMIZE_HORIZONTAL))
+         e_border_unmaximize(bd, E_MAXIMIZE_HORIZONTAL);
+       else
+         e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) | 
E_MAXIMIZE_HORIZONTAL);
      }
 }
+
+static void
+_e_border_menu_cb_unmaximize(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   E_Border *bd;
+
+   bd = data;
+   e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
+}
+
 /*************************************************************/
 static void
 _e_border_menu_cb_shade(void *data, E_Menu *m, E_Menu_Item *mi)
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_modules.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -3 -r1.34 -r1.35
--- e_int_config_modules.c      2 Jun 2006 05:15:03 -0000       1.34
+++ e_int_config_modules.c      7 Jun 2006 21:42:13 -0000       1.35
@@ -59,7 +59,6 @@
 {
    E_Config_Dialog_Data *cfdata;
    E_Module *m;
-   const char *v;
 
    cfdata = data;
    if (!cfdata->modname) return;
@@ -75,7 +74,6 @@
 {
    E_Config_Dialog_Data *cfdata;
    E_Module *m;
-   const char *v;
 
    cfdata = data;
    if (!cfdata->modname) return;
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_startup.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- e_int_config_startup.c      6 Jun 2006 03:39:42 -0000       1.7
+++ e_int_config_startup.c      7 Jun 2006 21:42:13 -0000       1.8
@@ -126,13 +126,12 @@
 _load_inits(E_Config_Dialog *cfd, Evas_Object *il) 
 {
    Evas *evas;
-   Evas_Object *im, *o, *init_obj;
+   Evas_Object *im;
    Evas_List *init_dirs, *init;
    Ecore_Evas *eebuf;
    Evas *evasbuf;
    int i = 0;
    int selnum = -1;
-   const char *s;
    char *homedir;
    
    if (!il) return;
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_window_manipulation.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- e_int_config_window_manipulation.c  16 May 2006 07:32:37 -0000      1.8
+++ e_int_config_window_manipulation.c  7 Jun 2006 21:42:13 -0000       1.9
@@ -19,6 +19,7 @@
    int use_resist;
    int maximize_policy;
    /*- ADVANCED -*/
+   int maximize_direction;
    double auto_raise_delay;
    int desk_resist;
    int window_resist;
@@ -57,9 +58,12 @@
    cfdata->desk_resist = e_config->desk_resist;
    cfdata->window_resist = e_config->window_resist;
    cfdata->gadget_resist = e_config->gadget_resist;
-   cfdata->maximize_policy = e_config->maximize_policy;
+   cfdata->maximize_policy = (e_config->maximize_policy & E_MAXIMIZE_TYPE);
    if (cfdata->maximize_policy == E_MAXIMIZE_NONE)
      cfdata->maximize_policy = E_MAXIMIZE_FULLSCREEN;
+   cfdata->maximize_direction = (e_config->maximize_policy & 
E_MAXIMIZE_DIRECTION);
+   if (!cfdata->maximize_direction)
+     cfdata->maximize_direction = E_MAXIMIZE_BOTH;
    cfdata->allow_manip = e_config->allow_manip;
 }
 
@@ -91,7 +95,8 @@
    /* Actually take our cfdata settings and apply them in real life */
    e_config->use_auto_raise = cfdata->use_auto_raise;
    e_config->use_resist = cfdata->use_resist;
-   e_config->maximize_policy = cfdata->maximize_policy;
+   e_config->maximize_policy &= ~E_MAXIMIZE_TYPE;
+   e_config->maximize_policy &= cfdata->maximize_policy;
    e_config_save_queue();
    return 1; /* Apply was OK */
 }
@@ -106,7 +111,7 @@
    e_config->desk_resist = cfdata->desk_resist;
    e_config->window_resist = cfdata->window_resist;
    e_config->gadget_resist = cfdata->gadget_resist;
-   e_config->maximize_policy = cfdata->maximize_policy;
+   e_config->maximize_policy = cfdata->maximize_policy | 
cfdata->maximize_direction;
    e_config->allow_manip = cfdata->allow_manip;
    e_config_save_queue();
    return 1; /* Apply was OK */
@@ -178,7 +183,7 @@
    ob = e_widget_slider_add(evas, 1, 0, _("%2.0f pixels"), 0, 64.0, 1.0, 0, 
NULL, &(cfdata->gadget_resist), 200);
    e_widget_framelist_object_append(of, ob);
    e_widget_list_object_append(o, of, 1, 1, 0.5);
-   
+ 
    of = e_widget_framelist_add(evas, _("Maximize Policy"), 0);
    rg = e_widget_radio_group_new(&(cfdata->maximize_policy));
    ob = e_widget_radio_add(evas, _("Fullscreen"), E_MAXIMIZE_FULLSCREEN, rg);
@@ -189,8 +194,18 @@
    e_widget_framelist_object_append(of, ob);
    ob = e_widget_radio_add(evas, _("Fill available space"), E_MAXIMIZE_FILL, 
rg);
    e_widget_framelist_object_append(of, ob);
+
+   rg = e_widget_radio_group_new(&(cfdata->maximize_direction));
+   ob = e_widget_radio_add(evas, _("Both directions"), E_MAXIMIZE_BOTH, rg);
+   e_widget_framelist_object_append(of, ob);
+   ob = e_widget_radio_add(evas, _("Horizontal"), E_MAXIMIZE_HORIZONTAL, rg);
+   e_widget_framelist_object_append(of, ob);
+   ob = e_widget_radio_add(evas, _("Vertical"), E_MAXIMIZE_VERTICAL, rg);
+   e_widget_framelist_object_append(of, ob);
+
    ob = e_widget_check_add(evas, _("Allow window manipulation"), 
&(cfdata->allow_manip));
    e_widget_framelist_object_append(of, ob);
+
    e_widget_list_object_append(o, of, 1, 1, 0.5);
 
    return o;
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_shelf_config.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- e_int_shelf_config.c        3 Jun 2006 02:27:13 -0000       1.12
+++ e_int_shelf_config.c        7 Jun 2006 21:42:13 -0000       1.13
@@ -199,7 +199,6 @@
 {
    /* generate the core widget layout for a basic dialog */
    Evas_Object *o, *of, *ob, *oi, *oj;
-   E_Radio_Group *rg;
    Evas_Coord wmw, wmh;
    Evas_List *styles, *l;
    int sel, n;




_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to