Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: Tag: branch-exp E.h edge.c events.c evhandlers.c iconify.c menus.c pager.c x.c Log Message: Begin using the new event dispatcher. =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v retrieving revision 1.314 retrieving revision 1.314.2.1 diff -u -3 -r1.314 -r1.314.2.1 --- E.h 26 Jul 2004 18:54:48 -0000 1.314 +++ E.h 26 Jul 2004 21:24:30 -0000 1.314.2.1 @@ -1324,6 +1324,7 @@ struct _menuitem { + Menu *menu; ImageClass *icon_iclass; char *text; short act_id; @@ -2101,7 +2102,6 @@ Dialog *FindDialogButton(Window win, int *bnum); Dialog *FindDialog(Window win); int FindADialog(void); -Pager *FindPager(Window win); DItem *FindDialogItem(Window win, Dialog ** dret); /* focus.c */ @@ -2648,7 +2648,6 @@ void RemoveWindowMatch(WindowMatch * wm); /* x.c */ -#if INCLUDE_NEW_EVENT_DISPATCHER typedef void (EventCallbackFunc) (XEvent * ev, void *prm); void EventCallbackRegister(Window win, int type, EventCallbackFunc * func, void *prm); @@ -2656,7 +2655,7 @@ EventCallbackFunc * func, void *prm); void EventCallbacksProcess(XEvent * ev); -#endif /* INCLUDE_NEW_EVENT_DISPATCHER */ + Pixmap ECreatePixmap(Display * display, Drawable d, unsigned int width, unsigned int height, unsigned depth); =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/edge.c,v retrieving revision 1.7 retrieving revision 1.7.2.1 diff -u -3 -r1.7 -r1.7.2.1 --- edge.c 29 Jun 2004 13:19:23 -0000 1.7 +++ edge.c 26 Jul 2004 21:24:30 -0000 1.7.2.1 @@ -94,6 +94,45 @@ data = NULL; } +static void +EdgeHandleEvents(XEvent * ev, void *prm) +{ + static int lastdir = -1; + int dir; + + dir = (int)prm; + if (dir < 0 || dir > 3) /* Should not be possible */ + return; + + switch (ev->type) + { + case EnterNotify: + DoIn("EDGE_TIMEOUT", ((double)Conf.edge_flip_resistance) / 100.0, + EdgeTimeout, dir, NULL); + break; + + case LeaveNotify: + RemoveTimerEvent("EDGE_TIMEOUT"); + break; + + case MotionNotify: + if (Mode.mode != MODE_MOVE_PENDING && Mode.mode != MODE_MOVE) + break; + + if ((lastdir != dir) && (Conf.edge_flip_resistance)) + { + if (dir < 0) + RemoveTimerEvent("EDGE_TIMEOUT"); + else + DoIn("EDGE_TIMEOUT", + ((double)Conf.edge_flip_resistance) / 100.0, EdgeTimeout, + dir, NULL); + lastdir = dir; + } + break; + } +} + void EdgeWindowsShow(void) { @@ -123,6 +162,10 @@ XSelectInput(disp, w4, EnterWindowMask | LeaveWindowMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask); + EventCallbackRegister(w1, 0, EdgeHandleEvents, (void *)0); + EventCallbackRegister(w2, 0, EdgeHandleEvents, (void *)1); + EventCallbackRegister(w3, 0, EdgeHandleEvents, (void *)2); + EventCallbackRegister(w4, 0, EdgeHandleEvents, (void *)3); } GetCurrentArea(&cx, &cy); GetAreaSize(&ax, &ay); @@ -156,72 +199,3 @@ EUnmapWindow(disp, w4); } } - -static int -IsEdgeWin(Window win) -{ - if (!w1) - return -1; - if (win == w1) - return 0; - else if (win == w2) - return 1; - else if (win == w3) - return 2; - else if (win == w4) - return 3; - return -1; -} - -void -EdgeHandleEnter(XEvent * ev) -{ - int dir; - - dir = IsEdgeWin(ev->xcrossing.window); - if (dir < 0) - return; - DoIn("EDGE_TIMEOUT", ((double)Conf.edge_flip_resistance) / 100.0, - EdgeTimeout, dir, NULL); -} - -void -EdgeHandleLeave(XEvent * ev) -{ - int dir; - - dir = IsEdgeWin(ev->xcrossing.window); - if (dir < 0) - return; - RemoveTimerEvent("EDGE_TIMEOUT"); -} - -void -EdgeHandleMotion(XEvent * ev) -{ - static int lastdir = -1; - int dir; - - if (Mode.mode != MODE_MOVE_PENDING && Mode.mode != MODE_MOVE) - return; - - dir = -1; - if (ev->xmotion.x_root == 0) - dir = 0; - else if (ev->xmotion.x_root == (VRoot.w - 1)) - dir = 1; - else if (ev->xmotion.y_root == 0) - dir = 2; - else if (ev->xmotion.y_root == (VRoot.h - 1)) - dir = 3; - - if ((lastdir != dir) && (Conf.edge_flip_resistance)) - { - if (dir < 0) - RemoveTimerEvent("EDGE_TIMEOUT"); - else - DoIn("EDGE_TIMEOUT", ((double)Conf.edge_flip_resistance) / 100.0, - EdgeTimeout, dir, NULL); - lastdir = dir; - } -} =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/events.c,v retrieving revision 1.69 retrieving revision 1.69.2.1 diff -u -3 -r1.69 -r1.69.2.1 --- events.c 15 Jul 2004 23:31:01 -0000 1.69 +++ events.c 26 Jul 2004 21:24:30 -0000 1.69.2.1 @@ -230,8 +230,20 @@ break; } - /* Should not be "global" */ - IconboxesHandleEvent(ev); + /* The new event dispatcher */ + EventCallbacksProcess(ev); + + /* Post-event stuff TBD */ + switch (ev->type) + { + case ButtonRelease: /* 5 */ + /* This shouldn't be here */ + if ((Mode.cur_menu_mode) && (!Mode.justclicked)) + MenusHide(); + Mode.justclicked = 0; + Mode.last_bpress = 0; + break; + } EDBUG_RETURN_; } =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/evhandlers.c,v retrieving revision 1.173 retrieving revision 1.173.2.1 diff -u -3 -r1.173 -r1.173.2.1 --- evhandlers.c 15 Jul 2004 23:31:01 -0000 1.173 +++ evhandlers.c 26 Jul 2004 21:24:30 -0000 1.173.2.1 @@ -120,9 +120,6 @@ if (DialogEventKeyPress(ev)) goto done; - if (MenusEventKeyPress(ev)) - goto done; - done: EDBUG_RETURN_; } @@ -213,9 +210,6 @@ EDBUG_RETURN_; } - if (MenusEventMouseDown(ev)) - goto done; - FocusHandleClick(win); if (double_click) @@ -247,9 +241,6 @@ } } - if (PagersEventMouseDown(ev)) - goto done; - done: EDBUG_RETURN_; } @@ -316,9 +307,6 @@ if (Mode.action_inhibit) goto done; - if (MenusEventMouseUp(ev)) - goto done; - if (ButtonsEventMouseUp(ev)) goto done; @@ -341,16 +329,11 @@ } } - if (PagersEventMouseUp(ev)) - goto done; - done: if ((Mode.slideout) && (pslideout)) SlideoutHide(Mode.slideout); Mode.action_inhibit = 0; - Mode.justclicked = 0; - Mode.last_bpress = 0; EDBUG_RETURN_; } @@ -361,7 +344,6 @@ EDBUG(5, "HandleMotion"); TooltipsHandleEvent(); - EdgeHandleMotion(ev); Mode.px = Mode.x; Mode.py = Mode.y; @@ -537,8 +519,6 @@ } } - PagersEventMotion(ev); - DialogEventMotion(ev); EDBUG_RETURN_; @@ -560,13 +540,6 @@ Mode.context_win = win; TooltipsHandleEvent(); - EdgeHandleEnter(ev); - - if (PagersEventMouseIn(ev)) - goto done; - - if (MenusEventMouseIn(ev)) - goto done; if ( /*!clickmenu && */ BordersEventMouseIn(ev)) goto done; @@ -594,16 +567,9 @@ EDBUG_RETURN_; TooltipsHandleEvent(); - EdgeHandleLeave(ev); Mode.context_win = win; - if (PagersEventMouseOut(ev)) - goto done; - - if (MenusEventMouseOut(ev)) - goto done; - if ( /*!clickmenu && */ BordersEventMouseOut(ev)) goto done; =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/iconify.c,v retrieving revision 1.116 retrieving revision 1.116.2.1 diff -u -3 -r1.116 -r1.116.2.1 --- iconify.c 17 Jul 2004 08:55:34 -0000 1.116 +++ iconify.c 26 Jul 2004 21:24:30 -0000 1.116.2.1 @@ -28,6 +28,12 @@ #define y1 y1_ static void IconboxRedraw(Iconbox * ib); +static void IboxEventScrollWin(XEvent * ev, void *prm); +static void IboxEventScrollbarWin(XEvent * ev, void *prm); +static void IboxEventCoverWin(XEvent * ev, void *prm); +static void IboxEventArrow1Win(XEvent * ev, void *prm); +static void IboxEventArrow2Win(XEvent * ev, void *prm); +static void IboxEventIconWin(XEvent * ev, void *prm); #define IB_ANIM_TIME 0.25 @@ -423,11 +429,17 @@ ib->scrollbox_clicked = 0; ib->win = ECreateWindow(VRoot.win, 0, 0, 128, 32, 0); ib->icon_win = ECreateWindow(ib->win, 0, 0, 128, 26, 0); + EventCallbackRegister(ib->icon_win, 0, IboxEventIconWin, ib); ib->cover_win = ECreateWindow(ib->win, 0, 0, 128, 26, 0); + EventCallbackRegister(ib->cover_win, 0, IboxEventCoverWin, ib); ib->scroll_win = ECreateWindow(ib->win, 6, 26, 116, 6, 0); + EventCallbackRegister(ib->scroll_win, 0, IboxEventScrollWin, ib); ib->arrow1_win = ECreateWindow(ib->win, 0, 26, 6, 6, 0); + EventCallbackRegister(ib->arrow1_win, 0, IboxEventArrow1Win, ib); ib->arrow2_win = ECreateWindow(ib->win, 122, 26, 6, 6, 0); + EventCallbackRegister(ib->arrow2_win, 0, IboxEventArrow2Win, ib); ib->scrollbar_win = ECreateWindow(ib->scroll_win, 122, 26, 6, 6, 0); + EventCallbackRegister(ib->scrollbar_win, 0, IboxEventScrollbarWin, ib); ib->scrollbarknob_win = ECreateWindow(ib->scrollbar_win, -20, -20, 4, 4, 0); ib->pmap = ECreatePixmap(disp, ib->icon_win, 128, 32, VRoot.depth); XSelectInput(disp, ib->icon_win, @@ -2295,253 +2307,305 @@ } } -void -IconboxesHandleEvent(XEvent * ev) +static void +IboxEventScrollWin(XEvent * ev, void *prm) { - Iconbox **ib; - int i, num; + Iconbox *ib = (Iconbox *) prm; + int x, y, w, h; - if (Mode.mode != MODE_NONE) - return; + switch (ev->type) + { + case ButtonPress: + if (ev->xbutton.button == 1) + ib->scrollbox_clicked = 1; + else if (ev->xbutton.button == 3) + IB_ShowMenu(ib, ev->xbutton.x, ev->xbutton.y); + break; + case ButtonRelease: + if (!ib->scrollbox_clicked) + break; + + ib->scrollbox_clicked = 0; + GetWinXY(ib->scrollbar_win, &x, &y); + GetWinWH(ib->scrollbar_win, (unsigned int *)&w, (unsigned int *)&h); + if (ev->xbutton.x < x) + IB_Scroll(ib, -8); + if (ev->xbutton.x > (x + w)) + IB_Scroll(ib, 8); + break; + } +} - ib = ListAllIconboxes(&num); - if (!ib) - return; +static void +IboxEventScrollbarWin(XEvent * ev, void *prm) +{ + Iconbox *ib = (Iconbox *) prm; + static int px, py; + int dx, dy, bs, x, y; + ImageClass *ic; - for (i = 0; i < num; i++) + switch (ev->type) { - if (ev->xany.window == ib[i]->scroll_win) + case ButtonPress: + if (ev->xbutton.button == 1) { - if (ev->type == ButtonPress) - { - if (ev->xbutton.button == 1) - ib[i]->scrollbox_clicked = 1; - else if (ev->xbutton.button == 3) - IB_ShowMenu(ib[i], ev->xbutton.x, ev->xbutton.y); - } - else if ((ev->type == ButtonRelease) && (ib[i]->scrollbox_clicked)) - { - int x, y, w, h; - - ib[i]->scrollbox_clicked = 0; - GetWinXY(ib[i]->scrollbar_win, &x, &y); - GetWinWH(ib[i]->scrollbar_win, (unsigned int *)&w, - (unsigned int *)&h); - if (ev->xbutton.x < x) - IB_Scroll(ib[i], -8); - if (ev->xbutton.x > (x + w)) - IB_Scroll(ib[i], 8); - } + px = ev->xbutton.x_root; + py = ev->xbutton.y_root; + ib->scrollbar_clicked = 1; } - if (ev->xany.window == ib[i]->scrollbar_win) - { - static int px, py; + else if (ev->xbutton.button == 3) + IB_ShowMenu(ib, ev->xbutton.x, ev->xbutton.y); + break; - if (ev->type == ButtonPress) - { - if (ev->xbutton.button == 1) - { - px = ev->xbutton.x_root; - py = ev->xbutton.y_root; - ib[i]->scrollbar_clicked = 1; - } - else if (ev->xbutton.button == 3) - IB_ShowMenu(ib[i], ev->xbutton.x, ev->xbutton.y); - } - else if ((ev->type == ButtonRelease) && (ib[i]->scrollbar_clicked)) - ib[i]->scrollbar_clicked = 0; - else if (ev->type == EnterNotify) - ib[i]->scrollbar_hilited = 1; - else if (ev->type == LeaveNotify) - ib[i]->scrollbar_hilited = 0; - else if ((ev->type == MotionNotify) && (ib[i]->scrollbar_clicked)) - { - int dx, dy, bs, x, y; - ImageClass *ic; - - dx = ev->xmotion.x_root - px; - dy = ev->xmotion.y_root - py; - px = ev->xmotion.x_root; - py = ev->xmotion.y_root; + case ButtonRelease: + if (ib->scrollbar_clicked) + ib->scrollbar_clicked = 0; + break; - if (ib[i]->orientation) - { - ic = FindItem("ICONBOX_SCROLLBAR_BASE_VERTICAL", 0, - LIST_FINDBY_NAME, LIST_TYPE_ICLASS); - GetWinXY(ib[i]->scrollbar_win, &x, &y); - bs = ib[i]->h - (ib[i]->arrow_thickness * 2); - if (ic) - { - bs -= (ic->padding.top + ic->padding.bottom); - y -= ic->padding.top; - } - if (bs < 1) - bs = 1; - ib[i]->pos = ((y + dy + 1) * ib[i]->max) / bs; - IB_FixPos(ib[i]); - IconboxRedraw(ib[i]); - } - else - { - ic = FindItem("ICONBOX_SCROLLBAR_BASE_HORIZONTAL", 0, - LIST_FINDBY_NAME, LIST_TYPE_ICLASS); - GetWinXY(ib[i]->scrollbar_win, &x, &y); - bs = ib[i]->w - (ib[i]->arrow_thickness * 2); - if (ic) - { - bs -= (ic->padding.left + ic->padding.right); - x -= ic->padding.left; - } - if (bs < 1) - bs = 1; - ib[i]->pos = ((x + dx + 1) * ib[i]->max) / bs; - IB_FixPos(ib[i]); - IconboxRedraw(ib[i]); - } - } - IB_DrawScroll(ib[i]); - } - else if (ev->xany.window == ib[i]->cover_win) - { - if (ev->type == ButtonPress) - IB_ShowMenu(ib[i], ev->xbutton.x, ev->xbutton.y); - } - else if (ev->xany.window == ib[i]->arrow1_win) + case EnterNotify: + ib->scrollbar_hilited = 1; + break; + + case LeaveNotify: + ib->scrollbar_hilited = 0; + break; + + case MotionNotify: + if (!ib->scrollbar_clicked) + break; + + dx = ev->xmotion.x_root - px; + dy = ev->xmotion.y_root - py; + px = ev->xmotion.x_root; + py = ev->xmotion.y_root; + + if (ib->orientation) { - if (ev->type == ButtonPress) - { - if (ev->xbutton.button == 1) - ib[i]->arrow1_clicked = 1; - else if (ev->xbutton.button == 3) - IB_ShowMenu(ib[i], ev->xbutton.x, ev->xbutton.y); - } - else if ((ev->type == ButtonRelease) && (ib[i]->arrow1_clicked)) + ic = FindItem("ICONBOX_SCROLLBAR_BASE_VERTICAL", 0, + LIST_FINDBY_NAME, LIST_TYPE_ICLASS); + GetWinXY(ib->scrollbar_win, &x, &y); + bs = ib->h - (ib->arrow_thickness * 2); + if (ic) { - ib[i]->arrow1_clicked = 0; - IB_Scroll(ib[i], -8); + bs -= (ic->padding.top + ic->padding.bottom); + y -= ic->padding.top; } - else if (ev->type == EnterNotify) - ib[i]->arrow1_hilited = 1; - else if (ev->type == LeaveNotify) - ib[i]->arrow1_hilited = 0; - IB_DrawScroll(ib[i]); + if (bs < 1) + bs = 1; + ib->pos = ((y + dy + 1) * ib->max) / bs; + IB_FixPos(ib); + IconboxRedraw(ib); } - else if (ev->xany.window == ib[i]->arrow2_win) + else { - if (ev->type == ButtonPress) - { - if (ev->xbutton.button == 1) - ib[i]->arrow2_clicked = 1; - else if (ev->xbutton.button == 3) - IB_ShowMenu(ib[i], ev->xbutton.x, ev->xbutton.y); - } - else if ((ev->type == ButtonRelease) && (ib[i]->arrow2_clicked)) + ic = FindItem("ICONBOX_SCROLLBAR_BASE_HORIZONTAL", 0, + LIST_FINDBY_NAME, LIST_TYPE_ICLASS); + GetWinXY(ib->scrollbar_win, &x, &y); + bs = ib->w - (ib->arrow_thickness * 2); + if (ic) { - ib[i]->arrow2_clicked = 0; - IB_Scroll(ib[i], 8); + bs -= (ic->padding.left + ic->padding.right); + x -= ic->padding.left; } - else if (ev->type == EnterNotify) - ib[i]->arrow2_hilited = 1; - else if (ev->type == LeaveNotify) - ib[i]->arrow2_hilited = 0; - IB_DrawScroll(ib[i]); + if (bs < 1) + bs = 1; + ib->pos = ((x + dx + 1) * ib->max) / bs; + IB_FixPos(ib); + IconboxRedraw(ib); } - else if (ev->xany.window == ib[i]->icon_win) - { - static EWin *name_ewin = NULL; + } + IB_DrawScroll(ib); +} - if ((ev->type == MotionNotify) || (ev->type == EnterNotify)) - { - EWin *ewin = NULL; - ToolTip *tt = NULL; +static void +IboxEventCoverWin(XEvent * ev, void *prm) +{ + Iconbox *ib = (Iconbox *) prm; - if (ev->type == MotionNotify) - { - ewin = IB_FindIcon(ib[i], ev->xmotion.x, ev->xmotion.y); - Mode.x = ev->xmotion.x_root; - Mode.y = ev->xmotion.y_root; - } - else - { - ewin = - IB_FindIcon(ib[i], ev->xcrossing.x, ev->xcrossing.y); - Mode.x = ev->xcrossing.x_root; - Mode.y = ev->xcrossing.y_root; - } + switch (ev->type) + { + case ButtonPress: + IB_ShowMenu(ib, ev->xbutton.x, ev->xbutton.y); + break; + case ButtonRelease: + break; + } +} - if (ib[i]->shownames && ewin != name_ewin) - { - tt = FindItem("ICONBOX", 0, LIST_FINDBY_NAME, - LIST_TYPE_TOOLTIP); - if (tt) - { - const char *name; +static void +IboxEventArrow1Win(XEvent * ev, void *prm) +{ + Iconbox *ib = (Iconbox *) prm; - HideToolTip(tt); - if (ewin) - { - - name = EwinGetIconName(ewin); - if (name) - ShowToolTip(tt, name, NULL, Mode.x, Mode.y); - } - } - name_ewin = ewin; - } - } - else if (ev->type == LeaveNotify) - { - ToolTip *tt = NULL; + switch (ev->type) + { + case ButtonPress: + if (ev->xbutton.button == 1) + ib->arrow1_clicked = 1; + else if (ev->xbutton.button == 3) + IB_ShowMenu(ib, ev->xbutton.x, ev->xbutton.y); + break; + + case ButtonRelease: + if (!ib->arrow1_clicked) + break; + ib->arrow1_clicked = 0; + IB_Scroll(ib, -8); + break; + + case EnterNotify: + ib->arrow1_hilited = 1; + break; + + case LeaveNotify: + ib->arrow1_hilited = 0; + break; + } + IB_DrawScroll(ib); +} + +static void +IboxEventArrow2Win(XEvent * ev, void *prm) +{ + Iconbox *ib = (Iconbox *) prm; + + switch (ev->type) + { + case ButtonPress: + if (ev->xbutton.button == 1) + ib->arrow2_clicked = 1; + else if (ev->xbutton.button == 3) + IB_ShowMenu(ib, ev->xbutton.x, ev->xbutton.y); + break; + + case ButtonRelease: + if (!ib->arrow2_clicked) + break; + ib->arrow2_clicked = 0; + IB_Scroll(ib, -8); + break; + + case EnterNotify: + ib->arrow2_hilited = 1; + break; + + case LeaveNotify: + ib->arrow2_hilited = 0; + break; + } + IB_DrawScroll(ib); +} + +static void +IboxEventIconWin(XEvent * ev, void *prm) +{ + Iconbox *ib = (Iconbox *) prm; + static EWin *name_ewin = NULL; + ToolTip *tt; + EWin *ewin; + EWin **gwins; + int j, numg; + char iconified; + + switch (ev->type) + { + case ButtonPress: + if (ev->xbutton.button == 1) + ib->icon_clicked = 1; + else if (ev->xbutton.button == 3) + IB_ShowMenu(ib, ev->xbutton.x, ev->xbutton.y); + break; + + case ButtonRelease: + if (!ib->icon_clicked) + break; + + ib->icon_clicked = 0; + ewin = IB_FindIcon(ib, ev->xbutton.x, ev->xbutton.y); + if (ewin) + { + tt = FindItem("ICONBOX", 0, LIST_FINDBY_NAME, LIST_TYPE_TOOLTIP); + if (tt) + HideToolTip(tt); + gwins = + ListWinGroupMembersForEwin(ewin, ACTION_ICONIFY, + Mode.nogroup, &numg); + iconified = ewin->iconified; - tt = FindItem("ICONBOX", 0, LIST_FINDBY_NAME, - LIST_TYPE_TOOLTIP); - if (tt) + if (gwins) + { + for (j = 0; j < numg; j++) { - HideToolTip(tt); - name_ewin = NULL; + if ((gwins[j]->iconified) && (iconified)) + DeIconifyEwin(gwins[j]); } + Efree(gwins); } - else if (ev->type == ButtonPress) + } + break; + + case MotionNotify: + case EnterNotify: + if (ev->type == MotionNotify) + { + ewin = IB_FindIcon(ib, ev->xmotion.x, ev->xmotion.y); + Mode.x = ev->xmotion.x_root; + Mode.y = ev->xmotion.y_root; + } + else + { + ewin = IB_FindIcon(ib, ev->xcrossing.x, ev->xcrossing.y); + Mode.x = ev->xcrossing.x_root; + Mode.y = ev->xcrossing.y_root; + } + + if (ib->shownames && ewin != name_ewin) + { + tt = FindItem("ICONBOX", 0, LIST_FINDBY_NAME, LIST_TYPE_TOOLTIP); + if (tt) { - if (ev->xbutton.button == 1) - ib[i]->icon_clicked = 1; - else if (ev->xbutton.button == 3) - IB_ShowMenu(ib[i], ev->xbutton.x, ev->xbutton.y); - } - else if ((ev->type == ButtonRelease) && (ib[i]->icon_clicked)) - { - EWin *ewin; - EWin **gwins; - int j, numg; - char iconified; + const char *name; - ib[i]->icon_clicked = 0; - ewin = IB_FindIcon(ib[i], ev->xbutton.x, ev->xbutton.y); + HideToolTip(tt); if (ewin) { - ToolTip *tt = NULL; - - tt = FindItem("ICONBOX", 0, LIST_FINDBY_NAME, - LIST_TYPE_TOOLTIP); - if (tt) - HideToolTip(tt); - gwins = - ListWinGroupMembersForEwin(ewin, ACTION_ICONIFY, - Mode.nogroup, &numg); - iconified = ewin->iconified; - if (gwins) - { - for (j = 0; j < numg; j++) - { - if ((gwins[j]->iconified) && (iconified)) - DeIconifyEwin(gwins[j]); - } - Efree(gwins); - } + name = EwinGetIconName(ewin); + if (name) + ShowToolTip(tt, name, NULL, Mode.x, Mode.y); } } + name_ewin = ewin; } + break; + + case LeaveNotify: + tt = FindItem("ICONBOX", 0, LIST_FINDBY_NAME, LIST_TYPE_TOOLTIP); + if (tt) + { + HideToolTip(tt); + name_ewin = NULL; + } + break; + } +} + +#if 0 +static void +IboxEventScrolWin(XEvent * ev, void *prm) +{ + MenuItem *mi = (MenuItem *) prm; + + switch (ev->type) + { + case ButtonPress: + break; + case ButtonRelease: + break; + case EnterNotify: + break; + case LeaveNotify: + break; } - Efree(ib); } +#endif =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/menus.c,v retrieving revision 1.147 retrieving revision 1.147.2.1 diff -u -3 -r1.147 -r1.147.2.1 --- menus.c 15 Jul 2004 23:31:02 -0000 1.147 +++ menus.c 26 Jul 2004 21:24:30 -0000 1.147.2.1 @@ -38,6 +38,9 @@ static void FillFlatFileMenu(Menu * m, MenuStyle * ms, char *name, char *file, Menu * parent); +static void MenuHandleEvents(XEvent * ev, void *m); +static void MenuItemHandleEvents(XEvent * ev, void *mi); + static Menu *active_menu = NULL; static MenuItem *active_item = NULL; @@ -58,35 +61,6 @@ rc = XUngrabKeyboard(disp, CurrentTime); } -static Menu * -FindMenuItem(Window win, MenuItem ** mi) -{ - Menu *menu = NULL; - Menu **menus; - int i, j, num; - - EDBUG(6, "FindMenuItem"); - - menus = (Menu **) ListItemType(&num, LIST_TYPE_MENU); - for (i = 0; i < num; i++) - { - for (j = 0; j < menus[i]->num; j++) - { - if ((win == menus[i]->items[j]->win) || - (win == menus[i]->items[j]->icon_win)) - { - *mi = menus[i]->items[j]; - menu = menus[i]; - break; - } - } - } - if (menus) - Efree(menus); - - EDBUG_RETURN(menu); -} - Menu * FindMenu(Window win) { @@ -621,7 +595,10 @@ EDBUG_RETURN_; if (!m->win) - m->win = ECreateWindow(VRoot.win, 0, 0, 1, 1, 0); + { + m->win = ECreateWindow(VRoot.win, 0, 0, 1, 1, 0); + EventCallbackRegister(m->win, 0, MenuHandleEvents, m); + } if (m->title) { @@ -637,11 +614,15 @@ for (i = 0; i < m->num; i++) { + m->items[i]->menu = m; if (m->items[i]->child) has_s = 1; else has_i = 1; m->items[i]->win = ECreateWindow(m->win, 0, 0, 1, 1, 0); + EventCallbackRegister(m->items[i]->win, 0, MenuItemHandleEvents, + m->items[i]); + XChangeWindowAttributes(disp, m->items[i]->win, CWEventMask, &att); EMapWindow(disp, m->items[i]->win); if ((m->style) && (m->style->tclass) && (m->items[i]->text)) @@ -2330,19 +2311,13 @@ return FindEwinSpawningMenu(m); } -int -MenusEventKeyPress(XEvent * ev) +static void +MenuEventKeyPress(Menu * m, XEvent * ev) { - Window win = ev->xkey.window; KeySym key; - Menu *m; MenuItem *mi; EWin *ewin; - m = FindMenu(win); - if (m == NULL) - return 0; - mi = NULL; if (active_menu) { @@ -2400,25 +2375,17 @@ ActionsCall(mi->act_id, NULL, mi->params); break; } - - return 1; } -int -MenusEventMouseDown(XEvent * ev) +static void +MenuItemEventMouseDown(MenuItem * mi, XEvent * ev __UNUSED__) { Menu *m; - MenuItem *mi; EWin *ewin; - m = FindMenuItem(ev->xbutton.window, &mi); - if (m == NULL) - return 0; - if (mi == NULL) - goto done; - Mode.cur_menu_mode = 1; + m = mi->menu; mi->state = STATE_CLICKED; MenuDrawItem(m, mi, 1); @@ -2460,18 +2427,17 @@ } } - done: - return 1; + return; } -int -MenusEventMouseUp(XEvent * ev) +static void +MenuItemEventMouseUp(MenuItem * mi, XEvent * ev __UNUSED__) { Menu *m; - MenuItem *mi; EWin *ewin; - m = FindMenuItem(ev->xbutton.window, &mi); + m = mi->menu; + if ((m) && (mi->state)) { mi->state = STATE_HILITED; @@ -2481,7 +2447,7 @@ ewin = MenuFindContextEwin(m); MenusHide(); ActionsCall(mi->act_id, ewin, mi->params); - return 1; + return; } } @@ -2511,16 +2477,14 @@ } } MenusHide(); - return 1; + return; } if ((Mode.cur_menu_mode) && (!Mode.justclicked)) { MenusHide(); - return 1; + return; } - - return 0; } struct _mdata @@ -2689,18 +2653,13 @@ } } -int -MenusEventMouseIn(XEvent * ev) +static void +MenuItemEventMouseIn(MenuItem * mi, XEvent * ev) { Window win = ev->xcrossing.window; Menu *m; - MenuItem *mi; - m = FindMenuItem(win, &mi); - if (m == NULL) - return 0; - if (mi == NULL) - goto done; + m = mi->menu; PagerHideAllHi(); @@ -2712,21 +2671,16 @@ MenuActivateItem(m, mi); done: - return 1; + return; } -int -MenusEventMouseOut(XEvent * ev) +static void +MenuItemEventMouseOut(MenuItem * mi, XEvent * ev) { Window win = ev->xcrossing.window; Menu *m; - MenuItem *mi; - m = FindMenuItem(win, &mi); - if (m == NULL) - return 0; - if (mi == NULL) - goto done; + m = mi->menu; if ((win == mi->icon_win) && (ev->xcrossing.detail == NotifyAncestor)) goto done; @@ -2736,5 +2690,42 @@ MenuActivateItem(m, NULL); done: - return 1; + return; +} + +static void +MenuHandleEvents(XEvent * ev, void *prm) +{ + Menu *m = (Menu *) prm; + + switch (ev->type) + { + case KeyPress: + MenuEventKeyPress(m, ev); + break; + case ButtonRelease: + break; + } +} + +static void +MenuItemHandleEvents(XEvent * ev, void *prm) +{ + MenuItem *mi = (MenuItem *) prm; + + switch (ev->type) + { + case ButtonPress: + MenuItemEventMouseDown(mi, ev); + break; + case ButtonRelease: + MenuItemEventMouseUp(mi, ev); + break; + case EnterNotify: + MenuItemEventMouseIn(mi, ev); + break; + case LeaveNotify: + MenuItemEventMouseOut(mi, ev); + break; + } } =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/pager.c,v retrieving revision 1.103 retrieving revision 1.103.2.1 diff -u -3 -r1.103 -r1.103.2.1 --- pager.c 25 Jul 2004 09:34:43 -0000 1.103 +++ pager.c 26 Jul 2004 21:24:30 -0000 1.103.2.1 @@ -50,6 +50,9 @@ static void PagerEwinUpdateMini(Pager * p, EWin * ewin); static void PagerEwinUpdateFromPager(Pager * p, EWin * ewin); +static void PagerEventMainWin(XEvent * ev, void *prm); +static void PagerEventHiWin(XEvent * ev, void *prm); + static Pager *mode_context_pager = NULL; #define HIQ Conf.pagers.hiq @@ -147,9 +150,11 @@ p->dw = ((48 * VRoot.w) / VRoot.h); p->dh = 48; p->win = ECreateWindow(VRoot.win, 0, 0, p->w, p->h, 0); + EventCallbackRegister(p->win, 0, PagerEventMainWin, p); p->pmap = ECreatePixmap(disp, p->win, p->w, p->h, VRoot.depth); ESetWindowBackgroundPixmap(disp, p->win, p->pmap); p->hi_win = ECreateWindow(VRoot.win, 0, 0, 3, 3, 0); + EventCallbackRegister(p->hi_win, 0, PagerEventHiWin, p); p->hi_visible = 0; p->hi_ewin = NULL; XSelectInput(disp, p->hi_win, @@ -1529,31 +1534,6 @@ return (p) ? p->hi_win : 0; } -Pager * -FindPager(Window win) -{ - Pager *p, *pr = NULL; - Pager **ps; - int i, num; - - EDBUG(6, "FindDialog"); - - ps = (Pager **) ListItemType(&num, LIST_TYPE_PAGER); - for (i = 0; i < num; i++) - { - p = ps[i]; - if ((p->win == win) || (p->hi_win == win)) - { - pr = p; - break; - } - } - if (ps) - Efree(ps); - - EDBUG_RETURN(pr); -} - /* * Pager event handlers */ @@ -1634,16 +1614,14 @@ EwinGroupMove(p->hi_ewin, pd->desktop, x, y); } -int -PagersEventMotion(XEvent * ev) +static int +PagerEventMotion(Pager * p, XEvent * ev) { int used = 0; - Pager *p; switch (Mode.mode) { case MODE_NONE: - p = FindPager(ev->xmotion.window); if (p == NULL) break; used = 1; @@ -1654,7 +1632,6 @@ case MODE_PAGER_DRAG_PENDING: case MODE_PAGER_DRAG: Mode.mode = MODE_PAGER_DRAG; - p = mode_context_pager; if (p == NULL) break; used = 1; @@ -1672,18 +1649,13 @@ return used; } -int -PagersEventMouseDown(XEvent * ev) +static void +PagerEventMouseDown(Pager * p, XEvent * ev) { Window win = ev->xbutton.window, child; int i, num, px, py, in_pager; - Pager *p; EWin *ewin, **gwins; - p = FindPager(win); - if (!p) - return 0; - gwins = ListWinGroupMembersForEwin(p->hi_ewin, ACTION_MOVE, Mode.nogroup, &num); gwin_px = calloc(num, sizeof(int)); @@ -1743,26 +1715,18 @@ mode_context_pager = p; } } - - return 1; } -int -PagersEventMouseUp(XEvent * ev) +static int +PagerEventMouseUp(Pager * p, XEvent * ev) { Window win = ev->xbutton.window, child; int used = 0; int i, num, px, py, in_pager, in_vroot; - Pager *p; EWin *ewin, **gwins; int x, y, pax, pay; int mode_was; - p = FindPager(win); - if (!p) - goto done; - - used = 1; mode_was = Mode.mode; Mode.mode = MODE_NONE; @@ -1896,38 +1860,60 @@ return used; } -int -PagersEventMouseIn(XEvent * ev) +static void +PagerEventMainWin(XEvent * ev, void *prm) { - Pager *p; - Window win = ev->xcrossing.window; + Pager *p = (Pager *) prm; - p = FindPager(win); - if (p) + switch (ev->type) { + case ButtonPress: + PagerEventMouseDown(p, ev); + break; + case ButtonRelease: + PagerEventMouseUp(p, ev); + break; + case MotionNotify: + PagerEventMotion(p, ev); + break; + case EnterNotify: #if 0 /* Nothing done here */ - PagerHandleMotion(p, win, ev->xcrossing.x, ev->xcrossing.y, + PagerHandleMotion(p, ev->xany.window, ev->xcrossing.x, ev->xcrossing.y, PAGER_EVENT_MOUSE_IN); #endif - return 1; + break; + case LeaveNotify: + PagerHandleMotion(p, ev->xany.window, ev->xcrossing.x, ev->xcrossing.y, + PAGER_EVENT_MOUSE_OUT); + break; } - - return 0; } -int -PagersEventMouseOut(XEvent * ev) +static void +PagerEventHiWin(XEvent * ev, void *prm) { - Pager *p; - Window win = ev->xcrossing.window; + Pager *p = (Pager *) prm; - p = FindPager(win); - if (p) + switch (ev->type) { - PagerHandleMotion(p, win, ev->xcrossing.x, ev->xcrossing.y, + case ButtonPress: + PagerEventMouseDown(p, ev); + break; + case ButtonRelease: + PagerEventMouseUp(p, ev); + break; + case MotionNotify: + PagerEventMotion(p, ev); + break; + case EnterNotify: +#if 0 /* Nothing done here */ + PagerHandleMotion(p, ev->xany.window, ev->xcrossing.x, ev->xcrossing.y, + PAGER_EVENT_MOUSE_IN); +#endif + break; + case LeaveNotify: + PagerHandleMotion(p, ev->xany.window, ev->xcrossing.x, ev->xcrossing.y, PAGER_EVENT_MOUSE_OUT); - return 1; + break; } - - return 0; } =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/x.c,v retrieving revision 1.71 retrieving revision 1.71.2.1 diff -u -3 -r1.71 -r1.71.2.1 --- x.c 31 May 2004 20:03:06 -0000 1.71 +++ x.c 26 Jul 2004 21:24:30 -0000 1.71.2.1 @@ -20,12 +20,10 @@ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#define INCLUDE_NEW_EVENT_DISPATCHER 0 #include "E.h" #include <X11/Xutil.h> #include <X11/Xresource.h> -#if INCLUDE_NEW_EVENT_DISPATCHER typedef struct { EventCallbackFunc *func; @@ -37,13 +35,10 @@ int num; EventCallbackItem *lst; } EventCallbackList; -#endif /* INCLUDE_NEW_EVENT_DISPATCHER */ typedef struct _exid { -#if INCLUDE_NEW_EVENT_DISPATCHER EventCallbackList cbl; -#endif /* INCLUDE_NEW_EVENT_DISPATCHER */ Window parent; Window win; int x, y, w, h; @@ -105,12 +100,19 @@ XDeleteContext(disp, win, xid_context); if (xid->rects) XFree(xid->rects); +#if 0 + if (xid->cbl.lst) + Eprintf("EventCallbacksUnregister: %p %#lx\n", xid, win); +#endif + if (xid->cbl.lst) + Efree(xid->cbl.lst); Efree(xid); } } static void -SetXID(Window win, Window parent, int x, int y, int w, int h, int depth) +SetXID(Window win, Window parent, int x, int y, int w, int h, + int depth __UNUSED__) { EXID *xid; @@ -123,11 +125,8 @@ xid->h = h; xid->depth = VRoot.depth; AddXID(xid); - return; - depth = 0; } -#if INCLUDE_NEW_EVENT_DISPATCHER void EventCallbackRegister(Window win, int type __UNUSED__, EventCallbackFunc * func, void *prm) @@ -136,6 +135,9 @@ EventCallbackItem *eci; xid = FindXID(win); +#if 0 + Eprintf("EventCallbackRegister: %p %#lx\n", xid, win); +#endif if (xid == NULL) return; @@ -147,6 +149,7 @@ eci->prm = prm; } +/* Not used/tested */ void EventCallbackUnregister(Window win, int type __UNUSED__, EventCallbackFunc * func, void *prm) @@ -157,6 +160,9 @@ int i; xid = FindXID(win); +#if 0 + Eprintf("EventCallbackUnregister: %p %#lx\n", xid, win); +#endif if (xid == NULL) return; @@ -165,7 +171,19 @@ for (i = 0; i < ecl->num; i++, eci++) if (eci->func == func && eci->prm == prm) { - /* Well - remove it */ + ecl->num--; + if (ecl->num) + { + for (; i < ecl->num; i++, eci++) + *eci = *(eci + 1); + xid->cbl.lst = + Erealloc(xid->cbl.lst, ecl->num * sizeof(EventCallbackItem)); + } + else + { + Efree(xid->cbl.lst); + xid->cbl.lst = NULL; + } return; } } @@ -192,7 +210,6 @@ eci->func(ev, eci->prm); } } -#endif /* INCLUDE_NEW_EVENT_DISPATCHER */ Pixmap ECreatePixmap(Display * display, Drawable d, unsigned int width, @@ -229,11 +246,10 @@ attr.save_under = True; else attr.save_under = False; - win = - XCreateWindow(disp, parent, x, y, w, h, 0, VRoot.depth, InputOutput, - VRoot.vis, - CWOverrideRedirect | CWSaveUnder | CWBackingStore | - CWColormap | CWBackPixmap | CWBorderPixel, &attr); + win = XCreateWindow(disp, parent, x, y, w, h, 0, VRoot.depth, InputOutput, + VRoot.vis, + CWOverrideRedirect | CWSaveUnder | CWBackingStore | + CWColormap | CWBackPixmap | CWBorderPixel, &attr); SetXID(win, parent, x, y, w, h, VRoot.depth); EDBUG_RETURN(win); @@ -734,12 +750,9 @@ EDBUG(6, "ECreateEventWindow"); attr.override_redirect = False; - win = - XCreateWindow(disp, parent, x, y, w, h, 0, 0, InputOnly, VRoot.vis, - CWOverrideRedirect, &attr); -#if 0 /* Not yet */ + win = XCreateWindow(disp, parent, x, y, w, h, 0, 0, InputOnly, VRoot.vis, + CWOverrideRedirect, &attr); SetXID(win, parent, x, y, w, h, VRoot.depth); -#endif EDBUG_RETURN(win); } @@ -764,11 +777,11 @@ attr.save_under = False; attr.event_mask = KeyPressMask | FocusChangeMask; - win = - XCreateWindow(disp, parent, x, y, w, h, 0, 0, InputOnly, CopyFromParent, - CWOverrideRedirect | CWSaveUnder | CWBackingStore | - CWColormap | CWBackPixel | CWBorderPixel | CWEventMask, - &attr); + win = XCreateWindow(disp, parent, x, y, w, h, 0, 0, InputOnly, + CopyFromParent, + CWOverrideRedirect | CWSaveUnder | CWBackingStore | + CWColormap | CWBackPixel | CWBorderPixel | CWEventMask, + &attr); XSetWindowBackground(disp, win, 0); XMapWindow(disp, win); ------------------------------------------------------- This SF.Net email is sponsored by BEA Weblogic Workshop FREE Java Enterprise J2EE developer tools! Get your free copy of BEA WebLogic Workshop 8.1 today. http://ads.osdn.com/?ad_id=4721&alloc_id=10040&op=click _______________________________________________ enlightenment-cvs mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs