Enlightenment CVS committal
Author : kwo
Project : e16
Module : e
Dir : e16/e/src
Modified Files:
borders.c desktops.c
Log Message:
Fix raise/lower for windows with transients.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/borders.c,v
retrieving revision 1.151
retrieving revision 1.152
diff -u -3 -r1.151 -r1.152
--- borders.c 21 Mar 2004 01:39:39 -0000 1.151
+++ borders.c 22 Mar 2004 16:42:31 -0000 1.152
@@ -559,7 +559,7 @@
/* add it to our list of managed clients */
AddItem(ewin, "EWIN", ewin->client.win, LIST_TYPE_EWIN);
- DesktopAddEwinToTop(ewin);
+
/* if the window asked to be iconified at the start */
if (ewin->iconified)
{
@@ -1385,9 +1385,8 @@
if (ewin->client.transient)
{
- ewin2 =
- FindItem(NULL, ewin->client.transient_for, LIST_FINDBY_ID,
- LIST_TYPE_EWIN);
+ ewin2 = FindItem(NULL, ewin->client.transient_for, LIST_FINDBY_ID,
+ LIST_TYPE_EWIN);
if (ewin2)
{
ewin2->has_transients--;
@@ -1881,6 +1880,9 @@
{
EDBUG(3, "RestackEwin");
+ if (EventDebug(EDBUG_TYPE_RAISELOWER))
+ printf("RestackEwin %#lx %s\n", ewin->client.win, EwinGetTitle(ewin));
+
if (ewin->floating)
{
XRaiseWindow(disp, ewin->win);
@@ -1901,41 +1903,44 @@
RaiseEwin(EWin * ewin)
{
static int call_depth = 0;
+ EWin **lst;
+ int i, num;
EDBUG(3, "RaiseEwin");
if (call_depth > 256)
EDBUG_RETURN_;
call_depth++;
-#if 0
- printf("RaiseEwin %#lx %s\n", ewin->client.win, EwinGetTitle(ewin));
-#endif
+ if (EventDebug(EDBUG_TYPE_RAISELOWER))
+ printf("RaiseEwin(%d) %#lx %s\n", call_depth, ewin->client.win,
+ EwinGetTitle(ewin));
+
if (ewin->win)
{
if (ewin->floating)
{
XRaiseWindow(disp, ewin->win);
+ goto done;
}
- else
- {
- DesktopAddEwinToTop(ewin);
- if (ewin->has_transients)
- {
- EWin **lst;
- int i, num;
- lst = ListTransientsFor(ewin->client.win, &num);
- if (lst)
- {
- for (i = 0; i < num; i++)
- DesktopAddEwinToTop(lst[i]);
- Efree(lst);
- }
- }
- RestackEwin(ewin);
+ num = EwinListStackingRaise(ewin);
+ if (num == 0) /* Quit if stacking is unchanged */
+ goto done;
+
+ if (ewin->has_transients)
+ {
+ lst = ListTransientsFor(ewin->client.win, &num);
+ for (i = 0; i < num; i++)
+ RaiseEwin(lst[i]);
+ if (lst)
+ Efree(lst);
}
+
+ if (call_depth == 1)
+ RestackEwin(ewin);
}
+ done:
call_depth--;
EDBUG_RETURN_;
}
@@ -1944,34 +1949,38 @@
LowerEwin(EWin * ewin)
{
static int call_depth = 0;
+ EWin *ewin2;
+ int num;
EDBUG(3, "LowerEwin");
if (call_depth > 256)
EDBUG_RETURN_;
call_depth++;
-#if 0
- printf("LowerEwin %#lx %s\n", ewin->client.win, EwinGetTitle(ewin));
-#endif
+ if (EventDebug(EDBUG_TYPE_RAISELOWER))
+ printf("LowerEwin(%d) %#lx %s\n", call_depth, ewin->client.win,
+ EwinGetTitle(ewin));
+
if ((ewin->win) && (!ewin->floating))
{
- if (ewin->has_transients)
- {
- EWin **lst;
- int i, num;
+ num = EwinListStackingLower(ewin);
+ if (num == 0) /* Quit if stacking is unchanged */
+ goto done;
- lst = ListTransientsFor(ewin->client.win, &num);
- if (lst)
- {
- for (i = 0; i < num; i++)
- DesktopAddEwinToBottom(lst[i]);
- Efree(lst);
- }
+ if (ewin->client.transient_for)
+ {
+ ewin2 = FindItem(NULL, ewin->client.transient_for, LIST_FINDBY_ID,
+ LIST_TYPE_EWIN);
+ if (ewin2 == NULL) /* Should never happen */
+ goto done;
+ LowerEwin(ewin2);
}
- DesktopAddEwinToBottom(ewin);
- RestackEwin(ewin);
+
+ if (call_depth == 1)
+ RestackEwin(ewin);
}
+ done:
call_depth--;
EDBUG_RETURN_;
}
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/desktops.c,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -3 -r1.75 -r1.76
--- desktops.c 21 Mar 2004 01:39:40 -0000 1.75
+++ desktops.c 22 Mar 2004 16:42:31 -0000 1.76
@@ -1112,7 +1112,11 @@
if ((ewin->iconified) && (ewin->parent != desks.desk[ewin->desktop].win))
{
ewin->parent = desks.desk[ewin->desktop].win;
+#if 0
DesktopAddEwinToTop(ewin);
+#else
+ EwinListStackingRaise(ewin);
+#endif
EReparentWindow(disp, ewin->win, desks.desk[ewin->desktop].win, ewin->x,
ewin->y);
ICCCM_Configure(ewin);
@@ -1135,7 +1139,11 @@
else if (ewin->parent != desks.desk[ewin->desktop].win)
{
ewin->parent = desks.desk[ewin->desktop].win;
+#if 0
DesktopAddEwinToTop(ewin);
+#else
+ EwinListStackingRaise(ewin);
+#endif
EReparentWindow(disp, ewin->win, desks.desk[ewin->desktop].win, ewin->x,
ewin->y);
StackDesktops();
@@ -1701,7 +1709,6 @@
ewin->floating = 0;
pdesk = ewin->desktop;
ewin->desktop = DESKTOPS_WRAP_NUM(desk);
- DesktopAddEwinToTop(ewin);
ConformEwinToDesktop(ewin);
if (ewin->has_transients)
{
@@ -1723,6 +1730,7 @@
EDBUG_RETURN_;
}
+#if 0
void
DesktopAddEwinToTop(EWin * ewin)
{
@@ -1752,6 +1760,7 @@
EDBUG_RETURN_;
}
+#endif
void
MoveEwinToDesktopAt(EWin * ewin, int desk, int x, int y)
@@ -1765,7 +1774,6 @@
{
ForceUpdatePagersForDesktop(ewin->desktop);
ewin->desktop = DESKTOPS_WRAP_NUM(desk);
- DesktopAddEwinToTop(ewin);
}
dx = x - ewin->x;
dy = y - ewin->y;
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs