Enlightenment CVS committal Author : sebastid Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_border.c e_container.c e_container.h Log Message: Fix pager stacking issue. Maybe we should have a general stack event instead of lower/raise? =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v retrieving revision 1.371 retrieving revision 1.372 diff -u -3 -r1.371 -r1.372 --- e_border.c 29 Aug 2005 23:04:21 -0000 1.371 +++ e_border.c 29 Aug 2005 23:43:58 -0000 1.372 @@ -771,41 +771,63 @@ void e_border_raise(E_Border *bd) { + E_Border *above; + E_OBJECT_CHECK(bd); E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE); - e_container_border_raise(bd); - + above = e_container_border_raise(bd); + if (above) { E_Event_Border_Raise *ev; - ev = calloc(1, sizeof(E_Event_Border_Raise)); ev->border = bd; e_object_ref(E_OBJECT(bd)); -// e_object_breadcrumb_add(E_OBJECT(bd), "border_raise_event"); - ev->above = NULL; + ev->above = above; + e_object_ref(E_OBJECT(above)); ecore_event_add(E_EVENT_BORDER_RAISE, ev, _e_border_event_border_raise_free, NULL); } + else + { + /* If the border hasn't been raised above anything, it is actually lowered */ + E_Event_Border_Lower *ev; + ev = calloc(1, sizeof(E_Event_Border_Lower)); + ev->border = bd; + e_object_ref(E_OBJECT(bd)); + ev->below = NULL; + ecore_event_add(E_EVENT_BORDER_LOWER, ev, _e_border_event_border_lower_free, NULL); + } } void e_border_lower(E_Border *bd) { + E_Border *below; + E_OBJECT_CHECK(bd); E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE); - e_container_border_lower(bd); - + below = e_container_border_lower(bd); + if (below) { E_Event_Border_Lower *ev; - ev = calloc(1, sizeof(E_Event_Border_Lower)); ev->border = bd; e_object_ref(E_OBJECT(bd)); -// e_object_breadcrumb_add(E_OBJECT(bd), "border_lower_event"); - ev->below = NULL; + ev->below = below; + e_object_ref(E_OBJECT(below)); ecore_event_add(E_EVENT_BORDER_LOWER, ev, _e_border_event_border_lower_free, NULL); } + else + { + /* If the border hasn't been lowered below anything, it is actually raised */ + E_Event_Border_Raise *ev; + ev = calloc(1, sizeof(E_Event_Border_Raise)); + ev->border = bd; + e_object_ref(E_OBJECT(bd)); + ev->above = NULL; + ecore_event_add(E_EVENT_BORDER_RAISE, ev, _e_border_event_border_raise_free, NULL); + } } void @@ -6292,7 +6314,7 @@ bd->layer = 150; e_hints_window_stacking_set(bd, E_STACKING_ABOVE); } - e_container_border_raise(bd); + e_border_raise(bd); } static void @@ -6306,7 +6328,7 @@ bd->layer = 50; e_hints_window_stacking_set(bd, E_STACKING_BELOW); } - e_container_border_raise(bd); + e_border_raise(bd); } static void @@ -6320,7 +6342,7 @@ bd->layer = 100; e_hints_window_stacking_set(bd, E_STACKING_NONE); } - e_container_border_raise(bd); + e_border_raise(bd); } static void =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_container.c,v retrieving revision 1.80 retrieving revision 1.81 diff -u -3 -r1.80 -r1.81 --- e_container.c 25 Aug 2005 13:41:26 -0000 1.80 +++ e_container.c 29 Aug 2005 23:43:58 -0000 1.81 @@ -645,9 +645,11 @@ con->layers[pos].win, ECORE_X_WINDOW_STACK_ABOVE); } -void +E_Border * e_container_border_raise(E_Border *bd) { + E_Border *above = NULL; + Evas_List *l; int pos, i; /* Remove from old layer */ @@ -674,12 +676,33 @@ bd->zone->container->layers[pos - 1].clients = evas_list_append(bd->zone->container->layers[pos - 1].clients, bd); + /* Find the window below this one */ + l = evas_list_find_list(bd->zone->container->layers[pos - 1].clients, bd); + if (l->prev) + above = l->prev->data; + else + { + /* Need to check the layers below */ + for (i = pos - 2; i >= 0; i--) + { + if ((bd->zone->container->layers[i].clients) && + (l = evas_list_last(bd->zone->container->layers[i].clients))) + { + above = l->data; + break; + } + } + } + e_hints_client_stacking_set(); + return above; } -void +E_Border * e_container_border_lower(E_Border *bd) { + E_Border *below = NULL; + Evas_List *l; int pos, i; /* Remove from old layer */ @@ -706,7 +729,25 @@ bd->zone->container->layers[pos].clients = evas_list_prepend(bd->zone->container->layers[pos].clients, bd); + /* Find the window above this one */ + l = evas_list_find_list(bd->zone->container->layers[pos].clients, bd); + if (l->next) + below = l->next->data; + else + { + /* Need to check the layers above */ + for (i = pos + 1; i < 7; i++) + { + if (bd->zone->container->layers[i].clients) + { + below = bd->zone->container->layers[i].clients->data; + break; + } + } + } + e_hints_client_stacking_set(); + return below; } void =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_container.h,v retrieving revision 1.30 retrieving revision 1.31 diff -u -3 -r1.30 -r1.31 --- e_container.h 25 Aug 2005 13:41:26 -0000 1.30 +++ e_container.h 29 Aug 2005 23:43:58 -0000 1.31 @@ -134,8 +134,8 @@ EAPI void e_container_border_remove(E_Border *bd); EAPI void e_container_window_raise(E_Container *con, Ecore_X_Window, int layer); EAPI void e_container_window_lower(E_Container *con, Ecore_X_Window, int layer); -EAPI void e_container_border_raise(E_Border *bd); -EAPI void e_container_border_lower(E_Border *bd); +EAPI E_Border *e_container_border_raise(E_Border *bd); +EAPI E_Border *e_container_border_lower(E_Border *bd); EAPI void e_container_border_stack_above(E_Border *bd, E_Border *above); EAPI void e_container_border_stack_below(E_Border *bd, E_Border *below); ------------------------------------------------------- SF.Net email is Sponsored by the Better Software Conference & EXPO September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs