Enlightenment CVS committal
Author : sebastid
Project : e17
Module : apps/e
Dir : e17/apps/e/src/bin
Modified Files:
e_border.c e_border.h
Log Message:
Merge Raise/Lower event to Stack event.
Fix raise/lower order.
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.395
retrieving revision 1.396
diff -u -3 -r1.395 -r1.396
--- e_border.c 7 Sep 2005 04:45:35 -0000 1.395
+++ e_border.c 7 Sep 2005 14:55:46 -0000 1.396
@@ -98,8 +98,7 @@
static void _e_border_event_border_remove_free(void *data, void *ev);
static void _e_border_event_border_zone_set_free(void *data, void *ev);
static void _e_border_event_border_desk_set_free(void *data, void *ev);
-static void _e_border_event_border_raise_free(void *data, void *ev);
-static void _e_border_event_border_lower_free(void *data, void *ev);
+static void _e_border_event_border_stack_free(void *data, void *ev);
static void _e_border_event_border_icon_change_free(void *data, void *ev);
static void _e_border_event_border_resize_free(void *data, void *ev);
static void _e_border_event_border_move_free(void *data, void *ev);
@@ -150,8 +149,7 @@
int E_EVENT_BORDER_UNICONIFY = 0;
int E_EVENT_BORDER_STICK = 0;
int E_EVENT_BORDER_UNSTICK = 0;
-int E_EVENT_BORDER_RAISE = 0;
-int E_EVENT_BORDER_LOWER = 0;
+int E_EVENT_BORDER_STACK = 0;
int E_EVENT_BORDER_ICON_CHANGE = 0;
#define GRAV_SET(bd, grav) \
@@ -199,8 +197,7 @@
E_EVENT_BORDER_UNICONIFY = ecore_event_type_new();
E_EVENT_BORDER_STICK = ecore_event_type_new();
E_EVENT_BORDER_UNSTICK = ecore_event_type_new();
- E_EVENT_BORDER_RAISE = ecore_event_type_new();
- E_EVENT_BORDER_LOWER = ecore_event_type_new();
+ E_EVENT_BORDER_STACK = ecore_event_type_new();
E_EVENT_BORDER_ICON_CHANGE = ecore_event_type_new();
return 1;
@@ -831,133 +828,282 @@
void
e_border_raise(E_Border *bd)
{
- E_Border *above;
+ E_Event_Border_Stack *ev;
+ E_Border *last = NULL;
+ Evas_List *l;
E_OBJECT_CHECK(bd);
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
-
- 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));
- 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);
- }
if (e_config->transient.raise)
{
- Evas_List *l;
- for (l = bd->transients; l; l = l->next)
+ for (l = evas_list_last(bd->transients); l; l = l->prev)
{
E_Border *child;
child = l->data;
- /* Don't raise iconic transients. If the user wants these shown,
+ /* Don't stack iconic transients. If the user wants these shown,
* thats another option.
*/
if (!child->iconic)
- e_border_stack_above(child, bd);
+ {
+ printf("raise: %p %p\n", child, last);
+ if (last)
+ e_border_stack_below(child, last);
+ else
+ {
+ E_Border *above;
+
+ /* First raise the border to find out which border we
will end up above */
+ above = e_container_border_raise(child);
+
+ if (above)
+ {
+ /* We ended up above a border, now we must stack
this border to
+ * generate the stacking event, and to check if
this transient
+ * has other transients etc.
+ */
+ e_border_stack_above(child, above);
+ }
+ else
+ {
+ /* If we didn't end up above any border, we are on
the bottom! */
+ e_border_lower(child);
+ }
+ }
+ last = child;
+ }
+ }
+ }
+
+ ev = calloc(1, sizeof(E_Event_Border_Stack));
+ ev->border = bd;
+ e_object_ref(E_OBJECT(bd));
+
+ if (last)
+ {
+ printf("below: %p %p\n", bd, last);
+ e_container_border_stack_below(bd, last);
+ ev->stack = last;
+ e_object_ref(E_OBJECT(last));
+ ev->type = E_STACKING_BELOW;
+ }
+ else
+ {
+ printf("above: %p %p\n", bd, last);
+ E_Border *above;
+
+ /* If we don't have any children, raise this border */
+ above = e_container_border_raise(bd);
+ if (above)
+ {
+ /* We ended up above a border */
+ ev->stack = above;
+ e_object_ref(E_OBJECT(above));
+ ev->type = E_STACKING_ABOVE;
+ }
+ else
+ {
+ /* No border to raise above, same as a lower! */
+ ev->stack = NULL;
+ ev->type = E_STACKING_BELOW;
}
}
+
+ ecore_event_add(E_EVENT_BORDER_STACK, ev,
_e_border_event_border_stack_free, NULL);
}
void
e_border_lower(E_Border *bd)
{
- E_Border *below;
+ E_Event_Border_Stack *ev;
+ E_Border *last = NULL;
+ Evas_List *l;
E_OBJECT_CHECK(bd);
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
- 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));
- 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);
- }
if (e_config->transient.lower)
{
- Evas_List *l;
- for (l = bd->transients; l; l = l->next)
+ for (l = evas_list_last(bd->transients); l; l = l->prev)
{
E_Border *child;
child = l->data;
- e_border_stack_above(child, bd);
+ /* Don't stack iconic transients. If the user wants these shown,
+ * thats another option.
+ */
+ if (!child->iconic)
+ {
+ if (last)
+ e_border_stack_below(child, last);
+ else
+ {
+ E_Border *below;
+
+ /* First lower the border to find out which border we
will end up below */
+ below = e_container_border_lower(child);
+
+ if (below)
+ {
+ /* We ended up below a border, now we must stack
this border to
+ * generate the stacking event, and to check if
this transient
+ * has other transients etc.
+ */
+ e_border_stack_below(child, below);
+ }
+ else
+ {
+ /* If we didn't end up below any border, we are on
top! */
+ e_border_raise(child);
+ }
+ }
+ last = child;
+ }
+ }
+ }
+
+ ev = calloc(1, sizeof(E_Event_Border_Stack));
+ ev->border = bd;
+ e_object_ref(E_OBJECT(bd));
+
+ if (last)
+ {
+ e_container_border_stack_below(bd, last);
+ ev->stack = last;
+ e_object_ref(E_OBJECT(last));
+ ev->type = E_STACKING_BELOW;
+ }
+ else
+ {
+ E_Border *below;
+
+ /* If we don't have any children, lower this border */
+ below = e_container_border_lower(bd);
+ if (below)
+ {
+ /* We ended up below a border */
+ ev->stack = below;
+ e_object_ref(E_OBJECT(below));
+ ev->type = E_STACKING_BELOW;
+ }
+ else
+ {
+ /* No border to hide under, same as a raise! */
+ ev->stack = NULL;
+ ev->type = E_STACKING_ABOVE;
}
}
+
+ ecore_event_add(E_EVENT_BORDER_STACK, ev,
_e_border_event_border_stack_free, NULL);
}
void
e_border_stack_above(E_Border *bd, E_Border *above)
{
+ /* TODO: Should stack above allow the border to change level */
+ E_Event_Border_Stack *ev;
+ E_Border *last = NULL;
+ Evas_List *l;
+
E_OBJECT_CHECK(bd);
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
- e_container_border_stack_above(bd, above);
+ if (e_config->transient.raise)
+ {
+ for (l = evas_list_last(bd->transients); l; l = l->prev)
+ {
+ E_Border *child;
+ child = l->data;
+ /* Don't stack iconic transients. If the user wants these shown,
+ * thats another option.
+ */
+ if (!child->iconic)
+ {
+ if (last)
+ e_border_stack_below(child, last);
+ else
+ e_border_stack_above(child, above);
+ last = child;
+ }
+ }
+ }
+
+ ev = calloc(1, sizeof(E_Event_Border_Stack));
+ ev->border = bd;
+ e_object_ref(E_OBJECT(bd));
+
+ if (last)
{
- 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 = above;
+ e_container_border_stack_below(bd, last);
+ ev->stack = last;
+ e_object_ref(E_OBJECT(last));
+ ev->type = E_STACKING_BELOW;
+ }
+ else
+ {
+ e_container_border_stack_above(bd, above);
+ ev->stack = above;
e_object_ref(E_OBJECT(above));
-// e_object_breadcrumb_add(E_OBJECT(above), "border_raise_event.above");
- ecore_event_add(E_EVENT_BORDER_RAISE, ev,
_e_border_event_border_raise_free, NULL);
+ ev->type = E_STACKING_ABOVE;
}
+
+ ecore_event_add(E_EVENT_BORDER_STACK, ev,
_e_border_event_border_stack_free, NULL);
}
void
e_border_stack_below(E_Border *bd, E_Border *below)
{
+ /* TODO: Should stack below allow the border to change level */
+ E_Event_Border_Stack *ev;
+ E_Border *last = NULL;
+ Evas_List *l;
+
E_OBJECT_CHECK(bd);
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
- e_container_border_stack_below(bd, below);
+ if (e_config->transient.lower)
{
- 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 = below;
+ for (l = evas_list_last(bd->transients); l; l = l->prev)
+ {
+ E_Border *child;
+
+ child = l->data;
+ /* Don't stack iconic transients. If the user wants these shown,
+ * thats another option.
+ */
+ if (!child->iconic)
+ {
+ if (last)
+ e_border_stack_below(child, last);
+ else
+ e_border_stack_below(child, below);
+ last = child;
+ }
+ }
+ }
+
+ ev = calloc(1, sizeof(E_Event_Border_Stack));
+ ev->border = bd;
+ e_object_ref(E_OBJECT(bd));
+
+ if (last)
+ {
+ e_container_border_stack_below(bd, last);
+ ev->stack = last;
+ e_object_ref(E_OBJECT(last));
+ ev->type = E_STACKING_BELOW;
+ }
+ else
+ {
+ e_container_border_stack_below(bd, below);
+ ev->stack = below;
e_object_ref(E_OBJECT(below));
-// e_object_breadcrumb_add(E_OBJECT(below), "border_lower_event.below");
- ecore_event_add(E_EVENT_BORDER_LOWER, ev,
_e_border_event_border_lower_free, NULL);
+ ev->type = E_STACKING_BELOW;
}
+
+ ecore_event_add(E_EVENT_BORDER_STACK, ev,
_e_border_event_border_stack_free, NULL);
}
void
@@ -6787,33 +6933,17 @@
}
static void
-_e_border_event_border_raise_free(void *data, void *ev)
+_e_border_event_border_stack_free(void *data, void *ev)
{
- E_Event_Border_Raise *e;
+ E_Event_Border_Stack *e;
e = ev;
// e_object_breadcrumb_del(E_OBJECT(e->border), "border_raise_event");
e_object_unref(E_OBJECT(e->border));
- if (e->above)
+ if (e->stack)
{
// e_object_breadcrumb_del(E_OBJECT(e->above), "border_raise_event.above");
- e_object_unref(E_OBJECT(e->above));
- }
- free(e);
-}
-
-static void
-_e_border_event_border_lower_free(void *data, void *ev)
-{
- E_Event_Border_Lower *e;
-
- e = ev;
-// e_object_breadcrumb_del(E_OBJECT(e->border), "border_lower_event");
- e_object_unref(E_OBJECT(e->border));
- if (e->below)
- {
-// e_object_breadcrumb_del(E_OBJECT(e->below), "border_lower_event.below");
- e_object_unref(E_OBJECT(e->below));
+ e_object_unref(E_OBJECT(e->stack));
}
free(e);
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v
retrieving revision 1.109
retrieving revision 1.110
diff -u -3 -r1.109 -r1.110
--- e_border.h 2 Sep 2005 09:56:01 -0000 1.109
+++ e_border.h 7 Sep 2005 14:55:46 -0000 1.110
@@ -74,8 +74,7 @@
typedef struct _E_Event_Border_Unstick E_Event_Border_Unstick;
typedef struct _E_Event_Border_Zone_Set E_Event_Border_Zone_Set;
typedef struct _E_Event_Border_Desk_Set E_Event_Border_Desk_Set;
-typedef struct _E_Event_Border_Raise E_Event_Border_Raise;
-typedef struct _E_Event_Border_Lower E_Event_Border_Lower;
+typedef struct _E_Event_Border_Stack E_Event_Border_Stack;
typedef struct _E_Event_Border_Icon_Change E_Event_Border_Icon_Change;
#else
@@ -463,14 +462,10 @@
E_Desk *desk;
};
-struct _E_Event_Border_Raise
+struct _E_Event_Border_Stack
{
- E_Border *border, *above;
-};
-
-struct _E_Event_Border_Lower
-{
- E_Border *border, *below;
+ E_Border *border, *stack;
+ E_Stacking type;
};
struct _E_Event_Border_Icon_Change
@@ -557,8 +552,7 @@
extern EAPI int E_EVENT_BORDER_UNSTICK;
extern EAPI int E_EVENT_BORDER_ZONE_SET;
extern EAPI int E_EVENT_BORDER_DESK_SET;
-extern EAPI int E_EVENT_BORDER_RAISE;
-extern EAPI int E_EVENT_BORDER_LOWER;
+extern EAPI int E_EVENT_BORDER_STACK;
extern EAPI int E_EVENT_BORDER_ICON_CHANGE;
#endif
-------------------------------------------------------
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