Enlightenment CVS committal

Author  : xcomputerman
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        Makefile.am e.h e_border.c e_border.h e_container.c 
        e_container.h e_desk.c e_desk.h e_hints.c e_hints.h 
        e_int_menus.c e_int_menus.h e_ipc.c e_main.c e_manager.c 
        e_menu.h 


Log Message:
Virtual Desktops! Yay.

Sorry, they don't quite work right yet. I'll fix the bug tomorrow. :)

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/Makefile.am,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- Makefile.am 30 Dec 2004 05:37:53 -0000      1.9
+++ Makefile.am 3 Jan 2005 09:34:24 -0000       1.10
@@ -18,6 +18,7 @@
 e_ipc.h \
 e_error.h \
 e_container.h \
+e_zone.h \
 e_desk.h \
 e_border.h \
 e_pointer.h \
@@ -50,6 +51,7 @@
 e_ipc.c \
 e_error.c \
 e_container.c \
+e_zone.c \
 e_desk.c \
 e_border.c \
 e_pointer.c \
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- e.h 24 Dec 2004 04:30:58 -0000      1.7
+++ e.h 3 Jan 2005 09:34:24 -0000       1.8
@@ -50,6 +50,7 @@
 #include "e_ipc.h"
 #include "e_error.h"
 #include "e_container.h"
+#include "e_zone.h"
 #include "e_desk.h"
 #include "e_border.h"
 #include "e_pointer.h"
@@ -69,6 +70,7 @@
 #include "e_resist.h"
 #include "e_startup.h"
 #include "e_iconify.h"
+#include "e_hints.h"
 
 typedef struct _E_Before_Idler E_Before_Idler;
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -3 -r1.39 -r1.40
--- e_border.c  2 Jan 2005 02:39:43 -0000       1.39
+++ e_border.c  3 Jan 2005 09:34:24 -0000       1.40
@@ -124,7 +124,14 @@
    
    bd = E_OBJECT_ALLOC(E_Border, _e_border_free);
    if (!bd) return NULL;
+   
    bd->container = con;
+   bd->zone = e_zone_current_get(con);
+   bd->zone->clients = evas_list_append(bd->zone->clients, bd);
+
+   bd->desk = e_desk_current_get(bd->zone);
+   bd->desk->clients = evas_list_append(bd->desk->clients, bd);
+  
    bd->w = 1;
    bd->h = 1;
    bd->win = ecore_x_window_override_new(bd->container->win, 0, 0, bd->w, 
bd->h);
@@ -322,6 +329,7 @@
                                  bd->client.h);
 }
 
+/* FIXME: Zone client list is not altered. This affects desktop show function 
*/
 void
 e_border_raise(E_Border *bd)
 {
@@ -386,21 +394,21 @@
               {
                  printf("take focus!\n");
                  ecore_x_icccm_take_focus_send(bd->client.win, 
ECORE_X_CURRENT_TIME);
-                 e_hints_active_window_set(bd->client.win);
+                 e_hints_active_window_set(bd->container->manager, 
bd->client.win);
                  ecore_x_window_focus(bd->client.win);
               }
             else
               {
                  printf("set focus\n");
                  ecore_x_window_focus(bd->client.win);
-                 e_hints_active_window_set(bd->client.win);
+                 e_hints_active_window_set(bd->container->manager, 
bd->client.win);
               }
          }
        else
          {
             printf("remove focus\n");
             ecore_x_window_focus(bd->container->manager->win);
-            e_hints_active_window_set(0);
+            e_hints_active_window_set(bd->container->manager, 0);
          }
      }
    if ((bd->focused) && (focused != bd))
@@ -544,7 +552,8 @@
 void
 e_border_maximize(E_Border *bd)
 {
-   E_OBJECT_CHECK(bd);
+   E_Zone *zone;
+   
    if ((bd->shaded) || (bd->shading)) return;
    if (!bd->maximized)
      {
@@ -555,7 +564,7 @@
        bd->saved.h = bd->h;
 
        /* FIXME maximize intelligently */
-       e_border_move_resize(bd, 0, 0, bd->container->w, bd->container->h);
+       e_border_move_resize(bd, 0, 0, bd->zone->w, bd->zone->h);
        bd->maximized = 1;
        bd->changes.pos = 1;
        bd->changes.size = 1;
@@ -1869,12 +1878,12 @@
                  int new_x, new_y;
                  
                  printf("AUTO POS!\n");
-                 if (bd->container->w > bd->w)
-                   new_x = rand() % (bd->container->w - bd->w);
+                 if (bd->zone->w > bd->w)
+                   new_x = rand() % (bd->zone->w - bd->w);
                  else
                    new_x = 0;
-                 if (bd->container->h > bd->h)
-                   new_y = rand() % (bd->container->h - bd->h);
+                 if (bd->zone->h > bd->h)
+                   new_y = rand() % (bd->zone->h - bd->h);
                  else
                    new_y = 0;
                  
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- e_border.h  30 Dec 2004 05:37:53 -0000      1.13
+++ e_border.h  3 Jan 2005 09:34:24 -0000       1.14
@@ -44,6 +44,8 @@
    int             x, y, w, h;
    int             ref;
    E_Container    *container;
+   E_Zone         *zone;
+   E_Desk         *desk;
    Evas_List      *handlers;
    
    struct {
@@ -145,7 +147,6 @@
    unsigned char   re_manage : 1;
    unsigned char   shading : 1;
    unsigned char   shaded : 1;
-   unsigned char   sticky : 1;
    unsigned char   maximized : 1;
    unsigned char   iconic : 1;
 
@@ -166,6 +167,8 @@
       Ecore_Animator *anim;
    } shade;
 
+   Evas_List *stick_desks;
+
    struct {
       unsigned int visible : 1;
       unsigned int pos : 1;
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_container.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- e_container.c       2 Jan 2005 02:39:43 -0000       1.9
+++ e_container.c       3 Jan 2005 09:34:24 -0000       1.10
@@ -39,8 +39,10 @@
 e_container_new(E_Manager *man)
 {
    E_Container *con;
+   E_Zone *zone;
    
    con = E_OBJECT_ALLOC(E_Container, _e_container_free);
+   memset(con, 0, sizeof(E_Container));
    if (!con) return NULL;
    con->manager = man;
    e_object_ref(E_OBJECT(con->manager));
@@ -60,49 +62,17 @@
    e_path_evas_append(path_fonts, con->bg_evas);
    
    e_pointer_container_set(con);
-   
-   if (1) /* for now ALWAYS on - but later maybe a config option */
-     {
-       Evas_Object *o;
 
-       o = evas_object_rectangle_add(con->bg_evas);
-       con->bg_blank_object = 0;
-       evas_object_layer_set(o, -100);
-       evas_object_move(o, 0, 0);
-       evas_object_resize(o, con->w, con->h);
-       evas_object_color_set(o, 255, 255, 255, 255);
-       evas_object_show(o);
-       
-       o = edje_object_add(con->bg_evas);
-       con->bg_object = o;
-       evas_object_layer_set(o, -1);
-       evas_object_name_set(o, "desktop/background");
-       evas_object_data_set(o, "e_container", con);
-       evas_object_move(o, 0, 0);
-       evas_object_resize(o, con->w, con->h);
-       edje_object_file_set(o,
-                            e_config->desktop_default_background,
-                            "desktop/background");
-       evas_object_show(o);
-       
-       o = evas_object_rectangle_add(con->bg_evas);
-       con->bg_event_object = 0;
-       evas_object_move(o, 0, 0);
-       evas_object_resize(o, con->w, con->h);
-       evas_object_color_set(o, 255, 255, 255, 0);
-       evas_object_show(o);
-       evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, 
_e_container_cb_bg_mouse_down, con);
-       evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP,   
_e_container_cb_bg_mouse_up,   con);
-       evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, 
_e_container_cb_bg_mouse_move, con);
-       
-       ecore_evas_callback_resize_set(con->bg_ecore_evas, 
_e_container_cb_bg_ecore_evas_resize);
-     }
+   /* FIXME: Add ecore code to fetch xinerama screens for zones */
+   zone = e_zone_new(con, 0, 0, con->w, con->h);
+   
    return con;
 }
         
 void
 e_container_show(E_Container *con)
 {
+   printf("Container show!\n");
    E_OBJECT_CHECK(con);
    if (con->visible) return;
    ecore_x_window_show(con->win);
@@ -166,22 +136,6 @@
    ecore_x_window_lower(con->win);
 }
 
-void
-e_container_bg_reconfigure(E_Container *con)
-{
-   Evas_Object *o;
-   
-   E_OBJECT_CHECK(con);
-   o = con->bg_object;
-   evas_object_hide(o);
-   edje_object_file_set(o,
-                       e_config->desktop_default_background,
-                       "desktop/background");
-   evas_object_layer_set(o, -1);
-   evas_object_show(o);
-}
-
-
 Evas_List *
 e_container_clients_list_get(E_Container *con)
 {
@@ -328,68 +282,6 @@
 }
    
 static void
-_e_container_cb_bg_mouse_down(void *data, Evas *evas, Evas_Object *obj, void 
*event_info)
-{
-   E_Container *con;
-   Evas_Event_Mouse_Down *ev;
-   
-   ev = (Evas_Event_Mouse_Down *)event_info;
-   con = data;
-   if (e_menu_grab_window_get()) return;
-    
-   if (ev->button == 1)
-     {
-       E_Menu *m;
-       
-       m = e_int_menus_main_new();
-       e_menu_activate_mouse(m, con, ev->output.x, ev->output.y, 1, 1,
-                             E_MENU_POP_DIRECTION_DOWN);
-       e_util_container_fake_mouse_up_all_later(con);
-     }
-   else if (ev->button == 2)
-     {
-       E_Menu *m;
-
-       m = e_int_menus_clients_new();
-       /* FIXME: this is a bit of a hack... setting m->con - bad hack */
-       m->con = con;
-       e_menu_activate_mouse(m, con, ev->output.x, ev->output.y, 1, 1,
-                             E_MENU_POP_DIRECTION_DOWN);
-       e_util_container_fake_mouse_up_all_later(con);
-     }
-   else if (ev->button == 3)
-     {
-       E_Menu *m;
-       
-       m = e_int_menus_favorite_apps_new(1);
-       e_menu_activate_mouse(m, con, ev->output.x, ev->output.y, 1, 1,
-                             E_MENU_POP_DIRECTION_DOWN);
-       e_util_container_fake_mouse_up_all_later(con);
-     }
-}
-
-static void
-_e_container_cb_bg_mouse_up(void *data, Evas *evas, Evas_Object *obj, void 
*event_info)
-{
-   E_Container *con;
-   Evas_Event_Mouse_Up *ev;
-   
-   ev = (Evas_Event_Mouse_Up *)event_info;      
-   con = data;
-}
-
-static void
-_e_container_cb_bg_mouse_move(void *data, Evas *evas, Evas_Object *obj, void 
*event_info)
-{
-   E_Container *con;
-   Evas_Event_Mouse_Move *ev;
-   
-   ev = (Evas_Event_Mouse_Move *)event_info;   
-   con = data;
-/*   printf("move %i %i\n", ev->cur.output.x, ev->cur.output.y); */
-}
-
-static void
 _e_container_cb_bg_ecore_evas_resize(Ecore_Evas *ee)
 {
    Evas *evas;
@@ -401,8 +293,11 @@
    evas_output_viewport_get(evas, NULL, NULL, &w, &h);
    o = evas_object_name_find(evas, "desktop/background");
    con = evas_object_data_get(o, "e_container");
+   /* FIXME: Handle resizing of zones if container is resized */
+#if 0
    evas_object_resize(con->bg_object, w, h);
    evas_object_resize(con->bg_event_object, w, h);
+#endif
    _e_container_resize_handle(con);
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_container.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- e_container.h       25 Dec 2004 15:33:48 -0000      1.4
+++ e_container.h       3 Jan 2005 09:34:24 -0000       1.5
@@ -29,12 +29,10 @@
    Ecore_Evas          *bg_ecore_evas;
    Evas                *bg_evas;
    Ecore_X_Window       bg_win;
-   Evas_Object         *bg_blank_object;
-   Evas_Object         *bg_object;
-   Evas_Object         *bg_event_object;
    
    Evas_List           *shapes;
    Evas_List           *shape_change_cb;
+   Evas_List           *zones;
    Evas_List           *clients;
 };
 
@@ -70,7 +68,6 @@
 EAPI void         e_container_move_resize(E_Container *con, int x, int y, int 
w, int h);
 EAPI void         e_container_raise(E_Container *con);
 EAPI void         e_container_lower(E_Container *con);
-EAPI void         e_container_bg_reconfigure(E_Container *con);
 
 EAPI Evas_List   *e_container_clients_list_get(E_Container *con);
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_desk.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_desk.c    25 Nov 2004 03:37:44 -0000      1.1
+++ e_desk.c    3 Jan 2005 09:34:24 -0000       1.2
@@ -1 +1,168 @@
+/*
+ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
+ */
 #include "e.h"
+
+/* E_Desk is a child object of E_Zone. A desk is essentially a background
+ * and an associated set of client windows. Each zone can have an arbitrary
+ * number of desktops.
+ */
+
+static void _e_desk_free(E_Desk *desk);
+
+E_Desk *
+e_desk_new(E_Zone *zone)
+{
+   E_Desk      *desk;
+   char                name[40];
+   
+   desk = E_OBJECT_ALLOC(E_Desk, _e_desk_free);
+   memset(desk, 0, sizeof(E_Desk));
+   if (!desk) return NULL;
+
+   desk->zone = zone;
+   desk->num = evas_list_count(zone->desks) + 1;
+   snprintf(name, sizeof(name), "Desktop %d", desk->num);
+   desk->name = strdup(name);
+   e_object_ref(E_OBJECT(zone));
+   zone->desks = evas_list_append(zone->desks, desk);
+
+   return desk;
+}
+
+void
+e_desk_name_set(E_Desk *desk, const char *name)
+{
+   E_OBJECT_CHECK(desk);
+   if (desk->name)
+      free(desk->name);
+   desk->name = strdup(name);
+}
+
+void
+e_desk_show(E_Desk *desk)
+{
+   Evas_List   *l;
+   
+   E_OBJECT_CHECK(desk);
+
+   for (l = desk->zone->clients; l; l = l->next)
+     {
+       E_Border *bd = l->data;
+
+       if (evas_list_find(desk->clients, bd))
+         e_border_show(bd);
+       else
+         e_border_hide(bd);
+     }
+   
+   for (l = desk->zone->desks; l; l = l->next)
+     {
+       E_Desk *d = l->data;
+       d->visible = 0;
+     }
+   desk->visible = 1;
+}
+
+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)
+     return;
+   l = evas_list_find(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;
+       bd->desk = previous;
+     }
+   desk->zone->desks = evas_list_remove(desk->zone->desks, desk);
+   e_desk_show(previous);
+   
+   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(man);
+   
+   for (l = zone->desks; l; l = l->next)
+     {
+       E_Desk *desk = l->data;
+       if (desk->visible)
+         return desk;
+     }
+
+   return NULL;   
+}
+
+void
+e_desk_next(E_Zone *zone)
+{
+   Evas_List   *l;
+   E_Desk      *desk;
+
+   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->next;
+   if (!l) l = zone->desks; /* Wraparound */
+
+   /* Show the desktop */
+   desk = l->data;
+   e_desk_show(desk);
+}
+
+void
+e_desk_prev(E_Zone *zone)
+{
+   Evas_List   *l;
+   E_Desk      *desk;
+
+   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);
+}
+
+static void
+_e_desk_free(E_Desk *desk)
+{
+   E_Zone *zone = desk->zone;
+   if (desk->name)
+     free(desk->name);
+   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.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_desk.h    25 Nov 2004 03:37:44 -0000      1.1
+++ e_desk.h    3 Jan 2005 09:34:24 -0000       1.2
@@ -1,4 +1,28 @@
 #ifndef E_DESK_H
 #define E_DESK_H
 
+typedef struct _E_Desk E_Desk;
+
+struct _E_Desk
+{
+   E_Object             e_obj_inherit;
+
+   E_Zone              *zone;
+   char                *name;
+   int                  num;
+   char                 visible : 1;
+
+   Evas_Object         *bg_object;
+
+   Evas_List           *clients;
+};
+
+EAPI E_Desk      *e_desk_new(E_Zone *zone);
+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);
+
 #endif
+
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- e_hints.c   3 Jan 2005 03:14:45 -0000       1.4
+++ e_hints.c   3 Jan 2005 09:34:24 -0000       1.5
@@ -145,17 +145,10 @@
 }
 
 void
-e_hints_active_window_set(Ecore_X_Window win)
+e_hints_active_window_set(E_Manager *man, Ecore_X_Window win)
 {
-   Evas_List *ml;
-   
-   for (ml = e_manager_list(); ml; ml = ml->next)
-     {
-       E_Manager *m;
-       
-       m = ml->data;
-       ecore_x_netwm_client_active_set(m->root, win);
-     }
+   E_OBJECT_CHECK(man);
+   ecore_x_netwm_client_active_set(man->root, win);
 }
 
 void
@@ -232,7 +225,7 @@
    ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_MODAL, 
                                  bd->client.netwm.state.modal);
    ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_STICKY,
-                                 bd->sticky);
+                                 (evas_list_count(bd->stick_desks) > 1));
    ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_MAXIMIZED_VERT,
                                  bd->client.netwm.state.maximized_v);
    ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ,
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_hints.h   30 Dec 2004 08:06:46 -0000      1.1
+++ e_hints.h   3 Jan 2005 09:34:24 -0000       1.2
@@ -4,7 +4,7 @@
 EAPI void e_hints_init(void);
 EAPI void e_hints_client_list_set(void);
 EAPI void e_hints_client_stacking_set(void);
-EAPI void e_hints_active_window_set(Ecore_X_Window win);
+EAPI void e_hints_active_window_set(E_Manager *man, Ecore_X_Window win);
 EAPI void e_hints_window_name_set(Ecore_X_Window win, const char *name);
 EAPI void e_hints_desktop_config_set(void);
 EAPI void e_hints_window_state_set(Ecore_X_Window win);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_menus.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- e_int_menus.c       27 Dec 2004 07:50:03 -0000      1.13
+++ e_int_menus.c       3 Jan 2005 09:34:24 -0000       1.14
@@ -24,6 +24,10 @@
 static void _e_int_menus_apps_run        (void *data, E_Menu *m, E_Menu_Item 
*mi);
 static void _e_int_menus_clients_pre_cb  (void *data, E_Menu *m);
 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);
 
 /* externally accessible functions */
 E_Menu *
@@ -57,6 +61,13 @@
    e_menu_item_icon_edje_set(mi, e_path_find(path_icons, "default.eet"),
                             "module");
    e_menu_item_submenu_set(mi, subm);
+
+   subm = e_int_menus_desktops_new();
+   mi = e_menu_item_new(m);
+   e_menu_item_label_set(mi, "Desktops");
+   e_menu_item_icon_edje_set(mi, e_path_find(path_icons, "default.eet"),
+                            "windows");
+   e_menu_item_submenu_set(mi, subm);
   
    subm = e_int_menus_clients_new();
    mi = e_menu_item_new(m);
@@ -110,6 +121,19 @@
 }
 
 E_Menu *
+e_int_menus_desktops_new(void)
+{
+   E_Menu *m;
+   E_Menu_Item *mi;
+
+   m = e_menu_new();
+   e_menu_pre_activate_callback_set(m, _e_int_menus_desktops_pre_cb, NULL);
+
+   return m;
+}
+   
+
+E_Menu *
 e_int_menus_favorite_apps_new(int top)
 {
    E_Menu *m;
@@ -260,6 +284,105 @@
 }
 
 static void
+_e_int_menus_desktops_pre_cb(void *data, E_Menu *m)
+{
+   E_Menu_Item *mi;
+   Evas_List *l, *desks = NULL;
+   E_Menu *root;
+
+   if (m->realized) return;
+
+   /* clear list */
+   if (m->items)
+     {
+       Evas_List *l;
+       for (l = m->items; l; l = l->next)
+         {
+            E_Menu_Item *mi = l->data;
+            e_object_free(E_OBJECT(mi));
+         }
+     }
+
+   mi = e_menu_item_new(m);
+   e_menu_item_label_set(mi, "Add 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)
+     {
+       E_Zone *zone = e_zone_current_get(root->con);
+       
+       for (l = zone->desks; l; l = l->next)
+         {
+            E_Desk *desk = l->data;
+            desks = evas_list_append(desks, desk);
+         }
+       
+       for (l = desks; l; l = l->next)
+         {
+            E_Desk *desk = l->data;
+            mi = e_menu_item_new(m);
+            e_menu_item_check_set(mi, 1);
+            e_menu_item_label_set(mi, desk->name);
+            e_menu_item_callback_set(mi, _e_int_menus_desktops_item_cb, desk);
+            if (desk == e_desk_current_get(zone))
+              e_menu_item_toggle_set(mi, 1);
+            e_menu_item_icon_edje_set(mi, e_path_find(path_icons, 
"default.eet"),
+                                      "desktop");
+         }
+     }
+
+   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_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);
+     }
+}
+
+static void
+_e_int_menus_desktops_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);
+       e_desk_remove(desk);
+     }
+}
+
+static void
+_e_int_menus_desktops_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   E_Desk *desk = data;
+
+   e_desk_show(desk);
+}
+
+static void
 _e_int_menus_clients_pre_cb(void *data, E_Menu *m)
 {
    E_Menu_Item *mi;
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_menus.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- e_int_menus.h       23 Dec 2004 15:31:47 -0000      1.5
+++ e_int_menus.h       3 Jan 2005 09:34:24 -0000       1.6
@@ -2,6 +2,7 @@
 #define E_INT_MENUS_H
 
 EAPI E_Menu *e_int_menus_main_new(void);    
+EAPI E_Menu *e_int_menus_desktops_new(void);
 EAPI E_Menu *e_int_menus_clients_new(void);
 EAPI E_Menu *e_int_menus_apps_new(char *dir, int top);
 EAPI E_Menu *e_int_menus_favorite_apps_new(int top);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_ipc.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- e_ipc.c     23 Dec 2004 06:38:27 -0000      1.5
+++ e_ipc.c     3 Jan 2005 09:34:24 -0000       1.6
@@ -190,9 +190,11 @@
                  for (ll = man->containers; ll; ll = ll->next)
                    {
                       E_Container *con;
+             E_Zone *zone;
                       
                       con = ll->data;
-                      e_container_bg_reconfigure(con);
+             zone = e_zone_current_get(con);
+                      e_zone_bg_reconfigure(zone);
                    }
               }
             e_config_save_queue();
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_main.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- e_main.c    30 Dec 2004 05:37:53 -0000      1.18
+++ e_main.c    3 Jan 2005 09:34:24 -0000       1.19
@@ -513,11 +513,12 @@
                         }
                    }
               }
+
             e_container_show(con);
          }
        else
          {
-            e_error_message_show("Cannot create container object for manager 
on screen %i\n", 
+            e_error_message_show("Cannot create desktop object for manager on 
screen %i\n", 
                                  i);
             return 0;
          }
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_manager.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- e_manager.c 25 Dec 2004 15:33:48 -0000      1.3
+++ e_manager.c 3 Jan 2005 09:34:24 -0000       1.4
@@ -189,7 +189,7 @@
        E_Container *con;
        E_Border *bd;
        
-       con = man->containers->data;
+   con = man->containers->data;
        if (!e_border_find_by_client_window(e->win))
          {
             bd = e_border_new(con, e->win, 0);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_menu.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- e_menu.h    2 Jan 2005 02:39:43 -0000       1.4
+++ e_menu.h    3 Jan 2005 09:34:24 -0000       1.5
@@ -23,7 +23,7 @@
    
    Evas_List           *items;
 
-   /* the container it belongs to */
+   /* the zone it belongs to */
    E_Container         *con;
    
    /* if a menu item spawned this menu, what item is it? */




-------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to