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

Reply via email to