Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: dialog.c Log Message: Simplify dialog event processing. =================================================================== RCS file: /cvs/e/e16/e/src/dialog.c,v retrieving revision 1.151 retrieving revision 1.152 diff -u -3 -r1.151 -r1.152 --- dialog.c 26 Apr 2006 23:43:07 -0000 1.151 +++ dialog.c 27 Apr 2006 16:25:19 -0000 1.152 @@ -121,6 +121,7 @@ struct _ditem { int type; + Dialog *dlg; DialogCallbackFunc *func; int val; void *data; @@ -206,6 +207,7 @@ static int FindADialog(void); static void DialogHandleEvents(XEvent * ev, void *prm); +static void DItemHandleEvents(XEvent * ev, void *prm); static void DButtonHandleEvents(XEvent * ev, void *prm); static void MoveTableBy(Dialog * d, DItem * di, int dx, int dy); @@ -726,6 +728,7 @@ if (!di) return di; + di->dlg = d; di->item.table.num_columns = 1; return di; @@ -833,6 +836,7 @@ Erealloc(dii->item.table.items, sizeof(DItem *) * dii->item.table.num_items); dii->item.table.items[dii->item.table.num_items - 1] = di; + di->dlg = dii->dlg; } return di; @@ -1031,12 +1035,12 @@ ESelectInput(di->item.slider.base_win, EnterWindowMask | LeaveWindowMask | ButtonPressMask | ButtonReleaseMask); - EventCallbackRegister(di->item.slider.base_win, 0, DialogHandleEvents, - d); + EventCallbackRegister(di->item.slider.base_win, 0, DItemHandleEvents, + di); ESelectInput(di->item.slider.knob_win, ButtonPressMask | ButtonReleaseMask | PointerMotionMask); - EventCallbackRegister(di->item.slider.knob_win, 0, DialogHandleEvents, - d); + EventCallbackRegister(di->item.slider.knob_win, 0, DItemHandleEvents, + di); if (!di->item.slider.ic_base) { if (di->item.slider.horizontal) @@ -1152,7 +1156,7 @@ ESelectInput(di->item.area.area_win, EnterWindowMask | LeaveWindowMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask); - EventCallbackRegister(di->item.area.area_win, 0, DialogHandleEvents, d); + EventCallbackRegister(di->item.area.area_win, 0, DItemHandleEvents, di); di->w = iw; di->h = ih; break; @@ -1480,7 +1484,7 @@ } if (di->win && register_win_callback) - EventCallbackRegister(di->win, 0, DialogHandleEvents, d); + EventCallbackRegister(di->win, 0, DItemHandleEvents, di); } static void @@ -2025,33 +2029,6 @@ Efree(di); } -static DItem * -DialogItemFindWindow(DItem * di, Window win) -{ - DItem *dii = NULL; - - if (di->type == DITEM_TABLE) - { - int i; - - for (i = 0; i < di->item.table.num_items; i++) - { - dii = DialogItemFindWindow(di->item.table.items[i], win); - if (dii) - return dii; - } - } - else if ((di->win == win) - || ((di->type == DITEM_SLIDER) - && ((di->item.slider.base_win == win) - || (di->item.slider.knob_win == win))) - || ((di->type == DITEM_AREA) && (di->item.area.area_win == win))) - { - return di; - } - return NULL; -} - /* Convenience callback to close dialog */ void DialogCallbackClose(Dialog * d, int val __UNUSED__, void *data __UNUSED__) @@ -2133,23 +2110,24 @@ } } -static DItem * -DialogFindDItem(Dialog * d, Window win) +static void +DialogHandleEvents(XEvent * ev, void *prm) { - return (d->item) ? DialogItemFindWindow(d->item, win) : NULL; + Dialog *d = (Dialog *) prm; + + switch (ev->type) + { + case KeyPress: + DialogEventKeyPress(d, ev); + break; + } } static void -DialogEventMotion(Dialog * d, XEvent * ev) +DItemEventMotion(DItem * di, XEvent * ev) { - Window win = ev->xmotion.window; - DItem *di; int dx, dy; - di = DialogFindDItem(d, win); - if (!di) - return; - switch (di->type) { case DITEM_AREA: @@ -2197,25 +2175,20 @@ if (di->item.slider.val_ptr) *di->item.slider.val_ptr = di->item.slider.val; if (di->func) - (di->func) (d, di->val, di->data); + (di->func) (di->dlg, di->val, di->data); } - DialogDrawItems(d, di, di->x, di->y, di->w, di->h); + DialogDrawItems(di->dlg, di, di->x, di->y, di->w, di->h); break; } } static void -DialogEventMouseDown(Dialog * d, XEvent * ev) +DItemEventMouseDown(DItem * di, XEvent * ev) { Window win = ev->xbutton.window; - DItem *di; int x, y, wheel_jump; - di = DialogFindDItem(d, win); - if (!di) - return; - switch (di->type) { case DITEM_AREA: @@ -2309,22 +2282,18 @@ di->clicked = 1; - DialogDrawItems(d, di, di->x, di->y, di->w, di->h); + DialogDrawItems(di->dlg, di, di->x, di->y, di->w, di->h); } static void -DialogEventMouseUp(Dialog * d, XEvent * ev) +DItemEventMouseUp(DItem * di, XEvent * ev) { Window win = ev->xbutton.window; - DItem *di, *dii; + DItem *dii; if (win != Mode.events.last_bpress) return; - di = DialogFindDItem(d, win); - if (!di) - return; - di->clicked = 0; switch (di->type) @@ -2345,7 +2314,7 @@ if (dii->item.radio_button.onoff) { dii->item.radio_button.onoff = 0; - DialogDrawItems(d, dii, dii->x, dii->y, dii->w, dii->h); + DialogDrawItems(di->dlg, dii, dii->x, dii->y, dii->w, dii->h); } dii = dii->item.radio_button.next; } @@ -2360,22 +2329,15 @@ break; } - DialogDrawItems(d, di, di->x, di->y, di->w, di->h); + DialogDrawItems(di->dlg, di, di->x, di->y, di->w, di->h); if (di->func) - di->func(d, di->val, di->data); + di->func(di->dlg, di->val, di->data); } static void -DialogEventMouseIn(Dialog * d, XEvent * ev) +DItemEventMouseIn(DItem * di, XEvent * ev) { - Window win = ev->xcrossing.window; - DItem *di; - - di = DialogFindDItem(d, win); - if (!di) - return; - switch (di->type) { case DITEM_AREA: @@ -2391,19 +2353,12 @@ di->hilited = 1; - DialogDrawItems(d, di, di->x, di->y, di->w, di->h); + DialogDrawItems(di->dlg, di, di->x, di->y, di->w, di->h); } static void -DialogEventMouseOut(Dialog * d, XEvent * ev) +DItemEventMouseOut(DItem * di, XEvent * ev) { - Window win = ev->xcrossing.window; - DItem *di; - - di = DialogFindDItem(d, win); - if (!di) - return; - switch (di->type) { case DITEM_AREA: @@ -2419,57 +2374,33 @@ di->hilited = 0; - DialogDrawItems(d, di, di->x, di->y, di->w, di->h); + DialogDrawItems(di->dlg, di, di->x, di->y, di->w, di->h); } static void -DialogHandleEvents(XEvent * ev, void *prm) +DItemHandleEvents(XEvent * ev, void *prm) { - Dialog *d = (Dialog *) prm; + DItem *di = (DItem *) prm; switch (ev->type) { - case KeyPress: - DialogEventKeyPress(d, ev); - break; case ButtonPress: - DialogEventMouseDown(d, ev); + DItemEventMouseDown(di, ev); break; case ButtonRelease: - DialogEventMouseUp(d, ev); + DItemEventMouseUp(di, ev); break; case MotionNotify: - DialogEventMotion(d, ev); + DItemEventMotion(di, ev); break; case EnterNotify: - DialogEventMouseIn(d, ev); + DItemEventMouseIn(di, ev); break; case LeaveNotify: - DialogEventMouseOut(d, ev); + DItemEventMouseOut(di, ev); break; } } - -#if 0 /* TBD */ -static void -DItemHandleEvents(XEvent * ev, void *prm) -{ - DItem *di = (Dialog *) prm; - Window win = ev->xany.window; - - switch (ev->type) - { - case ButtonPress: - break; - case ButtonRelease: - break; - case EnterNotify: - break; - case LeaveNotify: - break; - } -} -#endif static void DButtonHandleEvents(XEvent * ev, void *prm) ------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs