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