Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: E.h buttons.c config.c desktops.c ipc.c Log Message: Fix button stacking. =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v retrieving revision 1.330 retrieving revision 1.331 diff -u -3 -r1.330 -r1.331 --- E.h 12 Nov 2004 17:02:27 -0000 1.330 +++ E.h 17 Nov 2004 19:31:08 -0000 1.331 @@ -1748,7 +1748,7 @@ void ButtonToggle(Button * b); void ButtonDraw(Button * b); void ButtonDrawWithState(Button * b, int state); -void ButtonMoveToDesktop(Button * b, int num); +void ButtonMoveToDesktop(Button * b, int desk); void ButtonMoveToCoord(Button * b, int x, int y); void ButtonMoveRelative(Button * b, int dx, int dy); void ButtonIncRefcount(Button * b); =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/buttons.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -3 -r1.38 -r1.39 --- buttons.c 31 Aug 2004 17:24:40 -0000 1.38 +++ buttons.c 17 Nov 2004 19:31:09 -0000 1.39 @@ -65,6 +65,8 @@ b->ontop = ontop; b->flags = flags; b->sticky = sticky; + if (sticky && ontop == 1) + desk = 0; b->desktop = desk; b->visible = 0; b->geom.width.min = minw; @@ -251,22 +253,17 @@ } void -ButtonMoveToDesktop(Button * b, int num) +ButtonMoveToDesktop(Button * b, int desk) { EDBUG(3, "ButtonMoveToDesktop"); - if (b->sticky) - { - b->desktop = 0; - EReparentWindow(disp, b->win, desks.desk[0].win, b->x, b->y); - XRaiseWindow(disp, b->win); - } - else - { - b->desktop = num; - EReparentWindow(disp, b->win, desks.desk[DESKTOPS_WRAP_NUM(num)].win, - b->x, b->y); - } + if (b->sticky && b->ontop == 1) + desk = 0; + if (b->desktop == desk) + EDBUG_RETURN_; + + b->desktop = desk; + EReparentWindow(disp, b->win, desks.desk[desk].win, b->x, b->y); EDBUG_RETURN_; } =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/config.c,v retrieving revision 1.117 retrieving revision 1.118 diff -u -3 -r1.117 -r1.118 --- config.c 30 Oct 2004 12:58:55 -0000 1.117 +++ config.c 17 Nov 2004 19:31:09 -0000 1.118 @@ -1778,8 +1778,9 @@ break; case BUTTON_DESK: desk = atoi(s2); + desk = ((unsigned int)desk) % ENLIGHTENMENT_CONF_NUM_DESKTOPS; if (pbt) - pbt->desktop = desk; + ButtonMoveToDesktop(pbt, desk); break; case BUTTON_STICKY: sticky = atoi(s2); =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/desktops.c,v retrieving revision 1.102 retrieving revision 1.103 diff -u -3 -r1.102 -r1.103 --- desktops.c 30 Oct 2004 12:59:03 -0000 1.102 +++ desktops.c 17 Nov 2004 19:31:11 -0000 1.103 @@ -672,11 +672,10 @@ static void MoveStickyWindowsToCurrentDesk(void) { - EWin *const *lst, *ewin, *last_ewin; + EWin *const *lst, *ewin; int i, num; lst = EwinListGetStacking(&num); - last_ewin = NULL; for (i = 0; i < num; i++) { ewin = lst[i]; @@ -690,7 +689,23 @@ EMoveWindow(disp, ewin->win, ewin->x, ewin->y); HintsSetWindowArea(ewin); HintsSetWindowDesktop(ewin); - last_ewin = ewin; + } +} + +static void +MoveStickyButtonsToCurrentDesk(void) +{ + Button **lst, *btn; + int i, num; + + lst = (Button **) ListItemType(&num, LIST_TYPE_BUTTON); + for (i = 0; i < num; i++) + { + btn = lst[i]; + if (!btn->sticky || btn->internal) + continue; + + ButtonMoveToDesktop(btn, desks.current); } } @@ -940,6 +955,7 @@ StackDesktops(); desks.current = desk; MoveStickyWindowsToCurrentDesk(); + MoveStickyButtonsToCurrentDesk(); StackDesktop(desks.current); FocusNewDesk(); FX_DeskChange(); @@ -970,6 +986,7 @@ StackDesktops(); desks.current = desks.order[0]; MoveStickyWindowsToCurrentDesk(); + MoveStickyButtonsToCurrentDesk(); StackDesktop(desks.current); FocusNewDesk(); FX_DeskChange(); @@ -1062,69 +1079,58 @@ * Build the window stack, top to bottom */ - wl2 = ListProgressWindows(&wnum); - if (wl2) - { - for (i = 0; i < wnum; i++) - _APPEND_TO_WIN_LIST(wl2[i]); - Efree(wl2); - } - if (init_win_ext) - { - _APPEND_TO_WIN_LIST(init_win_ext); - } - if (init_win1) + if (desk == 0) { - _APPEND_TO_WIN_LIST(init_win1); - _APPEND_TO_WIN_LIST(init_win2); + wl2 = ListProgressWindows(&wnum); + if (wl2) + { + for (i = 0; i < wnum; i++) + _APPEND_TO_WIN_LIST(wl2[i]); + Efree(wl2); + } + if (init_win_ext) + { + _APPEND_TO_WIN_LIST(init_win_ext); + } + if (init_win1) + { + _APPEND_TO_WIN_LIST(init_win1); + _APPEND_TO_WIN_LIST(init_win2); + } } lst = EwinListGetStacking(&wnum); blst = (Button **) ListItemType(&bnum, LIST_TYPE_BUTTON); - /* Sticky buttons */ - if (blst) - { - for (i = 0; i < bnum; i++) - { - if (!blst[i]->sticky || blst[i]->internal) - continue; - - _APPEND_TO_WIN_LIST(blst[i]->win); - } - } - /* Floating EWins */ - if (lst) + for (i = 0; i < wnum; i++) { - for (i = 0; i < wnum; i++) - { - if (!lst[i]->floating) - continue; + ewin = lst[i]; + if (!ewin->floating || EwinGetDesk(ewin) != desk) + continue; - _APPEND_TO_WIN_LIST(lst[i]->win); - } + _APPEND_TO_WIN_LIST(ewin->win); } - /* The virtual desktop windows */ - for (i = 0; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++) + /* "Above" buttons */ + for (i = 0; i < bnum; i++) { - if (desks.order[i] == 0) - break; + if (blst[i]->internal || blst[i]->desktop != desk || + blst[i]->ontop != 1) + continue; - _APPEND_TO_WIN_LIST(desks.desk[desks.order[i]].win); + _APPEND_TO_WIN_LIST(blst[i]->win); } - /* Non-sticky, "above" buttons */ - if (blst) + if (desk == 0) { - for (i = 0; i < bnum; i++) + /* The virtual desktop windows */ + for (i = 0; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++) { - if (blst[i]->desktop != desk || blst[i]->ontop != 1 || - blst[i]->sticky || blst[i]->internal) - continue; + if (desks.order[i] == 0) + break; - _APPEND_TO_WIN_LIST(blst[i]->win); + _APPEND_TO_WIN_LIST(desks.desk[desks.order[i]].win); } } @@ -1132,7 +1138,7 @@ for (i = 0; i < wnum; i++) { ewin = lst[i]; - if (EwinGetDesk(ewin) != desk || ewin->floating) + if (ewin->floating || EwinGetDesk(ewin) != desk) continue; _APPEND_TO_WIN_LIST(ewin->win); @@ -1140,21 +1146,25 @@ _APPEND_TO_WIN_LIST(Mode.menus.cover_win); } - /* Non-sticky, "below" buttons */ - if (blst) + /* "Normal" buttons */ + for (i = 0; i < bnum; i++) { - for (i = 0; i < bnum; i++) - { - if (blst[i]->desktop != desk || blst[i]->ontop != -1 || - blst[i]->sticky || blst[i]->internal) - continue; + if (blst[i]->internal || blst[i]->desktop != desk || + blst[i]->ontop != 0) + continue; - _APPEND_TO_WIN_LIST(blst[i]->win); - } + _APPEND_TO_WIN_LIST(blst[i]->win); } - /* The current (virtual) root window */ - _APPEND_TO_WIN_LIST(desks.desk[desk].win); + /* "Below" buttons */ + for (i = 0; i < bnum; i++) + { + if (blst[i]->internal || blst[i]->desktop != desk || + blst[i]->ontop != -1) + continue; + + _APPEND_TO_WIN_LIST(blst[i]->win); + } if (EventDebug(EDBUG_TYPE_STACKING)) { =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/ipc.c,v retrieving revision 1.184 retrieving revision 1.185 diff -u -3 -r1.184 -r1.185 --- ipc.c 12 Nov 2004 17:10:59 -0000 1.184 +++ ipc.c 17 Nov 2004 19:31:11 -0000 1.185 @@ -21,6 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define DECLARE_STRUCT_BACKGROUND +#define DECLARE_STRUCT_BUTTON #include "E.h" #include "timestamp.h" #include <ctype.h> @@ -1621,13 +1622,17 @@ } else if (!strcmp(params, "buttons")) { - Button **lst; + Button **lst, *b; lst = (Button **) ListItemType(&num, LIST_TYPE_BUTTON); for (i = 0; i < num; i++) { + b = lst[i]; buf2[0] = 0; - Esnprintf(buf2, sizeof(buf2), "%s\n", ButtonGetName(lst[i])); + Esnprintf(buf2, sizeof(buf2), + "%#lx %2d %2d %2d %5d+%5d %5dx%5d %s\n", b->win, + b->desktop, b->sticky, b->ontop, b->x, b->y, b->w, + b->h, ButtonGetName(b)); if (buf) buf = realloc(buf, strlen(buf) + strlen(buf2) + 1); else ------------------------------------------------------- This SF.Net email is sponsored by: InterSystems CACHE FREE OODBMS DOWNLOAD - A multidimensional database that combines robust object and relational technologies, making it a perfect match for Java, C++,COM, XML, ODBC and JDBC. www.intersystems.com/match8 _______________________________________________ enlightenment-cvs mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs