Enlightenment CVS committal
Author : kwo
Project : e16
Module : e
Dir : e16/e/src
Modified Files:
E.h desktops.c eobj.c stacking.c
Log Message:
Fix desktop stacking, cleanups.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.340
retrieving revision 1.341
diff -u -3 -r1.340 -r1.341
--- E.h 6 Jan 2005 00:01:26 -0000 1.340
+++ E.h 8 Jan 2005 08:31:55 -0000 1.341
@@ -377,7 +377,6 @@
typedef struct _eobj EObj;
typedef struct _ewin EWin;
-typedef struct _edesk Desk;
typedef struct _menu Menu;
typedef struct _menuitem MenuItem;
typedef struct _menustyle MenuStyle;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/desktops.c,v
retrieving revision 1.108
retrieving revision 1.109
diff -u -3 -r1.108 -r1.109
--- desktops.c 2 Jan 2005 15:38:51 -0000 1.108
+++ desktops.c 8 Jan 2005 08:31:55 -0000 1.109
@@ -29,17 +29,16 @@
EnterWindowMask | LeaveWindowMask | PointerMotionMask | ButtonMotionMask | \
SubstructureNotifyMask | SubstructureRedirectMask | PropertyChangeMask)
-struct _edesk
+typedef struct
{
+ EObj o;
char viewable;
- Window win;
- int x, y;
Background *bg;
Button *tag;
int current_area_x;
int current_area_y;
long event_mask;
-};
+} Desk;
#define ENLIGHTENMENT_CONF_NUM_DESKTOPS 32
@@ -56,22 +55,24 @@
/* The desktops */
static Desktops desks;
+#define _DeskGet(d) (&desks.desk[d])
+
Window
DeskGetWin(int desk)
{
- return desks.desk[desk].win;
+ return EoGetWin(_DeskGet(desk));
}
int
DeskGetX(int desk)
{
- return desks.desk[desk].x;
+ return EoGetX(_DeskGet(desk));
}
int
DeskGetY(int desk)
{
- return desks.desk[desk].y;
+ return EoGetY(_DeskGet(desk));
}
Background *
@@ -149,36 +150,33 @@
}
static void
-DesktopInit(unsigned int dsk)
+DesktopInit(unsigned int desk)
{
Desk *d;
+ Window win;
- if (dsk >= ENLIGHTENMENT_CONF_NUM_DESKTOPS)
+ if (desk >= ENLIGHTENMENT_CONF_NUM_DESKTOPS)
return;
- d = &desks.desk[dsk];
- d->bg = NULL;
- desks.order[dsk] = dsk;
- d->tag = NULL;
- d->x = 0;
- d->y = 0;
- d->current_area_x = 0;
- d->current_area_y = 0;
- d->viewable = 0;
+ d = &desks.desk[desk];
+ memset(d, 0, sizeof(Desk));
+ desks.order[desk] = desk;
- if (dsk == 0)
- {
- d->win = VRoot.win;
- }
+ if (desk == 0)
+ win = VRoot.win;
else
+ win = ECreateWindow(VRoot.win, -VRoot.w, -VRoot.h, VRoot.w, VRoot.h, 0);
+
+ EobjInit(&d->o, EOBJ_TYPE_DESK, 0, 0, VRoot.w, VRoot.h);
+ EoSetWin(d, win);
+ EoSetLayer(d, 0);
+ EoDisableShadows(d);
+ if (desk > 0)
{
- d->win =
- ECreateWindow(VRoot.win, -VRoot.w, -VRoot.h, VRoot.w, VRoot.h, 0);
-#if 0 /* USE_COMPOSITE */
- EobjRegister(d->win, EOBJ_TYPE_DESK);
-#endif
+ EoSetFloating(d, 1);
+ EobjListStackAdd(&d->o, 0);
}
- EventCallbackRegister(d->win, 0, DesktopHandleEvents, d);
+ EventCallbackRegister(win, 0, DesktopHandleEvents, d);
}
static void
@@ -302,6 +300,8 @@
{
int i, j;
+ EobjListStackRaise(&desks.desk[num].o);
+
j = -1;
i = 0;
while ((j < 0) && (i < ENLIGHTENMENT_CONF_NUM_DESKTOPS))
@@ -325,6 +325,8 @@
{
int i, j;
+ EobjListStackLower(&desks.desk[num].o);
+
j = -1;
i = 0;
while ((j < 0) && (i < ENLIGHTENMENT_CONF_NUM_DESKTOPS))
@@ -368,6 +370,7 @@
void
RefreshDesktop(int desk)
{
+ Desk *d;
Background *bg;
desk = desk % ENLIGHTENMENT_CONF_NUM_DESKTOPS;
@@ -377,12 +380,14 @@
if (EventDebug(EDBUG_TYPE_DESKS))
Eprintf("RefreshDesktop %d\n", desk);
- bg = desks.desk[desk].bg;
+ d = _DeskGet(desk);
+
+ bg = d->bg;
if (!bg)
return;
- BackgroundApply(bg, desks.desk[desk].win, 1);
- HintsSetRootInfo(desks.desk[desk].win,
+ BackgroundApply(bg, EoGetWin(d), 1);
+ HintsSetRootInfo(EoGetWin(d),
BackgroundGetPixmap(bg), BackgroundGetColor(bg));
}
@@ -401,6 +406,7 @@
void
InitDesktopControls(void)
{
+ Desk *d;
int i;
ActionClass *ac, *ac2, *ac3;
ImageClass *ic, *ic2, *ic3, *ic4;
@@ -412,6 +418,8 @@
for (i = 0; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++)
{
+ d = _DeskGet(i);
+
Esnprintf(s, sizeof(s), "DRAGBAR_DESKTOP_%i", i);
ac = FindItem(s, 0, LIST_FINDBY_NAME, LIST_TYPE_ACLASS);
@@ -604,38 +612,36 @@
{
b = ButtonCreate("_DESKTOP_DESKRAY_DRAG_CONTROL", 2, ic4, ac,
NULL, NULL, 1, FLAG_FIXED_VERT, 1, 99999, 1,
- 99999, 0, 0, desks.desk[i].x, 0,
- desks.desk[i].y, 0, 0, 0, 0, 0, 1, 0, 1);
+ 99999, 0, 0, EoGetX(d), 0,
+ EoGetY(d), 0, 0, 0, 0, 0, 1, 0, 1);
}
else if (Conf.desks.dragdir == 1)
{
b = ButtonCreate("_DESKTOP_DESKRAY_DRAG_CONTROL", 2, ic4, ac,
NULL, NULL, 1, FLAG_FIXED_VERT, 1, 99999, 1,
99999, 0, 0,
- desks.desk[i].x + VRoot.w -
- Conf.desks.dragbar_width, 0, desks.desk[i].y,
+ EoGetX(d) + VRoot.w -
+ Conf.desks.dragbar_width, 0, EoGetY(d),
0, 0, 0, 0, 0, 1, 0, 1);
}
else if (Conf.desks.dragdir == 2)
{
b = ButtonCreate("_DESKTOP_DESKRAY_DRAG_CONTROL", 2, ic4, ac,
NULL, NULL, 1, FLAG_FIXED_HORIZ, 1, 99999, 1,
- 99999, 0, 0, desks.desk[i].x, 0,
- desks.desk[i].y, 0, 0, 0, 0, 0, 1, 0, 1);
+ 99999, 0, 0, EoGetX(d), 0,
+ EoGetY(d), 0, 0, 0, 0, 0, 1, 0, 1);
}
else
{
b = ButtonCreate("_DESKTOP_DESKRAY_DRAG_CONTROL", 2, ic4, ac,
NULL, NULL, 1, FLAG_FIXED_HORIZ, 1, 99999, 1,
- 99999, 0, 0, desks.desk[i].x, 0,
- desks.desk[i].y + VRoot.h -
+ 99999, 0, 0, EoGetX(d), 0,
+ EoGetY(d) + VRoot.h -
Conf.desks.dragbar_width, 0, 0, 0, 0, 0, 1,
0, 1);
}
- desks.desk[i].tag = b;
}
- else
- desks.desk[i].tag = NULL;
+ d->tag = b;
}
}
@@ -670,14 +676,14 @@
int
DesktopAt(int x, int y)
{
+ Desk *d;
int i;
for (i = 0; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++)
{
- if ((x >= desks.desk[desks.order[i]].x)
- && (x < (desks.desk[desks.order[i]].x + VRoot.w))
- && (y >= desks.desk[desks.order[i]].y)
- && (y < (desks.desk[desks.order[i]].y + VRoot.h)))
+ d = _DeskGet(desks.order[i]);
+ if (x >= EoGetX(d) && x < (EoGetX(d) + VRoot.w) &&
+ y >= EoGetY(d) && y < (EoGetY(d) + VRoot.h))
return desks.order[i];
}
return 0;
@@ -686,8 +692,12 @@
static void
MoveStickyWindowsToCurrentDesk(void)
{
+ Desk *d;
EWin *const *lst, *ewin;
- int i, num;
+ int i, num, desk;
+
+ desk = DesksGetCurrent();
+ d = _DeskGet(desk);
lst = EwinListStackGet(&num);
for (i = 0; i < num; i++)
@@ -696,8 +706,8 @@
if (!EoIsSticky(ewin))
continue;
- EoSetDesk(ewin, DesksGetCurrent());
- ewin->parent = desks.desk[DesksGetCurrent()].win;
+ EoSetDesk(ewin, desk);
+ ewin->parent = EoGetWin(d);
EReparentWindow(disp, EoGetWin(ewin), ewin->parent, VRoot.w, VRoot.h);
EMoveWindow(disp, EoGetWin(ewin), EoGetX(ewin), EoGetY(ewin));
HintsSetWindowArea(ewin);
@@ -726,6 +736,7 @@
GotoDesktop(int desk)
{
static int pdesk = -1;
+ Desk *d;
int x, y;
if (Conf.desks.desks_wraparound)
@@ -752,34 +763,36 @@
if (desk > 0)
{
+ d = _DeskGet(desk);
+
if (Conf.desks.slidein)
{
- if (!desks.desk[desk].viewable)
+ if (!d->viewable)
{
switch (Conf.desks.dragdir)
{
case 0:
MoveDesktop(desk, VRoot.w, 0);
RaiseDesktop(desk);
- SlideWindowTo(desks.desk[desk].win, VRoot.w, 0, 0, 0,
+ SlideWindowTo(EoGetWin(d), VRoot.w, 0, 0, 0,
Conf.desks.slidespeed);
break;
case 1:
MoveDesktop(desk, -VRoot.w, 0);
RaiseDesktop(desk);
- SlideWindowTo(desks.desk[desk].win, -VRoot.w, 0, 0, 0,
+ SlideWindowTo(EoGetWin(d), -VRoot.w, 0, 0, 0,
Conf.desks.slidespeed);
break;
case 2:
MoveDesktop(desk, 0, VRoot.h);
RaiseDesktop(desk);
- SlideWindowTo(desks.desk[desk].win, 0, VRoot.h, 0, 0,
+ SlideWindowTo(EoGetWin(d), 0, VRoot.h, 0, 0,
Conf.desks.slidespeed);
break;
case 3:
MoveDesktop(desk, 0, -VRoot.h);
RaiseDesktop(desk);
- SlideWindowTo(desks.desk[desk].win, 0, -VRoot.h, 0, 0,
+ SlideWindowTo(EoGetWin(d), 0, -VRoot.h, 0, 0,
Conf.desks.slidespeed);
break;
default:
@@ -788,9 +801,8 @@
}
else
{
- GetWinXY(desks.desk[desk].win, &x, &y);
- SlideWindowTo(desks.desk[desk].win, desks.desk[desk].x,
- desks.desk[desk].y, 0, 0,
+ GetWinXY(EoGetWin(d), &x, &y);
+ SlideWindowTo(EoGetWin(d), EoGetX(d), EoGetY(d), 0, 0,
Conf.desks.slidespeed);
RaiseDesktop(desk);
}
@@ -823,6 +835,7 @@
void
MoveDesktop(int desk, int x, int y)
{
+ Desk *d, *dd;
int i;
EWin *const *lst;
int n, v, dx, dy;
@@ -830,8 +843,9 @@
if (desk <= 0 || desk >= Conf.desks.num)
return;
- dx = x - desks.desk[desk].x;
- dy = y - desks.desk[desk].y;
+ d = _DeskGet(desk);
+ dx = x - EoGetX(d);
+ dy = y - EoGetY(d);
if ((x == 0) && (y == 0))
{
@@ -847,9 +861,10 @@
{
for (i = n + 1; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++)
{
- if (desks.desk[desks.order[i]].viewable)
- BackgroundTouch(desks.desk[desks.order[i]].bg);
- desks.desk[desks.order[i]].viewable = 0;
+ dd = _DeskGet(desks.order[i]);
+ if (dd->viewable)
+ BackgroundTouch(dd->bg);
+ dd->viewable = 0;
}
}
}
@@ -867,7 +882,8 @@
if (n >= 0)
{
- if (desks.desk[desks.order[n]].viewable)
+ dd = _DeskGet(desks.order[n]);
+ if (dd->viewable)
{
v = 1;
}
@@ -878,21 +894,20 @@
for (i = n + 1; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++)
{
-
- if ((!desks.desk[desks.order[i]].viewable) && (v))
+ dd = _DeskGet(desks.order[i]);
+ if ((!d->viewable) && (v))
{
- desks.desk[desks.order[i]].viewable = v;
+ d->viewable = v;
RefreshDesktop(desks.order[i]);
}
else
{
- if ((!v) && (desks.desk[desks.order[i]].viewable))
- BackgroundTouch(desks.desk[desks.order[i]].bg);
- desks.desk[desks.order[i]].viewable = v;
+ if ((!v) && (d->viewable))
+ BackgroundTouch(d->bg);
+ d->viewable = v;
}
- if ((desks.desk[desks.order[i]].x == 0)
- && (desks.desk[desks.order[i]].y == 0))
+ if (EoGetX(d) == 0 && EoGetY(d) == 0)
{
v = 0;
}
@@ -900,13 +915,13 @@
}
}
- EMoveWindow(disp, desks.desk[desk].win, x, y);
+ EMoveWindow(disp, EoGetWin(d), x, y);
- if (desks.desk[desk].tag)
- ButtonMoveRelative(desks.desk[desk].tag, dx, dy);
+ if (d->tag)
+ ButtonMoveRelative(d->tag, dx, dy);
- desks.desk[desk].x = x;
- desks.desk[desk].y = y;
+ EoGetX(d) = x;
+ EoGetY(d) = y;
lst = EwinListGetAll(&n);
for (i = 0; i < n; i++)
@@ -917,28 +932,35 @@
static void
UncoverDesktop(int desk)
{
+ Desk *d;
+
if (desk < 0 || desk >= Conf.desks.num)
return;
- desks.desk[desk].viewable = 1;
+ d = _DeskGet(desk);
+
+ d->viewable = 1;
RefreshDesktop(desk);
if (desk != 0)
- EMapWindow(disp, desks.desk[desk].win);
+ EMapWindow(disp, EoGetWin(d));
}
void
RaiseDesktop(int desk)
{
+ Desk *d;
int i;
if (desk < 0 || desk >= Conf.desks.num)
return;
+ d = _DeskGet(desk);
+
if (EventDebug(EDBUG_TYPE_DESKS))
Eprintf("RaiseDesktop %d\n", desk);
FocusNewDeskBegin();
- desks.desk[desk].viewable = 1;
+ d->viewable = 1;
RefreshDesktop(desk);
MoveToDeskTop(desk);
@@ -960,7 +982,7 @@
#endif
HandleDrawQueue();
HintsSetCurrentDesktop();
- EMapWindow(disp, desks.desk[desk].win);
+ EMapWindow(disp, EoGetWin(d));
ecore_x_sync();
}
@@ -991,24 +1013,31 @@
void
HideDesktop(int desk)
{
+ Desk *d;
+
if (desk <= 0 || desk >= Conf.desks.num)
return;
- if (desks.desk[desk].viewable)
- BackgroundTouch(desks.desk[desk].bg);
- desks.desk[desk].viewable = 0;
- EMoveWindow(disp, desks.desk[desk].win, VRoot.w, 0);
+ d = _DeskGet(desk);
+
+ if (d->viewable)
+ BackgroundTouch(d->bg);
+ d->viewable = 0;
+ EMoveWindow(disp, EoGetWin(d), VRoot.w, 0);
}
void
ShowDesktop(int desk)
{
+ Desk *d;
int i;
if (desk < 0 || desk >= Conf.desks.num)
return;
- desks.desk[desk].viewable = 1;
+ d = _DeskGet(desk);
+
+ d->viewable = 1;
RefreshDesktop(desk);
MoveToDeskTop(desk);
@@ -1020,7 +1049,7 @@
else
{
StackDesktops();
- EMapWindow(disp, desks.desk[desk].win);
+ EMapWindow(disp, EoGetWin(d));
}
}
@@ -1089,27 +1118,11 @@
_APPEND_TO_WIN_LIST(eo->win);
}
- if (desk == 0)
- {
- /* The virtual desktop windows */
- for (i = 0; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++)
- {
- if (desks.order[i] == 0)
- break;
-
- _APPEND_TO_WIN_LIST(desks.desk[desks.order[i]].win);
- }
- }
-
/* Normal objects */
for (i = 0; i < num; i++)
{
eo = lst[i];
-#if 0 /* USE_COMPOSITE */
- if (eo->floating || eo->type == EOBJ_TYPE_DESK)
-#else
if (eo->floating)
-#endif
continue;
_APPEND_TO_WIN_LIST(eo->win);
@@ -1150,20 +1163,23 @@
void
DesktopsEventsConfigure(int mode)
{
+ Desk *d;
int i;
long event_mask;
XWindowAttributes xwa;
for (i = 0; i < Conf.desks.num; i++)
{
+ d = _DeskGet(i);
+
if (mode)
{
- event_mask = desks.desk[i].event_mask;
+ event_mask = d->event_mask;
}
else
{
- XGetWindowAttributes(disp, desks.desk[i].win, &xwa);
- desks.desk[i].event_mask = xwa.your_event_mask | EDESK_EVENT_MASK;
+ XGetWindowAttributes(disp, EoGetWin(d), &xwa);
+ d->event_mask = xwa.your_event_mask | EDESK_EVENT_MASK;
event_mask =
PropertyChangeMask | SubstructureRedirectMask |
ButtonPressMask | ButtonReleaseMask;
@@ -1172,7 +1188,7 @@
event_mask |= SubstructureNotifyMask;
#endif
}
- XSelectInput(disp, desks.desk[i].win, event_mask);
+ XSelectInput(disp, EoGetWin(d), event_mask);
}
}
@@ -1200,38 +1216,38 @@
void
DeskDragMotion(void)
{
- int dx, dy;
+ Desk *d;
+ int desk, dx, dy;
dx = Mode.x - Mode.px;
dy = Mode.y - Mode.py;
+ desk = Mode.deskdrag;
+ d = _DeskGet(desk);
+
switch (Conf.desks.dragdir)
{
case 0:
- if ((desks.desk[Mode.deskdrag].x + dx) < 0)
- dx = -desks.desk[Mode.deskdrag].x;
- MoveDesktop(Mode.deskdrag, desks.desk[Mode.deskdrag].x + dx,
- desks.desk[Mode.deskdrag].y);
+ if ((EoGetX(d) + dx) < 0)
+ dx = -EoGetX(d);
+ MoveDesktop(Mode.deskdrag, EoGetX(d) + dx, EoGetY(d));
break;
case 1:
- if ((desks.desk[Mode.deskdrag].x + dx) > 0)
- MoveDesktop(Mode.deskdrag, 0, desks.desk[Mode.deskdrag].y);
+ if ((EoGetX(d) + dx) > 0)
+ MoveDesktop(Mode.deskdrag, 0, EoGetY(d));
else
- MoveDesktop(Mode.deskdrag, desks.desk[Mode.deskdrag].x + dx,
- desks.desk[Mode.deskdrag].y);
+ MoveDesktop(Mode.deskdrag, EoGetX(d) + dx, EoGetY(d));
break;
case 2:
- if ((desks.desk[Mode.deskdrag].y + dy) < 0)
- dy = -desks.desk[Mode.deskdrag].y;
- MoveDesktop(Mode.deskdrag, desks.desk[Mode.deskdrag].x,
- desks.desk[Mode.deskdrag].y + dy);
+ if ((EoGetY(d) + dy) < 0)
+ dy = -EoGetY(d);
+ MoveDesktop(Mode.deskdrag, EoGetX(d), EoGetY(d) + dy);
break;
case 3:
- if ((desks.desk[Mode.deskdrag].y + dy) > 0)
- MoveDesktop(Mode.deskdrag, desks.desk[Mode.deskdrag].x, 0);
+ if ((EoGetY(d) + dy) > 0)
+ MoveDesktop(Mode.deskdrag, EoGetX(d), 0);
else
- MoveDesktop(Mode.deskdrag, desks.desk[Mode.deskdrag].x,
- desks.desk[Mode.deskdrag].y + dy);
+ MoveDesktop(Mode.deskdrag, EoGetX(d), EoGetY(d) + dy);
break;
default:
break;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/eobj.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- eobj.c 3 Jan 2005 23:42:39 -0000 1.5
+++ eobj.c 8 Jan 2005 08:31:55 -0000 1.6
@@ -114,6 +114,7 @@
if (eo->layer > 0 && eo->sticky)
eo->floating = 1;
break;
+ case EOBJ_TYPE_DESK:
case EOBJ_TYPE_OVERR:
case EOBJ_TYPE_OTHER:
eo->ilayer = 10 * eo->layer;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/stacking.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- stacking.c 28 Dec 2004 23:46:47 -0000 1.14
+++ stacking.c 8 Jan 2005 08:31:55 -0000 1.15
@@ -277,21 +277,21 @@
}
int
-EobjListStackRaise(EObj * ewin)
+EobjListStackRaise(EObj * eo)
{
- return EobjListRaise(&EwinListStack, ewin, 1);
+ return EobjListRaise(&EwinListStack, eo, 1);
}
int
-EobjListStackLower(EObj * ewin)
+EobjListStackLower(EObj * eo)
{
- return EobjListLower(&EwinListStack, ewin, 1);
+ return EobjListLower(&EwinListStack, eo, 1);
}
int
-EobjListFocusRaise(EObj * ewin)
+EobjListFocusRaise(EObj * eo)
{
- return EobjListRaise(&EwinListFocus, ewin, 0);
+ return EobjListRaise(&EwinListFocus, eo, 0);
}
EWin *const *
-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs