Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: Tag: branch-exp E.h Makefile.am buttons.c desktops.c ewin-ops.c ewins.c pager.c stacking.c Added Files: Tag: branch-exp eobj.c Log Message: Add buttons to global object stack. =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v retrieving revision 1.314.2.64 retrieving revision 1.314.2.65 diff -u -3 -r1.314.2.64 -r1.314.2.65 --- E.h 28 Nov 2004 17:51:33 -0000 1.314.2.64 +++ E.h 30 Nov 2004 23:31:50 -0000 1.314.2.65 @@ -546,6 +546,7 @@ { Window win; /* The top level window */ short type; /* Ewin, button, other, ... */ + short ilayer; /* Internal tacking layer */ short layer; /* Stacking layer */ short desk; /* Belongs on desk */ char sticky:1; @@ -554,7 +555,12 @@ int w, h; }; +#define EOBJ_TYPE_EWIN 0 +#define EOBJ_TYPE_BUTTON 1 +#define EOBJ_TYPE_OTHER 2 + #define EoGetWin(eo) ((eo)->o.win) +#define EoGetType(eo) ((eo)->o.type) #define EoGetX(eo) ((eo)->o.x) #define EoGetY(eo) ((eo)->o.y) #define EoGetW(eo) ((eo)->o.w) @@ -565,6 +571,7 @@ #define EoGetLayer(eo) ((eo)->o.layer) #define EoSetWin(eo, _x) (eo)->o.win = (_x) +#define EoSetType(eo, _x) (eo)->o.type = (_x) #define EoSetX(eo, _x) (eo)->o.x = (_x) #define EoSetY(eo, _y) (eo)->o.y = (_y) #define EoSetW(eo, _w) (eo)->o.w = (_w) @@ -572,7 +579,7 @@ #define EoSetSticky(eo, _x) (eo)->o.sticky = ((_x)?1:0) #define EoSetFloating(eo, _x) (eo)->o.floating = (_x) #define EoSetDesk(eo, _d) EobjSetDesk(&((eo)->o), (_d)) -#define EoSetLayer(eo, _l) (eo)->o.layer = (_l) +#define EoSetLayer(eo, _l) EobjSetLayer(&((eo)->o), (_l)) typedef struct _constraints { @@ -1559,6 +1566,12 @@ void EdgeWindowsShow(void); void EdgeWindowsHide(void); +/* eobj.c */ +const char *EobjGetName(const EObj * eo); +int EobjGetDesk(const EObj * eo); +int EobjSetDesk(EObj * eo, int desk); +void EobjSetLayer(EObj * eo, int layer); + /* events.c */ /* Re-mapped X-events */ #define EX_EVENT_SHAPE_NOTIFY 64 @@ -1599,9 +1612,6 @@ #define EWIN_CHANGE_DESKTOP (1<<3) #define EWIN_CHANGE_LAYER (1<<4) -int EobjGetDesk(const EObj * eo); -int EobjSetDesk(EObj * eo, int desk); - void EwinGetPosition(const EWin * ewin, int *px, int *py); void EwinRefresh(EWin * ewin); void EwinUpdateAfterMoveResize(EWin * ewin, int resize); @@ -2126,10 +2136,6 @@ void SoundPlay(const char *name); /* stacking.c */ -#define EOBJ_TYPE_EWIN 0 -#define EOBJ_TYPE_BUTTON 1 -#define EOBJ_TYPE_OTHER 2 - void EobjListStackAdd(EObj * eo, int ontop); void EobjListFocusAdd(EObj * eo, int ontop); void EobjListStackDel(EObj * eo); @@ -2139,9 +2145,10 @@ int EobjListStackLower(EObj * eo); int EobjListFocusLower(EObj * eo); EObj *const *EobjListStackGet(int *num); +EObj *const *EobjListStackGetForDesk(int *num, int desk); EWin *const *EwinListStackGet(int *num); EWin *const *EwinListFocusGet(int *num); -EWin *const *EwinListGetForDesktop(int desk, int *num); +EWin *const *EwinListGetForDesk(int *num, int desk); #define EwinListGetAll EwinListStackGet #define EwinListStackRaise(ewin) EobjListStackRaise(&(ewin->o)) =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/Makefile.am,v retrieving revision 1.43.2.23 retrieving revision 1.43.2.24 diff -u -3 -r1.43.2.23 -r1.43.2.24 --- Makefile.am 21 Oct 2004 17:52:44 -0000 1.43.2.23 +++ Makefile.am 30 Nov 2004 23:31:51 -0000 1.43.2.24 @@ -45,6 +45,7 @@ ecore-e16.c \ edge.c \ emodule.c \ + eobj.c \ events.c \ ewins.c \ ewin-ops.c \ =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/buttons.c,v retrieving revision 1.36.2.17 retrieving revision 1.36.2.18 diff -u -3 -r1.36.2.17 -r1.36.2.18 --- buttons.c 20 Nov 2004 20:48:56 -0000 1.36.2.17 +++ buttons.c 30 Nov 2004 23:31:51 -0000 1.36.2.18 @@ -85,7 +85,8 @@ if (desk < 0 || desk >= DesksGetNumber()) return NULL; - b = Emalloc(sizeof(Button)); + b = Ecalloc(1, sizeof(Button)); + EoSetType(b, EOBJ_TYPE_BUTTON); b->name = Estrdup(name); b->label = Estrdup(label); @@ -108,12 +109,12 @@ b->label = label; - EoSetLayer(b, ontop); b->flags = flags; EoSetSticky(b, sticky); if (sticky && ontop == 1) desk = 0; - b->o.desk = desk; + EoSetDesk(b, desk); + EoSetLayer(b, ontop); b->visible = 0; b->geom.width.min = minw; b->geom.width.max = maxw; @@ -152,6 +153,8 @@ b->expose = 0; b->ref_count = 0; + EobjListStackAdd(&b->o, 0); + EwinListStackRaise(b); AddItem(b, b->name, id, LIST_TYPE_BUTTON); EDBUG_RETURN(b); @@ -172,6 +175,7 @@ } while (RemoveItemByPtr(b, LIST_TYPE_BUTTON)); + EobjListStackDel(&b->o); if (b->name) Efree(b->name); @@ -305,7 +309,7 @@ if (EoIsSticky(b) && EoGetLayer(b) == 1) desk = 0; pdesk = EoGetDesk(b); - desk = EoSetDesk(b, desk); + EoSetDesk(b, desk); if (desk != pdesk) EReparentWindow(disp, EoGetWin(b), DeskGetWin(desk), EoGetX(b), @@ -450,6 +454,7 @@ b->flags |= FLAG_FIXED; b->used = 1; b->ref_count++; + EobjListStackDel(&b->o); } const char * =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/desktops.c,v retrieving revision 1.95.2.31 retrieving revision 1.95.2.32 diff -u -3 -r1.95.2.31 -r1.95.2.32 --- desktops.c 28 Nov 2004 17:51:34 -0000 1.95.2.31 +++ desktops.c 30 Nov 2004 23:31:51 -0000 1.95.2.32 @@ -1137,9 +1137,8 @@ #if 1 /* FIXME - Somehow */ Window *wl2; #endif - int i, wnum, tot, bnum; - EWin *const *lst, *ewin; - Button **blst; + int i, num, tot; + EObj *const *lst, *eo; EDBUG(2, "StackDesktop"); tot = 0; @@ -1152,10 +1151,10 @@ #if 1 /* FIXME - Somehow */ if (desk == 0) { - wl2 = ProgressbarsListWindows(&wnum); + wl2 = ProgressbarsListWindows(&num); if (wl2) { - for (i = 0; i < wnum; i++) + for (i = 0; i < num; i++) _APPEND_TO_WIN_LIST(wl2[i]); Efree(wl2); } @@ -1171,24 +1170,18 @@ } #endif - lst = EwinListStackGet(&wnum); - blst = (Button **) ListItemType(&bnum, LIST_TYPE_BUTTON); + lst = EobjListStackGetForDesk(&num, desk); - /* Floating EWins */ - for (i = 0; i < wnum; i++) + /* Make the X window list */ + + /* Floating objects */ + for (i = 0; i < num; i++) { - ewin = lst[i]; - if (!EoIsFloating(lst[i]) || EoGetDesk(ewin) != desk) + eo = lst[i]; + if (!eo->floating) continue; - _APPEND_TO_WIN_LIST(EoGetWin(lst[i])); - } - - /* "Above" buttons */ - for (i = 0; i < bnum; i++) - { - if (ButtonIsAbove(blst[i], desk)) - _APPEND_TO_WIN_LIST(ButtonGetWindow(blst[i])); + _APPEND_TO_WIN_LIST(eo->win); } if (desk == 0) @@ -1203,34 +1196,20 @@ } } - /* Normal EWins on this desk */ - for (i = 0; i < wnum; i++) + /* Normal objects */ + for (i = 0; i < num; i++) { - ewin = lst[i]; - if (EoIsFloating(ewin) || EoGetDesk(ewin) != desk) + eo = lst[i]; + if (eo->floating) continue; - _APPEND_TO_WIN_LIST(EoGetWin(ewin)); + _APPEND_TO_WIN_LIST(eo->win); #if 0 /* FIXME */ if (EoGetWin(ewin) == Mode.menus.win_covered) _APPEND_TO_WIN_LIST(Mode.menus.cover_win); #endif } - /* "Normal" buttons */ - for (i = 0; i < bnum; i++) - { - if (ButtonIsNormal(blst[i], desk)) - _APPEND_TO_WIN_LIST(ButtonGetWindow(blst[i])); - } - - /* "Below" buttons */ - for (i = 0; i < bnum; i++) - { - if (ButtonIsBelow(blst[i], desk)) - _APPEND_TO_WIN_LIST(ButtonGetWindow(blst[i])); - } - if (EventDebug(EDBUG_TYPE_STACKING)) { Eprintf("StackDesktop %d:\n", desk); @@ -1247,8 +1226,6 @@ if (wl) Efree(wl); - if (blst) - Efree(blst); EDBUG_RETURN_; } =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/Attic/ewin-ops.c,v retrieving revision 1.1.2.18 retrieving revision 1.1.2.19 diff -u -3 -r1.1.2.18 -r1.1.2.19 --- ewin-ops.c 23 Nov 2004 23:46:26 -0000 1.1.2.18 +++ ewin-ops.c 30 Nov 2004 23:31:52 -0000 1.1.2.19 @@ -1214,7 +1214,7 @@ EWin *const *lst, *ewin; int i, num; - lst = EwinListGetForDesktop(DesksGetCurrent(), &num); + lst = EwinListGetForDesk(&num, DesksGetCurrent()); for (i = 0; i < num; i++) { @@ -1365,7 +1365,7 @@ int gnum, j, raise = 0; int i, num; - lst = EwinListGetForDesktop(EoGetDesk(ewin), &num); + lst = EwinListGetForDesk(&num, EoGetDesk(ewin)); gwins = ListWinGroupMembersForEwin(ewin, GROUP_ACTION_RAISE_LOWER, Mode.nogroup, &gnum); for (j = 0; j < gnum; j++) =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/Attic/ewins.c,v retrieving revision 1.1.2.31 retrieving revision 1.1.2.32 diff -u -3 -r1.1.2.31 -r1.1.2.32 --- ewins.c 28 Nov 2004 17:51:34 -0000 1.1.2.31 +++ ewins.c 30 Nov 2004 23:31:52 -0000 1.1.2.32 @@ -66,6 +66,7 @@ ewin = Ecalloc(1, sizeof(EWin)); ewin->state = (Mode.wm.startup) ? EWIN_STATE_STARTUP : EWIN_STATE_NEW; + EoSetType(ewin, EOBJ_TYPE_EWIN); EoSetX(ewin, -1); EoSetY(ewin, -1); EoSetW(ewin, -1); @@ -304,7 +305,7 @@ px -= DeskGetX(desk); py -= DeskGetY(desk); - lst = EwinListGetForDesktop(desk, &num); + lst = EwinListGetForDesk(&num, desk); for (i = 0; i < num; i++) { int x, y, w, h; @@ -629,6 +630,7 @@ /* it's already managed */ if (ewin) { +#if 0 /* if its iconified - de-iconify */ if (ewin->iconified) { @@ -645,6 +647,8 @@ ewin->iconified = 0; } EDBUG_RETURN_; +#endif + Eprintf("AddToFamily already added %#lx\n", ewin->client.win); } /* grab that server */ @@ -1364,7 +1368,7 @@ goto done; } - lst = EwinListGetForDesktop(EoGetDesk(ewin), &num); + lst = EwinListGetForDesk(&num, EoGetDesk(ewin)); if (num < 2) goto done; @@ -1529,23 +1533,6 @@ return (ewin) ? ewin->client.win : None; } -int -EobjGetDesk(const EObj * eo) -{ - return (eo->sticky) ? DesksGetCurrent() : eo->desk; -} - -int -EobjSetDesk(EObj * eo, int desk) -{ - if (eo->sticky || eo->desk < 0) - eo->desk = DesksGetCurrent(); - else - eo->desk = desk % Conf.desks.num; - - return eo->desk; -} - const char * EwinGetTitle(const EWin * ewin) { =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/pager.c,v retrieving revision 1.103.2.22 retrieving revision 1.103.2.23 diff -u -3 -r1.103.2.22 -r1.103.2.23 --- pager.c 13 Nov 2004 10:41:56 -0000 1.103.2.22 +++ pager.c 30 Nov 2004 23:31:53 -0000 1.103.2.23 @@ -189,7 +189,7 @@ int i, num; EWin *const *lst; - lst = EwinListGetForDesktop(p->desktop, &num); + lst = EwinListGetForDesk(&num, p->desktop); for (i = 0; i < num; i++) PagerEwinUpdateFromPager(p, lst[i]); @@ -385,7 +385,7 @@ p->h / ay, x * (p->w / ax), y * (p->h / ay)); } - lst = EwinListGetForDesktop(p->desktop, &num); + lst = EwinListGetForDesk(&num, p->desktop); for (i = num - 1; i >= 0; i--) { EWin *ewin; @@ -473,7 +473,7 @@ ScaleRect(p->pmap, VRoot.win, 0, 0, xx, yy, VRoot.w, VRoot.h, ww, hh); XClearWindow(disp, p->win); - lst = EwinListGetForDesktop(p->desktop, &num); + lst = EwinListGetForDesk(&num, p->desktop); for (i = 0; i < num; i++) PagerEwinUpdateFromPager(p, lst[i]); } @@ -544,7 +544,7 @@ } Mode.queue_up = pq; - lst = EwinListGetForDesktop(p->desktop, &num); + lst = EwinListGetForDesk(&num, p->desktop); for (i = 0; i < num; i++) PagerEwinUpdateMini(p, lst[i]); @@ -831,7 +831,7 @@ GetAreaSize(&ax, &ay); DeskGetArea(p->desktop, &cx, &cy); - lst = EwinListGetForDesktop(p->desktop, &num); + lst = EwinListGetForDesk(&num, p->desktop); for (i = 0; i < num; i++) { EWin *ewin; =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/stacking.c,v retrieving revision 1.12.2.3 retrieving revision 1.12.2.4 diff -u -3 -r1.12.2.3 -r1.12.2.4 --- stacking.c 21 Nov 2004 22:15:21 -0000 1.12.2.3 +++ stacking.c 30 Nov 2004 23:31:53 -0000 1.12.2.4 @@ -26,8 +26,6 @@ #define EobjGetCwin(p) \ ((p->type == EOBJ_TYPE_EWIN) ? EwinGetClientWin((EWin*)(p)) : None) -#define EobjGetName(p) \ - ((p->type == EOBJ_TYPE_EWIN) ? EwinGetTitle((EWin*)(p)) : "") typedef struct _eobjlist EobjList; @@ -55,7 +53,7 @@ eo = ewl->list[i]; Eprintf(" %2d: %#10lx %#10lx %d %d %s\n", i, eo->win, EobjGetCwin(eo), eo->desk, - (eo->floating) ? 999 : eo->layer, EobjGetName(eo)); + (eo->floating) ? 999 : eo->ilayer, EobjGetName(eo)); } } #else @@ -146,7 +144,7 @@ { /* Take the layer into account */ for (; j >= 0; j--) - if (i != j && eo->layer <= ewl->list[j]->layer) + if (i != j && eo->ilayer <= ewl->list[j]->ilayer) break; if (j < i) j++; @@ -183,7 +181,7 @@ { /* Take the layer into account */ for (; j < ewl->nwins; j++) - if (j != i && eo->layer >= ewl->list[j]->layer) + if (j != i && eo->ilayer >= ewl->list[j]->ilayer) break; if (j > i) j--; @@ -315,7 +313,7 @@ } EWin *const * -EwinListGetForDesktop(int desk, int *num) +EwinListGetForDesk(int *num, int desk) { static EWin **lst = NULL; static int nalloc = 0; @@ -344,3 +342,34 @@ *num = j; return lst; } + +EObj *const * +EobjListStackGetForDesk(int *num, int desk) +{ + static EObj **lst = NULL; + static int nalloc = 0; + const EobjList *ewl; + int i, j; + EObj *eo; + + ewl = &EwinListStack; + + /* Too many - who cares. */ + if (nalloc < ewl->nwins) + { + nalloc = (ewl->nwins + 16) & ~0xf; /* 16 at the time */ + lst = Erealloc(lst, nalloc * sizeof(EWin *)); + } + + for (i = j = 0; i < ewl->nwins; i++) + { + eo = ewl->list[i]; + if (eo->desk != desk) + continue; + + lst[j++] = eo; + } + + *num = j; + return lst; +} ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://productguide.itmanagersjournal.com/ _______________________________________________ enlightenment-cvs mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs