Enlightenment CVS committal Author : dj2 Project : e17 Module : libs/ewl
Dir : e17/libs/ewl/src/lib Modified Files: ewl_container.c ewl_embed.c ewl_misc.c ewl_object.h ewl_widget.c Log Message: - put the destroy checks into a macro to make the code easier to read - make sure we check that neither widget or deselect have been destroyed during mouse_up_feed =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_container.c,v retrieving revision 1.40 retrieving revision 1.41 diff -u -3 -r1.40 -r1.41 --- ewl_container.c 21 May 2006 03:51:41 -0000 1.40 +++ ewl_container.c 25 May 2006 17:56:08 -0000 1.41 @@ -1064,9 +1064,7 @@ DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); /* do nothing if the container is being destroyed */ - if (ewl_object_queued_has(EWL_OBJECT(c), EWL_FLAG_QUEUED_DPROCESS) - || ewl_object_queued_has(EWL_OBJECT(c), - EWL_FLAG_QUEUED_DSCHEDULED)) + if (DESTROYED(c)) DRETURN(DLEVEL_STABLE); if (c->child_remove) @@ -1120,9 +1118,7 @@ DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); /* do nothing if the container is being destroyed */ - if (ewl_object_queued_has(EWL_OBJECT(c), EWL_FLAG_QUEUED_DPROCESS) - || ewl_object_queued_has(EWL_OBJECT(c), - EWL_FLAG_QUEUED_DSCHEDULED)) + if (DESTROYED(c)) DRETURN(DLEVEL_STABLE); if (c->child_hide) =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_embed.c,v retrieving revision 1.61 retrieving revision 1.62 diff -u -3 -r1.61 -r1.62 --- ewl_embed.c 25 May 2006 05:57:12 -0000 1.61 +++ ewl_embed.c 25 May 2006 17:56:08 -0000 1.62 @@ -513,14 +513,19 @@ * change. Then select the new widget and notify it of the selection. */ if (widget != deselect) { - if (deselect) { + /* + * Make sure these widgets haven't been scheduled for + * deletion before we send their callbacks. + */ + if (deselect && !DESTROYED(deselect)) { ewl_object_state_remove(EWL_OBJECT(deselect), - EWL_FLAG_STATE_FOCUSED); + EWL_FLAG_STATE_FOCUSED); ewl_callback_call(deselect, EWL_CALLBACK_FOCUS_OUT); } if (widget && !(ewl_object_state_has(EWL_OBJECT(widget), - EWL_FLAG_STATE_DISABLED))) { + EWL_FLAG_STATE_DISABLED)) + && !DESTROYED(widget)) { ewl_object_state_add(EWL_OBJECT(widget), EWL_FLAG_STATE_FOCUSED); ewl_callback_call(widget, EWL_CALLBACK_FOCUS_IN); =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_misc.c,v retrieving revision 1.53 retrieving revision 1.54 diff -u -3 -r1.53 -r1.54 --- ewl_misc.c 25 May 2006 04:50:17 -0000 1.53 +++ ewl_misc.c 25 May 2006 17:56:08 -0000 1.54 @@ -815,8 +815,9 @@ if (!o) DRETURN(DLEVEL_STABLE); - if (!ewl_object_queued_has(EWL_OBJECT(o), EWL_FLAG_QUEUED_RPROCESS)) { - if (!REALIZED(o)) + if (!ewl_object_queued_has(EWL_OBJECT(o), + EWL_FLAG_QUEUED_RPROCESS)) { + if (!REALIZED(o)) DRETURN(DLEVEL_STABLE); } } @@ -984,14 +985,10 @@ DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("w", w); - if ((ewl_object_queued_has(EWL_OBJECT(w), EWL_FLAG_QUEUED_DSCHEDULED)) - || (ewl_object_queued_has(EWL_OBJECT(w), - EWL_FLAG_QUEUED_DPROCESS))) + if (DESTROYED(w)) DRETURN(DLEVEL_STABLE); - if ((ewl_object_queued_has(EWL_OBJECT(w), EWL_FLAG_QUEUED_CSCHEDULED)) - || (ewl_object_queued_has(EWL_OBJECT(w), - EWL_FLAG_QUEUED_CPROCESS))) + if (CONFIGURED(w)) ewl_configure_cancel_request(w); ewl_object_queued_add(EWL_OBJECT(w), EWL_FLAG_QUEUED_DSCHEDULED); =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_object.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- ewl_object.h 20 May 2006 08:14:54 -0000 1.11 +++ ewl_object.h 25 May 2006 17:56:08 -0000 1.12 @@ -523,6 +523,23 @@ #define HIDDEN(o) (!(EWL_OBJECT(o)->flags & EWL_FLAG_VISIBLE_SHOWN)) /** + * @def DESTROYED(o) + * Used to determine if a widget has been destroyed + */ +#define DESTROYED(o) (ewl_object_queued_has(EWL_OBJECT(o), \ + EWL_FLAG_QUEUED_DSCHEDULED) \ + || ewl_object_queued_has(EWL_OBJECT(o), \ + EWL_FLAG_QUEUED_DPROCESS)) + +/** + * @def CONFIGURED(o) + * Used to determine if a widget is scheduled for configure + */ +#define CONFIGURED(o) (ewl_object_queued_has(EWL_OBJECT(o), \ + EWL_FLAG_QUEUED_CSCHEDULED) \ + || ewl_object_queued_has(EWL_OBJECT(o), \ + EWL_FLAG_QUEUED_CPROCESS)) +/** * @} */ =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_widget.c,v retrieving revision 1.79 retrieving revision 1.80 diff -u -3 -r1.79 -r1.80 --- ewl_widget.c 25 May 2006 05:57:12 -0000 1.79 +++ ewl_widget.c 25 May 2006 17:56:08 -0000 1.80 @@ -405,11 +405,8 @@ DCHECK_PARAM_PTR("w", w); DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); - if ((ewl_object_queued_has(EWL_OBJECT(w), EWL_FLAG_QUEUED_DSCHEDULED)) - || (ewl_object_queued_has(EWL_OBJECT(w), - EWL_FLAG_QUEUED_DPROCESS))) + if (DESTROYED(w)) DRETURN(DLEVEL_STABLE); - /* cleanup any dnd widgets */ if (w == ewl_widget_drag_candidate_get()) ------------------------------------------------------- All the advantages of Linux Managed Hosting--Without the Cost and Risk! Fully trained technicians. The highest number of Red Hat certifications in the hosting industry. Fanatical Support. Click to learn more http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs