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