Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: E.h Makefile.am desktops.c desktops.h edge.c ewin-ops.c ewins.h ewmh.c gnome.c moveresize.c pager.c Removed Files: areas.c Log Message: Area stuff belongs with desk stuff. =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v retrieving revision 1.515 retrieving revision 1.516 diff -u -3 -r1.515 -r1.516 --- E.h 19 Nov 2005 15:47:10 -0000 1.515 +++ E.h 19 Nov 2005 19:32:45 -0000 1.516 @@ -705,19 +705,6 @@ const char *restart, const char *quit, const char *fmt, ...); -/* areas.c */ -void AreaFix(int *ax, int *ay); -void SetNewAreaSize(int ax, int ay); -void SetAreaSize(int aw, int ah); -void GetAreaSize(int *aw, int *ah); -void SetCurrentArea(int ax, int ay); -void MoveCurrentAreaBy(int ax, int ay); -void SetCurrentLinearArea(int a); -int GetCurrentLinearArea(void); -void MoveCurrentLinearAreaBy(int a); -void EwinMoveToLinearArea(EWin * ewin, int a); -void EwinMoveLinearAreaBy(EWin * ewin, int a); - /* arrange.c */ #define ARRANGE_VERBATIM 0 #define ARRANGE_BY_SIZE 1 =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/Makefile.am,v retrieving revision 1.60 retrieving revision 1.61 diff -u -3 -r1.60 -r1.61 --- Makefile.am 19 Nov 2005 15:47:10 -0000 1.60 +++ Makefile.am 19 Nov 2005 19:32:45 -0000 1.61 @@ -18,7 +18,6 @@ aclass.c \ actions.c \ alert.c \ - areas.c \ arrange.c \ backgrounds.c \ backgrounds.h \ =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/desktops.c,v retrieving revision 1.197 retrieving revision 1.198 diff -u -3 -r1.197 -r1.198 --- desktops.c 10 Nov 2005 00:09:35 -0000 1.197 +++ desktops.c 19 Nov 2005 19:32:45 -0000 1.198 @@ -573,13 +573,13 @@ } void -DeskGetCurrentArea(int *ax, int *ay) +DeskCurrentGetArea(int *ax, int *ay) { DeskGetArea(desks.current, ax, ay); } -void -DeskSetCurrentArea(int ax, int ay) +static void +DeskCurrentSetArea(int ax, int ay) { DeskSetArea(desks.current, ax, ay); } @@ -1340,9 +1340,276 @@ return; DeskGoto(EoGetDesk(ewin)); - SetCurrentArea(ewin->area_x, ewin->area_y); + DeskCurrentGotoArea(ewin->area_x, ewin->area_y); +} + +/* + * Areas + */ +static int area_w = 3; +static int area_h = 3; + +void +DesksFixArea(int *ax, int *ay) +{ + if (*ax < 0) + { + if (Conf.desks.areas_wraparound) + *ax = area_w - 1; + else + *ax = 0; + } + else if (*ax >= area_w) + { + if (Conf.desks.areas_wraparound) + *ax = 0; + else + *ax = area_w - 1; + } + + if (*ay < 0) + { + if (Conf.desks.areas_wraparound) + *ay = area_h - 1; + else + *ay = 0; + } + else if (*ay >= area_h) + { + if (Conf.desks.areas_wraparound) + *ay = 0; + else + *ay = area_h - 1; + } +} + +static int +AreaXYToLinear(int ax, int ay) +{ + DesksFixArea(&ax, &ay); + return (ay * area_w) + ax; +} + +static void +AreaLinearToXY(int a, int *ax, int *ay) +{ + if (a < 0) + a = 0; + else if (a >= (area_w * area_h)) + a = (area_w * area_h) - 1; + *ay = a / area_w; + *ax = a - (*ay * area_w); +} + +static void +SetAreaSize(int aw, int ah) +{ + if (aw < 1) + aw = 1; + if (ah < 1) + ah = 1; + Conf.desks.areas_nx = area_w = aw; + Conf.desks.areas_ny = area_h = ah; + HintsSetViewportConfig(); + EdgeWindowsShow(); + ModulesSignal(ESIGNAL_AREA_CONFIGURED, NULL); +} + +void +DesksGetAreaSize(int *aw, int *ah) +{ + *aw = area_w; + *ah = area_h; +} + +static void +SetNewAreaSize(int ax, int ay) +{ + + int a, b, i, num; + EWin *const *lst; + + if (ax <= 0) + return; + if (ay <= 0) + return; + + DesksGetAreaSize(&a, &b); + if ((a == ax) && (b == ay)) + return; + + SetAreaSize(ax, ay); + + lst = EwinListGetAll(&num); + for (i = 0; i < num; i++) + { + if (!EoIsSticky(lst[i])) + { + if (lst[i]->area_x >= ax) + EwinMoveToArea(lst[i], ax - 1, lst[i]->area_x); + if (lst[i]->area_y >= ay) + EwinMoveToArea(lst[i], lst[i]->area_x, ay - 1); + } + } + + DeskCurrentGetArea(&a, &b); + if (a >= ax) + { + DeskCurrentGotoArea(ax - 1, b); + DeskCurrentGetArea(&a, &b); + } + if (b >= ay) + DeskCurrentGotoArea(a, ay - 1); +} + +static void +SetCurrentLinearArea(int a) +{ + int ax, ay; + + AreaLinearToXY(a, &ax, &ay); + DeskCurrentGotoArea(ax, ay); } +static int +GetCurrentLinearArea(void) +{ + int ax, ay; + + DeskCurrentGetArea(&ax, &ay); + + return AreaXYToLinear(ax, ay); +} + +static void +MoveCurrentLinearAreaBy(int a) +{ + SetCurrentLinearArea(GetCurrentLinearArea() + a); +} + +void +DeskCurrentGotoArea(int ax, int ay) +{ + EWin *const *lst, *ewin; + int i, num, dx, dy, pax, pay; + + if ((Mode.mode == MODE_RESIZE) || (Mode.mode == MODE_RESIZE_H) + || (Mode.mode == MODE_RESIZE_V)) + return; + + DesksFixArea(&ax, &ay); + DeskCurrentGetArea(&pax, &pay); + + if (ax == pax && ay == pay) + return; + + if (EventDebug(EDBUG_TYPE_DESKS)) + Eprintf("DeskCurrentGotoArea %d,%d\n", ax, ay); + + ModulesSignal(ESIGNAL_AREA_SWITCH_START, NULL); + + dx = VRoot.w * (ax - pax); + dy = VRoot.h * (ay - pay); + + if (dx < 0) + SoundPlay("SOUND_MOVE_AREA_LEFT"); + else if (dx > 0) + SoundPlay("SOUND_MOVE_AREA_RIGHT"); + else if (dy < 0) + SoundPlay("SOUND_MOVE_AREA_UP"); + else if (dy > 0) + SoundPlay("SOUND_MOVE_AREA_DOWN"); + + ActionsSuspend(); + + /* remove lots of event masks from windows.. we dont want to bother */ + /* handling events as a result of our playing wiht windows */ + DeskSwitchStart(); + + /* set the current area up in out data structs */ + DeskCurrentSetArea(ax, ay); + + /* move all the windows around */ + lst = EwinListGetAll(&num); + if (Conf.desks.slidein) + { + int wnum = 0; + EObj **wl = NULL; + + /* create the list of windwos to move */ + for (i = 0; i < num; i++) + { + ewin = lst[i]; + if (EoIsSticky(ewin) || ewin->state.iconified) + continue; + if (EoGetDesk(ewin) != DesksGetCurrent() && !EoIsFloating(ewin)) + continue; + + if (EoIsFloating(ewin) && Conf.movres.mode_move == 0) + continue; + + wnum++; + wl = Erealloc(wl, sizeof(EObj *) * wnum); + wl[wnum - 1] = &ewin->o; + } + + /* slide them */ + if (wl) + { + EobjsSlideBy(wl, wnum, -dx, -dy, Conf.desks.slidespeed); + Efree(wl); + EobjsRepaint(); + } + } + + /* move all windows to their final positions */ + Mode.move.check = 0; + for (i = 0; i < num; i++) + { + ewin = lst[i]; + if (EwinIsTransientChild(ewin)) + continue; + if (EoGetDesk(ewin) != DesksGetCurrent() && !EoIsFloating(ewin)) + continue; + + if (EoIsSticky(ewin) || + (EoIsFloating(ewin) && Conf.movres.mode_move == 0) || + (!ewin->state.iconified && Conf.desks.slidein)) + EwinMove(ewin, EoGetX(ewin), EoGetY(ewin)); + else + EwinMove(ewin, EoGetX(ewin) - dx, EoGetY(ewin) - dy); + } + Mode.move.check = 1; + + if (!Conf.desks.slidein) + EobjsRepaint(); + + /* set hints up for it */ + HintsSetDesktopViewport(); + + ActionsResume(); + + /* re-focus on a new ewin on that new desktop area */ + DeskSwitchDone(); + + ModulesSignal(ESIGNAL_AREA_SWITCH_DONE, DesksGetCurrent()); + + /* update which "edge flip resistance" detector windows are visible */ + EdgeWindowsShow(); +} + +void +DeskCurrentMoveAreaBy(int dx, int dy) +{ + int ax, ay; + + DeskCurrentGetArea(&ax, &ay); + DeskCurrentGotoArea(ax + dx, ay + dy); +} + +/* + * Actions, events + */ static char sentpress = 0; static void @@ -2136,7 +2403,7 @@ tmp_edge_flip = 0; else tmp_edge_flip = 1; - GetAreaSize(&tmp_area_x, &tmp_area_y); + DesksGetAreaSize(&tmp_area_x, &tmp_area_y); tmp_area_y = 9 - tmp_area_y; d = tmp_area_dialog = DialogCreate("CONFIGURE_AREA"); @@ -2358,7 +2625,7 @@ p += len; } - DeskGetCurrentArea(&ax, &ay); + DeskCurrentGetArea(&ax, &ay); if (!p || cmd[0] == '?') { @@ -2376,13 +2643,13 @@ else if (!strncmp(cmd, "goto", 2)) { sscanf(params, "%*s %i %i", &ax, &ay); - SetCurrentArea(ax, ay); + DeskCurrentGotoArea(ax, ay); } else if (!strncmp(cmd, "move", 2)) { dx = dy = 0; sscanf(params, "%*s %i %i", &dx, &dy); - MoveCurrentAreaBy(dx, dy); + DeskCurrentMoveAreaBy(dx, dy); } else if (!strncmp(cmd, "lgoto", 2)) { @@ -2453,7 +2720,7 @@ { int ax, ay; - GetAreaSize(&ax, &ay); + DesksGetAreaSize(&ax, &ay); SetNewAreaSize(atoi(value), ay); } @@ -2462,7 +2729,7 @@ { int ax, ay; - GetAreaSize(&ax, &ay); + DesksGetAreaSize(&ax, &ay); SetNewAreaSize(ax, atoi(value)); } =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/desktops.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- desktops.h 30 Oct 2005 19:40:49 -0000 1.10 +++ desktops.h 19 Nov 2005 19:32:45 -0000 1.11 @@ -58,25 +58,30 @@ void DeskSetArea(Desk * dsk, int ax, int ay); int DeskIsViewable(const Desk * dsk); void DeskSetDirtyStack(Desk * dsk, EObj * eo); - void DeskRefresh(Desk * dsk); void DeskAssignBg(unsigned int desk, Background * bg); void DeskSetBg(Desk * dsk, Background * bg, int refresh); -Desk *DesktopAt(int x, int y); -void DeskSwitchStart(void); -void DeskSwitchDone(void); void DeskGoto(Desk * dsk); void DeskGotoNum(unsigned int desk); +void DeskRestack(Desk * dsk); + +void DeskCurrentGetArea(int *ax, int *ay); +void DeskCurrentGotoArea(int ax, int ay); +void DeskCurrentMoveAreaBy(int ax, int ay); + void DeskGotoByEwin(EWin * ewin); -void DeskRestack(Desk * dsk); +void DeskSwitchStart(void); +void DeskSwitchDone(void); unsigned int DesksGetNumber(void); Desk *DesksGetCurrent(void); +Desk *DesktopAt(int x, int y); unsigned int DesksGetCurrentNum(void); void DesksSetCurrent(Desk * dsk); -void DeskGetCurrentArea(int *ax, int *ay); -void DeskSetCurrentArea(int ax, int ay); +void DesksGetAreaSize(int *aw, int *ah); void DesksClear(void); +void DesksFixArea(int *ax, int *ay); + #endif /* _DESKTOPS_H_ */ =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/edge.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -3 -r1.24 -r1.25 --- edge.c 30 Oct 2005 19:40:49 -0000 1.24 +++ edge.c 19 Nov 2005 19:32:45 -0000 1.25 @@ -52,8 +52,8 @@ if (ewin && ewin->state.fullscreen) return; - DeskGetCurrentArea(&ax, &ay); - GetAreaSize(&aw, &ah); + DeskCurrentGetArea(&ax, &ay); + DesksGetAreaSize(&aw, &ah); dx = 0; dy = 0; dax = 0; @@ -97,7 +97,7 @@ Mode.events.y += dy; EWarpPointer(VRoot.win, Mode.events.x, Mode.events.y); Mode.flipp = 1; - MoveCurrentAreaBy(dax, day); + DeskCurrentMoveAreaBy(dax, day); Mode.flipp = 0; Mode.events.px = Mode.events.x; Mode.events.py = Mode.events.y; @@ -205,8 +205,8 @@ EventCallbackRegister(w3->win, 0, EdgeHandleEvents, (void *)2); EventCallbackRegister(w4->win, 0, EdgeHandleEvents, (void *)3); } - DeskGetCurrentArea(&cx, &cy); - GetAreaSize(&ax, &ay); + DeskCurrentGetArea(&cx, &cy); + DesksGetAreaSize(&ax, &ay); if (cx == 0 && !Conf.desks.areas_wraparound) EobjUnmap(w1); =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/ewin-ops.c,v retrieving revision 1.81 retrieving revision 1.82 diff -u -3 -r1.81 -r1.82 --- ewin-ops.c 19 Nov 2005 15:47:10 -0000 1.81 +++ ewin-ops.c 19 Nov 2005 19:32:45 -0000 1.82 @@ -275,7 +275,7 @@ ax = (ewin->vx + EoGetW(ewin) / 2) / EoGetW(dsk); ay = (ewin->vy + EoGetH(ewin) / 2) / EoGetH(dsk); - AreaFix(&ax, &ay); + DesksFixArea(&ax, &ay); if (ax != ewin->area_x || ay != ewin->area_y) { ewin->area_x = ax; @@ -1418,7 +1418,7 @@ void EwinMoveToArea(EWin * ewin, int ax, int ay) { - AreaFix(&ax, &ay); + DesksFixArea(&ax, &ay); EwinMove(ewin, EoGetX(ewin) + (VRoot.w * (ax - ewin->area_x)), EoGetY(ewin) + (VRoot.h * (ay - ewin->area_y))); } @@ -1806,6 +1806,21 @@ #if 0 /* Unused */ void +EwinMoveToLinearArea(EWin * ewin, int a) +{ + int ax, ay; + + AreaLinearToXY(a, &ax, &ay); + EwinMoveToArea(ewin, ax, ay); +} + +void +EwinMoveLinearAreaBy(EWin * ewin, int a) +{ + EwinMoveToLinearArea(ewin, AreaXYToLinear(ewin->area_x, ewin->area_y) + a); +} + +void EwinOpMoveToArea(EWin * ewin, int x, int y) { EwinMoveToArea(ewin, x, y); =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/ewins.h,v retrieving revision 1.33 retrieving revision 1.34 diff -u -3 -r1.33 -r1.34 --- ewins.h 19 Nov 2005 15:47:10 -0000 1.33 +++ ewins.h 19 Nov 2005 19:32:45 -0000 1.34 @@ -337,6 +337,8 @@ void EwinShade(EWin * ewin); void EwinUnShade(EWin * ewin); void EwinMoveToArea(EWin * ewin, int ax, int ay); +void EwinMoveToLinearArea(EWin * ewin, int a); +void EwinMoveLinearAreaBy(EWin * ewin, int a); void EwinOpClose(EWin * ewin, int source); void EwinOpActivate(EWin * ewin, int source); =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/ewmh.c,v retrieving revision 1.98 retrieving revision 1.99 diff -u -3 -r1.98 -r1.99 --- ewmh.c 14 Nov 2005 19:28:01 -0000 1.98 +++ ewmh.c 19 Nov 2005 19:32:45 -0000 1.99 @@ -221,7 +221,7 @@ { int ax, ay; - GetAreaSize(&ax, &ay); + DesksGetAreaSize(&ax, &ay); ecore_x_netwm_desk_size_set(VRoot.win, ax * VRoot.w, ay * VRoot.h); } @@ -827,7 +827,7 @@ } else if (ev->message_type == ECORE_X_ATOM_NET_DESKTOP_VIEWPORT) { - SetCurrentArea(ev->data.l[0] / VRoot.w, ev->data.l[1] / VRoot.h); + DeskCurrentGotoArea(ev->data.l[0] / VRoot.w, ev->data.l[1] / VRoot.h); goto done; } else if (ev->message_type == ECORE_X_ATOM_NET_SHOWING_DESKTOP) =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/gnome.c,v retrieving revision 1.60 retrieving revision 1.61 diff -u -3 -r1.60 -r1.61 --- gnome.c 12 Nov 2005 19:55:42 -0000 1.60 +++ gnome.c 19 Nov 2005 19:32:45 -0000 1.61 @@ -561,7 +561,7 @@ if (!atom_set) atom_set = XInternAtom(disp, XA_WIN_AREA, False); - DeskGetCurrentArea(&ax, &ay); + DeskCurrentGetArea(&ax, &ay); val[0] = ax; val[1] = ay; ecore_x_window_prop_card32_set(VRoot.win, atom_set, val, 2); @@ -613,7 +613,7 @@ if (!atom_set) atom_set = XInternAtom(disp, XA_WIN_AREA_COUNT, False); - GetAreaSize(&ax, &ay); + DesksGetAreaSize(&ax, &ay); val[0] = ax; val[1] = ay; ecore_x_window_prop_card32_set(VRoot.win, atom_set, val, 2); @@ -765,7 +765,7 @@ if (event->message_type == a2) { - SetCurrentArea(event->data.l[0], event->data.l[1]); + DeskCurrentGotoArea(event->data.l[0], event->data.l[1]); return; } if (event->message_type == a3) =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/moveresize.c,v retrieving revision 1.56 retrieving revision 1.57 diff -u -3 -r1.56 -r1.57 --- moveresize.c 19 Nov 2005 15:47:10 -0000 1.56 +++ moveresize.c 19 Nov 2005 19:32:45 -0000 1.57 @@ -236,7 +236,7 @@ if (Mode_mr.mode > 0) EGrabServer(); - DeskGetCurrentArea(&ax, &ay); + DeskCurrentGetArea(&ax, &ay); /* Redraw any windows that were in "move mode" */ lst = =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/pager.c,v retrieving revision 1.186 retrieving revision 1.187 diff -u -3 -r1.186 -r1.187 --- pager.c 19 Nov 2005 15:47:10 -0000 1.186 +++ pager.c 19 Nov 2005 19:32:45 -0000 1.187 @@ -208,7 +208,7 @@ if (Mode.mode != MODE_NONE) return; - DeskGetCurrentArea(&cx, &cy); + DeskCurrentGetArea(&cx, &cy); ww = p->dw; hh = p->dh; xx = cx * ww; @@ -337,7 +337,7 @@ int i, num, update_screen_included, update_screen_only; p->update_phase = 0; - GetAreaSize(&ax, &ay); + DesksGetAreaSize(&ax, &ay); DeskGetArea(p->dsk, &cx, &cy); vx = cx * VRoot.w; vy = cy * VRoot.h; @@ -471,7 +471,7 @@ ewin = p->ewin; - GetAreaSize(&ax, &ay); + DesksGetAreaSize(&ax, &ay); aspect = ((double)VRoot.w) / ((double)VRoot.h); ICCCM_SetSizeConstraints(ewin, 10 * ax, 8 * ay, 320 * ax, 240 * ay, @@ -567,7 +567,7 @@ if ((w == p->w && h == p->h) || w <= 1 || h <= 1) return; - GetAreaSize(&ax, &ay); + DesksGetAreaSize(&ax, &ay); if (p->pmap != None) EFreePixmap(p->pmap); @@ -662,7 +662,7 @@ /* no snapshots ? first time ? make a row on the bottom left up */ int ax, ay; - GetAreaSize(&ax, &ay); + DesksGetAreaSize(&ax, &ay); w = ((48 * VRoot.w) / VRoot.h) * ax; h = 48 * ay; EwinResize(ewin, w, h); /* Does layout */ @@ -1360,12 +1360,12 @@ DeskGoto(p->dsk); if (p->dsk != DesksGetCurrent()) SoundPlay("SOUND_DESKTOP_SHUT"); - SetCurrentArea(px / p->dw, py / p->dh); + DeskCurrentGotoArea(px / p->dw, py / p->dh); } else if (button == Conf_pagers.win_button) { DeskGoto(p->dsk); - SetCurrentArea(px / p->dw, py / p->dh); + DeskCurrentGotoArea(px / p->dw, py / p->dh); ewin = EwinInPagerAt(p, px, py); if (ewin) { ------------------------------------------------------- This SF.Net email is sponsored by the JBoss Inc. Get Certified Today Register for a JBoss Training Course. Free Certification Exam for All Training Attendees Through End of 2005. For more info visit: http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs