Enlightenment CVS committal

Author  : handyande
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_main.c e_atoms.c e_atoms.h e_border.c e_desk.c e_desk.h 


Log Message:
Remeber border hints when restarting (or recovering) E. This is currently set 
on all windows all the time in case of crash - it could be moved to being set 
on E shutdown (before a restart)
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_main.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -3 -r1.34 -r1.35
--- e_main.c    20 Jan 2005 13:42:51 -0000      1.34
+++ e_main.c    20 Jan 2005 14:01:31 -0000      1.35
@@ -504,24 +504,52 @@
          {
             /* FIXME: move this to an actual function to start managing */
             Ecore_X_Window *windows;
-            int num;
+            int wnum;
             
-            windows = ecore_x_window_children_get(con->manager->root, &num);
+            windows = ecore_x_window_children_get(con->manager->root, &wnum);
             if (windows)
               {
                  int i;
                  
-                 for (i = 0; i < num; i++)
+                 for (i = 0; i < wnum; i++)
                    {
                       Ecore_X_Window_Attributes att;
+                      unsigned int ret_val, deskxy[2];
+                      int ret;
                       
                       ecore_x_window_attributes_get(windows[i], &att);
-                      if ((att.visible) && (!att.override) && 
-                          (!att.input_only))
+                      ret = ecore_x_window_prop_card32_get(windows[i],
+                                                           E_ATOM_MANAGED,
+                                                           &ret_val, 1);
+                      if (((att.visible) && (!att.override) && 
+                          (!att.input_only)) || (ret > -1 && ret_val == 1))
                         {
                            E_Border *bd;
+
+                           /* get all information from window before it is 
+                            * reset by e_border_new */
+                           ret = ecore_x_window_prop_card32_get(windows[i],
+                                                                E_ATOM_DESK,
+                                                                deskxy, 2);
                            bd = e_border_new(con, windows[i], 1);
-                           if (bd) e_border_show(bd);
+                           if (bd)
+                             {
+                                 if (ret == 2)
+                                   {
+                                       E_Desk *target;
+                                       target = e_desk_at_xy_get(bd->zone,
+                                                                 deskxy[0],
+                                                                 deskxy[1]);
+                                       e_border_desk_set(bd, target);
+                                       if (target == 
e_desk_current_get(bd->zone))
+                                         e_border_show(bd);
+                                   }
+                             }
+                           ret = ecore_x_window_prop_card32_get(windows[i],
+                                                                E_ATOM_ICONIC,
+                                                                &ret_val, 1);
+                           if ((ret > -1) && ret_val)
+                             e_border_iconify(bd);
                         }
                    }
               }
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_atoms.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- e_atoms.c   5 Dec 2004 09:30:59 -0000       1.2
+++ e_atoms.c   20 Jan 2005 14:01:31 -0000      1.3
@@ -1,12 +1,18 @@
 #include "e.h"
 
 /* Atoms */
-/* There are no e17 specific atoms defined yet */
+Ecore_X_Atom E_ATOM_MANAGED = 0;
+Ecore_X_Atom E_ATOM_DESK = 0;
+Ecore_X_Atom E_ATOM_ICONIC = 0;
 
 /* externally accessible functions */
 int
 e_atoms_init(void)
 {
+   E_ATOM_MANAGED = ecore_x_atom_get("__E_WINDOW_MANAGED");
+   E_ATOM_DESK = ecore_x_atom_get("__E_WINDOW_DESK");
+   E_ATOM_ICONIC = ecore_x_atom_get("__E_WINDOW_ICONIC");
+
    return 1;
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_atoms.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- e_atoms.h   12 Jan 2005 16:03:08 -0000      1.3
+++ e_atoms.h   20 Jan 2005 14:01:31 -0000      1.4
@@ -3,6 +3,13 @@
 #ifndef E_ATOMS_H
 #define E_ATOMS_H
 
+/* an "overall" atom to see that we recognise the window */
+extern Ecore_X_Atom E_ATOM_MANAGED;
+
+/* basic window properties */
+extern Ecore_X_Atom E_ATOM_DESK;
+extern Ecore_X_Atom E_ATOM_ICONIC;
+
 EAPI int    e_atoms_init(void);
 EAPI int    e_atoms_shutdown(void);
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -3 -r1.77 -r1.78
--- e_border.c  20 Jan 2005 13:42:51 -0000      1.77
+++ e_border.c  20 Jan 2005 14:01:31 -0000      1.78
@@ -153,6 +153,8 @@
 {
    E_Border *bd;
    Ecore_X_Window_Attributes *att;
+   unsigned int managed, desk[2];
+   int deskx, desky;
    
    bd = E_OBJECT_ALLOC(E_Border, _e_border_free);
    if (!bd) return NULL;
@@ -277,6 +279,13 @@
    con->clients = evas_list_append(con->clients, bd);
    borders = evas_list_append(borders, bd);
 
+   managed = 1;
+   ecore_x_window_prop_card32_set(win, E_ATOM_MANAGED, &managed, 1);
+   e_desk_xy_get(bd->desk, &deskx, &desky);
+   desk[0] = deskx;
+   desk[1] = desky;
+   ecore_x_window_prop_card32_set(win, E_ATOM_DESK, desk, 2);
+
    return bd;
 }
 
@@ -284,6 +293,8 @@
 e_border_desk_set(E_Border *bd, E_Desk *desk)
 {
    E_Event_Border_Desk_Set *ev;
+   int deskx, desky;
+   unsigned int deskpos[2];
    
    E_OBJECT_CHECK(bd);
    E_OBJECT_CHECK(desk);
@@ -300,6 +311,11 @@
    ev->desk = desk;
    e_object_ref(E_OBJECT(desk));
    ecore_event_add(E_EVENT_BORDER_DESK_SET, ev, 
_e_border_event_border_desk_set_free, NULL);   
+   
+   e_desk_xy_get(desk, &deskx, &desky);
+   deskpos[0] = deskx;
+   deskpos[1] = desky;
+   ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_DESK, deskpos, 2);
 }
 
 void
@@ -777,6 +793,7 @@
 void
 e_border_iconify(E_Border *bd)
 {
+   unsigned int iconic;
    E_OBJECT_CHECK(bd);
    if ((bd->shading)) return;
    if (!bd->iconic)
@@ -785,12 +802,15 @@
        e_border_hide(bd);
        edje_object_signal_emit(bd->bg_object, "iconify", "");
      }
+   iconic = 1;
+   ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_ICONIC, &iconic, 1);
 }
 
 void
 e_border_uniconify(E_Border *bd)
 {
    E_Desk *desk;
+   unsigned int iconic;
    
    E_OBJECT_CHECK(bd);
    if ((bd->shading)) return;
@@ -804,6 +824,8 @@
        e_iconify_border_remove(bd);
        edje_object_signal_emit(bd->bg_object, "uniconify", "");
      }
+   iconic = 0;
+   ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_ICONIC, &iconic, 1);
 }
 
 void
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_desk.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- e_desk.c    20 Jan 2005 10:42:09 -0000      1.15
+++ e_desk.c    20 Jan 2005 14:01:31 -0000      1.16
@@ -139,6 +139,31 @@
 }
 
 void
+e_desk_xy_get(E_Desk *desk, int *x, int *y)
+{
+   int xx, yy;
+
+   E_OBJECT_CHECK(zone);
+   E_OBJECT_CHECK(desk);
+
+   for (xx = 0; xx < desk->zone->desk_x_count; xx++)
+     {
+       for (yy = 0; yy < desk->zone->desk_y_count; yy++)
+         {
+            E_Desk *next;
+            next = e_desk_at_xy_get(desk->zone, xx, yy);
+
+            if (next == desk)
+              {
+                 *x = xx;
+                 *y = yy;
+                 return;
+              }
+         }
+     }
+}
+
+void
 e_desk_next(E_Zone *zone)
 {
    Evas_List   *l;
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_desk.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- e_desk.h    12 Jan 2005 16:03:08 -0000      1.7
+++ e_desk.h    20 Jan 2005 14:01:31 -0000      1.8
@@ -27,6 +27,7 @@
 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_xy_get(E_Desk *desk, 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);




-------------------------------------------------------
This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
Tool for open source databases. Create drag-&-drop reports. Save time
by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
Download a FREE copy at http://www.intelliview.com/go/osdn_nl
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to