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
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs