Enlightenment CVS committal

Author  : ningerso
Project : e17
Module  : libs/ewl

Dir     : e17/libs/ewl/src/lib


Modified Files:
        ewl_callback.c 


Log Message:
Fix basic callback deletion on custom types, still need to fix deletion of
entire types.

===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_callback.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -3 -r1.34 -r1.35
--- ewl_callback.c      30 Nov 2007 16:27:29 -0000      1.34
+++ ewl_callback.c      2 Dec 2007 23:08:10 -0000       1.35
@@ -105,49 +105,56 @@
 static void
 ewl_callback_rm(Ewl_Widget *w, unsigned int t, unsigned int pos)
 {
+       unsigned int place;
+
        DENTER_FUNCTION(DLEVEL_STABLE);
        DCHECK_PARAM_PTR(w);
        /* don't type check here as this will get called after most of a
         * widget is already destroyed */
 
+       if (t > EWL_CALLBACK_MAX)
+               place = EWL_CALLBACK_MAX;
+       else
+               place = t;
+
        /* deal with the direct case first */
-       if (w->callbacks[t].mask & EWL_CALLBACK_TYPE_DIRECT)
+       if (w->callbacks[place].mask & EWL_CALLBACK_TYPE_DIRECT)
        {
-               ewl_callback_unregister((Ewl_Callback *)w->callbacks[t].list);
+               ewl_callback_unregister((Ewl_Callback 
*)w->callbacks[place].list);
 
-               w->callbacks[t].len = 0;
-               w->callbacks[t].list = NULL;
-               EWL_CALLBACK_SET_NODIRECT(w, t);
+               w->callbacks[place].len = 0;
+               w->callbacks[place].list = NULL;
+               EWL_CALLBACK_SET_NODIRECT(w, place);
 
                DRETURN(DLEVEL_STABLE);
        }
-       ewl_callback_unregister(w->callbacks[t].list[pos]);
+       ewl_callback_unregister(w->callbacks[place].list[pos]);
 
        /* if this will empty the list (we've already handled direct) */
-       if ((EWL_CALLBACK_LEN(w, t) - 1) == 0)
+       if ((EWL_CALLBACK_LEN(w, place) - 1) == 0)
        {
-               w->callbacks[t].len = 0;
-               w->callbacks[t].list[0] = NULL;
-               FREE(w->callbacks[t].list);
+               w->callbacks[place].len = 0;
+               w->callbacks[place].list[0] = NULL;
+               FREE(w->callbacks[place].list);
 
                DRETURN(DLEVEL_STABLE);
        }
 
        /* not the last position */
-       if ((int)pos != (EWL_CALLBACK_LEN(w, t) - 1))
+       if ((int)pos != (EWL_CALLBACK_LEN(w, place) - 1))
        {
-               memmove(w->callbacks[t].list + pos,
-                       w->callbacks[t].list + (pos + 1),
-                       (w->callbacks[t].len - pos - 1) * sizeof(void *));
+               memmove(w->callbacks[place].list + pos,
+                       w->callbacks[place].list + (pos + 1),
+                       (w->callbacks[place].len - pos - 1) * sizeof(void *));
        }
 
-       w->callbacks[t].len  -= 1;
-       w->callbacks[t].list[EWL_CALLBACK_LEN(w, t)] = NULL;
-       w->callbacks[t].list = realloc(w->callbacks[t].list,
-                                       w->callbacks[t].len * sizeof(void *));
+       w->callbacks[place].len  -= 1;
+       w->callbacks[place].list[EWL_CALLBACK_LEN(w, place)] = NULL;
+       w->callbacks[place].list = realloc(w->callbacks[place].list,
+                                       w->callbacks[place].len * sizeof(void 
*));
 
-       if (pos < EWL_CALLBACK_POS(w, t))
-               EWL_CALLBACK_POS(w, t)--;
+       if (pos < EWL_CALLBACK_POS(w, place))
+               EWL_CALLBACK_POS(w, place)--;
 
        DLEAVE_FUNCTION(DLEVEL_STABLE);
 }



-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell.  From the desktop to the data center, Linux is going
mainstream.  Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to