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:
OK, now we have a 2D set of desktops to each zone :) - callbacks not in yet so 
stuck with 2x2 for now - but wanted to get this in
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_desk.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- e_desk.c    8 Jan 2005 07:10:13 -0000       1.10
+++ e_desk.c    8 Jan 2005 14:41:21 -0000       1.11
@@ -25,7 +25,7 @@
 }
 
 E_Desk *
-e_desk_new(E_Zone *zone)
+e_desk_new(E_Zone *zone, int x, int y)
 {
    E_Desk      *desk;
    char                name[40];
@@ -38,11 +38,11 @@
    desk->clients = NULL;
    desk->zone = zone;
    desk->num = ++desk_count;
-   snprintf(name, sizeof(name), "Desktop %d", desk->num);
+   snprintf(name, sizeof(name), "Desktop %d, %d", x, y);
    desk->name = strdup(name);
    e_object_ref(E_OBJECT(zone));
-   zone->desks = evas_list_append(zone->desks, desk);
 
+   zone->desks[x + (y * zone->desk_x_count)] = (E_Object *) desk;
    return desk;
 }
 
@@ -59,6 +59,7 @@
 e_desk_show(E_Desk *desk)
 {
    Evas_List   *l;
+   int          x, y;
    
    E_OBJECT_CHECK(desk);
    if (desk->visible) return;
@@ -80,14 +81,49 @@
          }
      }
    
-   for (l = desk->zone->desks; l; l = l->next)
+   for (x = 0; x < desk->zone->desk_x_count; x++)
      {
-       E_Desk *d = l->data;
-       d->visible = 0;
+       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->visible = 0;
+            if (next == desk)
+              {
+                 desk->zone->desk_x_current = x;
+                 desk->zone->desk_y_current = y;
+              }
+         }
      }
    desk->visible = 1;
 }
 
+/* FIXME replace e_desk_remove etc with these row / col operations */
+void
+e_desk_row_add(E_Zone *zone)
+{
+
+}
+
+void
+e_desk_row_remove(E_Zone *zone)
+{
+
+}
+
+void
+e_desk_col_add(E_Zone *zone)
+{
+
+}
+
+void
+e_desk_col_remove(E_Zone *zone)
+{
+
+}
+/*
 void
 e_desk_remove(E_Desk *desk)
 {
@@ -114,22 +150,15 @@
    evas_list_free(desk->clients);
    e_object_del(E_OBJECT(desk));
 }
-
+*/
 E_Desk *
 e_desk_current_get(E_Zone *zone)
 {
    Evas_List *l;
    
    E_OBJECT_CHECK_RETURN(zone, NULL);
-   
-   for (l = zone->desks; l; l = l->next)
-     {
-       E_Desk *desk = l->data;
-       if (desk->visible)
-         return desk;
-     }
-
-   return NULL;   
+  
+   return (E_Desk *)zone->desks[zone->desk_x_current + (zone->desk_y_current * 
zone->desk_x_count)];
 }
 
 void
@@ -137,23 +166,26 @@
 {
    Evas_List   *l;
    E_Desk      *desk;
+   int          x, y;
 
    E_OBJECT_CHECK(zone);
    
-   if (evas_list_count(zone->desks) < 2)
+   if (zone->desk_x_count < 2 && zone->desk_y_count < 2)
       return;
    
-   /* Locate the position of the current desktop in the list */
-   desk = e_desk_current_get(zone);
-   l = evas_list_find_list(zone->desks, desk);
-   if (!l) return; /* Couldn't help putting this here */
-   
-   l = l->next;
-   if (!l) l = zone->desks; /* Wraparound */
-
-   /* Show the desktop */
-   desk = l->data;
-   e_desk_show(desk);
+   x = zone->desk_x_current;
+   y = zone->desk_y_current;
+
+   x++;
+   if (x == zone->desk_x_count)
+     {
+       x = 0;
+       y++;
+       if (y == zone->desk_y_count)
+         y = 0;
+     }
+   
+   e_desk_show((E_Desk *)zone->desks[x + (y * zone->desk_x_count)]);
 }
 
 void
