Enlightenment CVS committal

Author  : handyande
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


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


Log Message:
Hook in menu configuring of desktops and dynamic resizing
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_desk.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -3 -r1.11 -r1.12
--- e_desk.c    8 Jan 2005 14:41:21 -0000       1.11
+++ e_desk.c    8 Jan 2005 17:32:07 -0000       1.12
@@ -42,7 +42,6 @@
    desk->name = strdup(name);
    e_object_ref(E_OBJECT(zone));
 
-   zone->desks[x + (y * zone->desk_x_count)] = (E_Object *) desk;
    return desk;
 }
 
@@ -86,8 +85,7 @@
        for (y = 0; y < desk->zone->desk_y_count; y++)
          {
             E_Desk *next;
-            next =
-               (E_Desk *)desk->zone->desks[x + (y * desk->zone->desk_x_count)];
+            next = e_desk_at_xy_get(desk->zone,x, y);
             next->visible = 0;
             if (next == desk)
               {
@@ -103,62 +101,45 @@
 void
 e_desk_row_add(E_Zone *zone)
 {
-
+   e_zone_desk_count_set(zone, zone->desk_x_count, zone->desk_y_count + 1);
 }
 
 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);
 }
 
 void
 e_desk_col_add(E_Zone *zone)
 {
-
+   e_zone_desk_count_set(zone, zone->desk_x_count + 1, zone->desk_y_count);
 }
 
 void
 e_desk_col_remove(E_Zone *zone)
 {
-
-}
-/*
-void
-e_desk_remove(E_Desk *desk)
-{
-   Evas_List *l;
-   E_Desk *previous;
-   
-   E_OBJECT_CHECK(desk);
-   if (evas_list_count(desk->zone->desks) < 2)
+   if (zone->desk_x_count < 2)
      return;
-   l = evas_list_find_list(desk->zone->desks, desk);
-   l = l->prev;
-   if (!l) l = evas_list_last(desk->zone->desks);
-   previous = l->data;
-
-   for (l = desk->clients; l; l = l->next)
-     {
-       E_Border *bd = l->data;
-       e_border_desk_set(bd, previous);
-     }
-   desk->zone->desks = evas_list_remove(desk->zone->desks, desk);
-   if (desk->visible)
-     e_desk_show(previous);
-   
-   evas_list_free(desk->clients);
-   e_object_del(E_OBJECT(desk));
+   e_zone_desk_count_set(zone, zone->desk_x_count - 1, zone->desk_y_count);
 }
-*/
+
 E_Desk *
 e_desk_current_get(E_Zone *zone)
 {
-   Evas_List *l;
-   
    E_OBJECT_CHECK_RETURN(zone, NULL);
   
-   return (E_Desk *)zone->desks[zone->desk_x_current + (zone->desk_y_current * 
zone->desk_x_count)];
+   return e_desk_at_xy_get(zone, zone->desk_x_current, zone->desk_y_current);
+}
+
+E_Desk *
+e_desk_at_xy_get(E_Zone *zone, int x, int y)
+{
+   E_OBJECT_CHECK_RETURN(zone, NULL);
+
+   return (E_Desk *) zone->desks[x + (y * zone->desk_x_count)];
 }
 
 void
@@ -185,7 +166,7 @@
          y = 0;
      }
    
-   e_desk_show((E_Desk *)zone->desks[x + (y * zone->desk_x_count)]);
+   e_desk_show(e_desk_at_xy_get(zone, x, y));
 }
 
 void
@@ -213,7 +194,7 @@
        
      }
 
-   e_desk_show((E_Desk *)zone->desks[x + (y * zone->desk_x_count)]);
+   e_desk_show(e_desk_at_xy_get(zone, x, y));
 }
 
 static void
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_desk.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- e_desk.h    8 Jan 2005 14:41:21 -0000       1.5
+++ e_desk.h    8 Jan 2005 17:32:08 -0000       1.6
@@ -23,6 +23,7 @@
 EAPI void         e_desk_name_set(E_Desk *desk, const char *name);
 EAPI void         e_desk_show(E_Desk *desk);
 EAPI E_Desk      *e_desk_current_get(E_Zone *zone);
+EAPI E_Desk      *e_desk_at_xy_get(E_Zone *zone, int x, int y);
 EAPI void         e_desk_next(E_Zone *zone);
 EAPI void         e_desk_prev(E_Zone *zone);
 EAPI void         e_desk_row_add(E_Zone *zone);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_menus.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -3 -r1.24 -r1.25
--- e_int_menus.c       8 Jan 2005 14:41:21 -0000       1.24
+++ e_int_menus.c       8 Jan 2005 17:32:08 -0000       1.25
@@ -390,8 +390,8 @@
    if (root && root->con)
      {
        E_Zone *zone = e_zone_current_get(root->con);
-       e_desk_row_add(zone);
-       //      e_desk_show(desk);
+       e_desk_col_add(zone);
+//      e_desk_show(desk);
      }
 }
 
@@ -405,7 +405,7 @@
        E_Zone *zone;
 
        zone = e_zone_current_get(root->con);
-       e_desk_row_remove(zone);
+       e_desk_col_remove(zone);
      }  
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- e_zone.c    8 Jan 2005 14:41:21 -0000       1.7
+++ e_zone.c    8 Jan 2005 17:32:08 -0000       1.8
@@ -31,7 +31,6 @@
 e_zone_new(E_Container *con, int x, int y, int w, int h)
 {
    E_Zone      *zone;
-   E_Desk      *desk;
    int          i;
 
    zone = E_OBJECT_ALLOC(E_Zone, _e_zone_free);
@@ -79,18 +78,12 @@
      }
 
    /* Start off with 4 desktops (2x2) */
-   zone->desk_x_count = 2;
-   zone->desk_y_count = 2;
+   zone->desk_x_count = 0;
+   zone->desk_y_count = 0;
+   zone->desk_x_current = 0;
+   zone->desk_y_current = 0;
+   e_zone_desk_count_set(zone, 2, 2);
 
-   zone->desks =
-      malloc(zone->desk_x_count * zone->desk_y_count * sizeof(E_Desk *));
-
-   int xx, yy;
-   for (xx = 1; xx >= 0; xx--)
-     for(yy = 1; yy >= 0; yy--)
-       desk = e_desk_new(zone, xx, yy);
-
-   e_desk_show(desk);
    return zone;
 }
 
@@ -252,3 +245,47 @@
    zone = data;
 }
 
+void
+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;
+   
+   new_desks =
+      malloc(x_count * y_count * sizeof(E_Desk *));
+
+   for (x = 0; x < x_count; x++)
+     for(y = 0; y < y_count; 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;
+       }
+
+/* FIXME catch thigns that have fallen off the end if we got smaller */
+
+   if (zone->desks)
+     free(zone->desks);
+   zone->desks = new_desks;
+   
+   zone->desk_x_count = x_count;
+   zone->desk_y_count = y_count;
+
+   reshow = 0;
+   if (zone->desk_x_current >= x_count)
+     {
+       zone->desk_x_current = x_count - 1;
+       reshow = 1;
+     }
+   if (zone->desk_y_current >= y_count)
+     {
+       zone->desk_y_current = y_count - 1;
+       reshow = 1;
+     }
+   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.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- e_zone.h    8 Jan 2005 14:41:21 -0000       1.4
+++ e_zone.h    8 Jan 2005 17:32:08 -0000       1.5
@@ -31,6 +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);
 
 #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