Enlightenment CVS committal

Author  : handyande
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_desk.c e_zone.c e_zone.h 


Log Message:
Move apps on desks being removed to theirnearest valid desk
fix a few warnings
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_desk.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- e_desk.c    8 Jan 2005 17:32:07 -0000       1.12
+++ e_desk.c    8 Jan 2005 21:21:56 -0000       1.13
@@ -97,7 +97,6 @@
    desk->visible = 1;
 }
 
-/* FIXME replace e_desk_remove etc with these row / col operations */
 void
 e_desk_row_add(E_Zone *zone)
 {
@@ -107,8 +106,6 @@
 void
 e_desk_row_remove(E_Zone *zone)
 {
-   if (zone->desk_y_count < 2)
-     return;
    e_zone_desk_count_set(zone, zone->desk_x_count, zone->desk_y_count - 1);
 }
 
@@ -121,8 +118,6 @@
 void
 e_desk_col_remove(E_Zone *zone)
 {
-   if (zone->desk_x_count < 2)
-     return;
    e_zone_desk_count_set(zone, zone->desk_x_count - 1, zone->desk_y_count);
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- e_zone.c    8 Jan 2005 17:32:08 -0000       1.8
+++ e_zone.c    8 Jan 2005 21:21:56 -0000       1.9
@@ -249,43 +249,101 @@
 e_zone_desk_count_set(E_Zone *zone, int x_count, int y_count)
 {
    E_Object **new_desks; /* match the bug in e_zone.h */
-   E_Desk    *desk;
-   int        x, y, reshow;
+   E_Desk    *desk, *new_desk;
+   int        x, y, xx, yy, moved;
+   Evas_List *client;
+   E_Border  *bd;
    
-   new_desks =
-      malloc(x_count * y_count * sizeof(E_Desk *));
+   xx = x_count;
+   if (xx < 1)
+     xx = 1;
+   yy = y_count;
+   if (yy < 1)
+     yy = 1;
 
-   for (x = 0; x < x_count; x++)
-     for(y = 0; y < y_count; y++)
+   new_desks = malloc(xx * yy * sizeof(E_Desk *));
+
+   for (x = 0; x < xx; x++)
+     for(y = 0; y < yy; y++)
        {
          if (x < zone->desk_x_count && y < zone->desk_y_count)
            desk = (E_Desk *) zone->desks[x + (y * zone->desk_x_count)];
          else
            desk = e_desk_new(zone, x, y);
-         new_desks[x + (y * x_count)] = (E_Object *) desk;
+         new_desks[x + (y * xx)] = (E_Object *) desk;
        }
 
-/* FIXME catch thigns that have fallen off the end if we got smaller */
+   /* catch windoes that have fallen off the end if we got smaller */
+   if (xx < zone->desk_x_count)
+     for (y = 0; y < zone->desk_y_count; y++)
+       {
+         new_desk = (E_Desk *)
+            zone->desks[xx - 1 + (y * zone->desk_x_count)];
+         for (x = xx; x < zone->desk_x_count; x++)
+           {
+              desk = (E_Desk *)
+                 zone->desks[x + (y * zone->desk_x_count)];
+
+              client = desk->clients;
+              while (client)
+                {
+                   bd = (E_Border *) client->data;
+
+                   new_desk->clients = evas_list_append(new_desk->clients, bd);
+                   bd->desk = new_desk;
+                   client = client->next;
+                }
+              evas_list_free(desk->clients);
+           }
+       }  
+   if (yy < zone->desk_y_count)
+     for (x = 0; x < zone->desk_x_count; x++)
+       {
+         new_desk = (E_Desk *)
+            zone->desks[x + ((yy - 1) * zone->desk_x_count)];
+         for (y = yy; y < zone->desk_y_count; y++)
+           {
+              desk = (E_Desk *)
+                 zone->desks[x + (y * zone->desk_x_count)];
+
+              client = desk->clients;
+              while (client)
+                {
+                   bd = (E_Border *) client->data;
+
+                   new_desk->clients = evas_list_append(new_desk->clients, bd);
+                   bd->desk = new_desk;
+                   client = client->next;
+                }
+              evas_list_free(desk->clients);
+           }
+       }       
 
    if (zone->desks)
      free(zone->desks);
    zone->desks = new_desks;
    
-   zone->desk_x_count = x_count;
-   zone->desk_y_count = y_count;
+   zone->desk_x_count = xx;
+   zone->desk_y_count = yy;
 
-   reshow = 0;
-   if (zone->desk_x_current >= x_count)
+   moved = 0;
+   if (zone->desk_x_current >= xx)
+     {
+       zone->desk_x_current = xx - 1;
+       moved = 1;
+     }
+   if (zone->desk_y_current >= yy)
      {
-       zone->desk_x_current = x_count - 1;
-       reshow = 1;
+       zone->desk_y_current = yy - 1;
+       moved = 1;
      }
-   if (zone->desk_y_current >= y_count)
+   if (moved)
+     e_desk_show(e_desk_at_xy_get(zone, xx - 1, yy - 1));
+   else
      {
-       zone->desk_y_current = y_count - 1;
-       reshow = 1;
+       desk = e_desk_current_get(zone);
+       desk->visible = 0;
+       e_desk_show(desk);
      }
-   if (reshow)
-     e_desk_show(e_desk_at_xy_get(zone, x_count - 1, y_count - 1));
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- e_zone.h    8 Jan 2005 17:32:08 -0000       1.5
+++ e_zone.h    8 Jan 2005 21:21:56 -0000       1.6
@@ -31,7 +31,7 @@
 EAPI E_Zone    *e_zone_current_get(E_Container *con);
 EAPI void       e_zone_bg_reconfigure(E_Zone *zone);
 EAPI Evas_List *e_zone_clients_list_get(E_Zone *zone);
-EAPI void       e_zone_desks_set(E_Zone *zone, int x_count, int y_count);
+EAPI void       e_zone_desk_count_set(E_Zone *zone, int x_count, int y_count);
 
 #endif
 




-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to