@@ -161,23 +193,27 @@
 {
    Evas_List   *l;
    E_Desk      *desk;
+   int          x, y;
 
    E_OBJECT_CHECK(zone);
-   
-   if (evas_list_count(zone->desks) < 2)
-      return;
-   
-   /* Locate the position of the current desktop in the list */
-   desk = e_desk_current_get(zone);
-   l = evas_list_find_list(zone->desks, desk);
-   if (!l) return; /* Couldn't help putting this here */
-   
-   l = l->prev;
-   if (!l) l = evas_list_last(zone->desks); /* Wraparound */
 
-   /* Show the desktop */
-   desk = l->data;
-   e_desk_show(desk);
+   if (zone->desk_x_count < 2 && zone->desk_y_count < 2)
+     return;
+
+   x = zone->desk_x_current;
+   y = zone->desk_y_current;
+
+   x--;
+   if (x < 0)
+     {
+       x = zone->desk_x_count - 1;
+       y--;
+       if (y < 0)
+         y = zone->desk_y_count - 1;
+       
+     }
+
+   e_desk_show((E_Desk *)zone->desks[x + (y * zone->desk_x_count)]);
 }
 
 static void
@@ -186,7 +222,7 @@
    E_Zone *zone = desk->zone;
    if (desk->name)
      free(desk->name);
-   zone->desks = evas_list_remove(zone->desks, desk);
+//   zone->desks = evas_list_remove(zone->desks, desk);
    e_object_unref(E_OBJECT(desk->zone));
    free(desk);
 }
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_desk.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- e_desk.h    5 Jan 2005 10:37:53 -0000       1.4
+++ e_desk.h    8 Jan 2005 14:41:21 -0000       1.5
@@ -19,13 +19,16 @@
 
 EAPI int          e_desk_init(void);
 EAPI int          e_desk_shutdown(void);
-EAPI E_Desk      *e_desk_new(E_Zone *zone);
+EAPI E_Desk      *e_desk_new(E_Zone *zone, int x, int y);
 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 void         e_desk_next(E_Zone *zone);
 EAPI void         e_desk_prev(E_Zone *zone);
-EAPI void         e_desk_remove(E_Desk *desk);
+EAPI void         e_desk_row_add(E_Zone *zone);
+EAPI void         e_desk_row_remove(E_Zone *zone);
+EAPI void         e_desk_col_add(E_Zone *zone);
+EAPI void         e_desk_col_remove(E_Zone *zone);
 
 #endif
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_menus.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -3 -r1.23 -r1.24
--- e_int_menus.c       7 Jan 2005 11:26:56 -0000       1.23
+++ e_int_menus.c       8 Jan 2005 14:41:21 -0000       1.24
@@ -26,8 +26,10 @@
 static void _e_int_menus_clients_item_cb (void *data, E_Menu *m, E_Menu_Item 
*mi);
 static void _e_int_menus_desktops_pre_cb (void *data, E_Menu *m);
 static void _e_int_menus_desktops_item_cb(void *data, E_Menu *m, E_Menu_Item 
*mi);
-static void _e_int_menus_desktops_add_cb (void *data, E_Menu *m, E_Menu_Item 
*mi);
-static void _e_int_menus_desktops_del_cb (void *data, E_Menu *m, E_Menu_Item 
*mi);
+static void _e_int_menus_desktops_row_add_cb (void *data, E_Menu *m, 
E_Menu_Item *mi);
+static void _e_int_menus_desktops_row_del_cb (void *data, E_Menu *m, 
E_Menu_Item *mi);
+static void _e_int_menus_desktops_col_add_cb (void *data, E_Menu *m, 
E_Menu_Item *mi);
+static void _e_int_menus_desktops_col_del_cb (void *data, E_Menu *m, 
E_Menu_Item *mi);
 
 /* externally accessible functions */
 E_Menu *
@@ -303,28 +305,17 @@
    evas_list_free(m->items);
    m->items = NULL;
 
-   mi = e_menu_item_new(m);
-   e_menu_item_label_set(mi, "New Desktop");
-   e_menu_item_callback_set(mi, _e_int_menus_desktops_add_cb, NULL);
-   
-   mi = e_menu_item_new(m);
-   e_menu_item_label_set(mi, "Remove This Desktop");
-   e_menu_item_callback_set(mi, _e_int_menus_desktops_del_cb, NULL);
-
-   mi = e_menu_item_new(m);
-   e_menu_item_separator_set(mi, 1);
-
    root = e_menu_root_get(m);
    /* Get the desktop list for this zone */
    /* FIXME: Menu code needs to determine what zone menu was clicked in */
    if (root && root->con)
      {
+       int i;
        E_Zone *zone = e_zone_current_get(root->con);
        
-       for (l = zone->desks; l; l = l->next)
+       for (i = 0; i < zone->desk_x_count * zone->desk_y_count; i++)
          {
-            E_Desk *desk = l->data;
-            desks = evas_list_append(desks, desk);
+            desks = evas_list_append(desks, zone->desks[i]);
          }
        
        for (l = desks; l; l = l->next)
@@ -340,49 +331,85 @@
          }
      }
 
+   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, "New Row of Desktops");
+   e_menu_item_callback_set(mi, _e_int_menus_desktops_row_add_cb, NULL);
+              
+   mi = e_menu_item_new(m);
+   e_menu_item_label_set(mi, "Remove Row of Desktops");
+   e_menu_item_callback_set(mi, _e_int_menus_desktops_row_del_cb, NULL);
+
+   mi = e_menu_item_new(m);
+   e_menu_item_label_set(mi, "New Column of Desktops");
+   e_menu_item_callback_set(mi, _e_int_menus_desktops_col_add_cb, NULL);
+              
+   mi = e_menu_item_new(m);
+   e_menu_item_label_set(mi, "Remove Colum of Desktops");
+   e_menu_item_callback_set(mi, _e_int_menus_desktops_col_del_cb, NULL);
+                    
+                    
    evas_list_free(desks);
 }
 
 /* FIXME: Use the zone the menu was clicked in */
 static void
-_e_int_menus_desktops_add_cb(void *data, E_Menu *m, E_Menu_Item *mi)
+_e_int_menus_desktops_row_add_cb(void *data, E_Menu *m, E_Menu_Item *mi)
 {
    E_Menu *root = e_menu_root_get(m);
 
    if (root && root->con)
      {
-       E_Desk *desk;
        E_Zone *zone = e_zone_current_get(root->con);
-       desk = e_desk_new(zone);
-       e_desk_show(desk);
+       e_desk_row_add(zone);
+//     e_desk_show(desk);
      }
 }
 
 static void
-_e_int_menus_desktops_del_cb(void *data, E_Menu *m, E_Menu_Item *mi)
+_e_int_menus_desktops_row_del_cb(void *data, E_Menu *m, E_Menu_Item *mi)
 {
    E_Menu *root = e_menu_root_get(m);
 
    if (root && root->con)
      {
        E_Zone *zone;
-       E_Desk *desk;
        
        zone = e_zone_current_get(root->con);
-       desk = e_desk_current_get(zone);
-       
-       if (evas_list_count(zone->desks) > 1)
-         {
-            e_desk_remove(desk);
-         }
-       else
-         {
-            e_error_dialog_show("Enlightenment", "You cannot remove the last 
desktop.");
-         }
+       e_desk_row_remove(zone);
+     }
+}
+
+static void
+_e_int_menus_desktops_col_add_cb(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   E_Menu *root = e_menu_root_get(m);
+
+   if (root && root->con)
+     {
+       E_Zone *zone = e_zone_current_get(root->con);
+       e_desk_row_add(zone);
+       //      e_desk_show(desk);
      }
 }
 
 static void
+_e_int_menus_desktops_col_del_cb(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   E_Menu *root = e_menu_root_get(m);
+         
+   if (root && root->con)
+     {
+       E_Zone *zone;
+
+       zone = e_zone_current_get(root->con);
+       e_desk_row_remove(zone);
+     }  
+}
+
+static void
 _e_int_menus_desktops_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
 {
    E_Desk *desk = data;
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- e_zone.c    6 Jan 2005 18:41:24 -0000       1.6
+++ e_zone.c    8 Jan 2005 14:41:21 -0000       1.7
@@ -32,6 +32,7 @@
 {
    E_Zone      *zone;
    E_Desk      *desk;
+   int          i;
 
    zone = E_OBJECT_ALLOC(E_Zone, _e_zone_free);
    if (!zone) return NULL;
@@ -77,10 +78,19 @@
        evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, 
_e_zone_cb_bg_mouse_move, zone);
      }
 
-   /* Start off with a single desktop */
-   desk = e_desk_new(zone);
-   e_desk_show(desk);
+   /* Start off with 4 desktops (2x2) */
+   zone->desk_x_count = 2;
+   zone->desk_y_count = 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;
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- e_zone.h    5 Jan 2005 10:37:53 -0000       1.3
+++ e_zone.h    8 Jan 2005 14:41:21 -0000       1.4
@@ -15,7 +15,9 @@
    Evas_Object         *bg_object;
    Evas_Object         *bg_event_object;
    
-   Evas_List           *desks;
+   int                  desk_x_count, desk_y_count;
+   int                  desk_x_current, desk_y_current;
+   E_Object           **desks; /* FIXME: why can this not be E_Desk? */
    Evas_List           *clients;
 
 };




-------------------------------------------------------
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