Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : proto

Dir     : e17/proto/etk/src/lib


Modified Files:
        etk_object.c etk_widget.c 


Log Message:
use list and hash implementation for performance and accuracy
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_object.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- etk_object.c        3 Mar 2006 11:43:38 -0000       1.15
+++ etk_object.c        3 Mar 2006 13:23:11 -0000       1.16
@@ -31,7 +31,8 @@
 static Evas_Bool _etk_object_data_free_cb(Evas_Hash *hash, const char *key, 
void *data, void *fdata);
 static Evas_Bool _etk_object_hash_foreach(Evas_Hash *hash, const char *key, 
void *data, void *fdata);
 
-static Evas_Hash *_etk_object_created_objects = NULL;
+static Evas_List *_etk_object_created_objects = NULL;
+static Evas_Hash *_etk_object_created_objects_hash = NULL;
 static Etk_Signal *_etk_object_signals[ETK_OBJECT_NUM_SIGNALS];
 
 /**************************
@@ -97,7 +98,8 @@
 
    new_object = calloc(1,object_type->type_size);
    new_object->type = object_type;
-   _etk_object_created_objects = evas_hash_add(_etk_object_created_objects, 
(char*)new_object, new_object);
+   _etk_object_created_objects = evas_list_append(_etk_object_created_objects, 
new_object);
+   _etk_object_created_objects_hash = 
evas_hash_add(_etk_object_created_objects_hash, new_object, new_object);
    
    etk_type_object_construct(object_type, new_object);
    va_copy(args2, args);
@@ -118,7 +120,8 @@
 
    etk_signal_emit(_etk_object_signals[ETK_OBJECT_DESTROYED_SIGNAL], object, 
NULL);
    etk_type_destructors_call(object->type, object);
-   _etk_object_created_objects = evas_hash_del(_etk_object_created_objects, 
(char*)object, object);
+   _etk_object_created_objects = evas_list_remove(_etk_object_created_objects, 
object);
+   _etk_object_created_objects_hash = 
evas_hash_del(_etk_object_created_objects_hash, object, object);
    free(object);
 }
 
@@ -127,14 +130,17 @@
  */
 void etk_object_destroy_all_objects()
 {
-//   while (_etk_object_created_objects)
-//      etk_object_destroy(ETK_OBJECT(_etk_object_created_objects->data));
-   evas_hash_foreach(_etk_object_created_objects, _etk_object_hash_foreach, 
NULL);
+   while (_etk_object_created_objects)
+     etk_object_destroy(ETK_OBJECT(_etk_object_created_objects->data));
 }
 
+/*
+ * @brief Looks up an object so we know if it exists
+ * @param object the object we want to find
+ */
 void *etk_object_lookup(Etk_Object *object)
 {
-   return evas_hash_find(_etk_object_created_objects, (char *)object);
+   return evas_hash_find(_etk_object_created_objects_hash, object);
 }
 
 /**
@@ -621,12 +627,4 @@
    return 1;
 }
 
-/* Used when we want to iterate over the hash to destroy all objects */
-static Evas_Bool _etk_object_hash_foreach(Evas_Hash *hash, const char *key, 
void *data, void *fdata)
-{
-   /* destroying using the void *data seems to work better */
-   etk_object_destroy(ETK_OBJECT(data));
-   return 1;
-}
-
 /** @} */
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_widget.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -3 -r1.43 -r1.44
--- etk_widget.c        3 Mar 2006 10:04:27 -0000       1.43
+++ etk_widget.c        3 Mar 2006 13:23:12 -0000       1.44
@@ -1938,7 +1938,7 @@
 
    etk_signal_emit(_etk_widget_signals[ETK_WIDGET_MOUSE_IN_SIGNAL], 
ETK_OBJECT(widget), NULL, &event);
    
-   if (_etk_widget_propagate_event && widget->parent)
+   if (_etk_widget_propagate_event && widget->parent && 
etk_object_lookup(ETK_OBJECT(widget)))
       _etk_widget_mouse_in_cb(widget->parent, evas, NULL, event_info);
 }
 
@@ -1974,7 +1974,7 @@
 
    etk_signal_emit(_etk_widget_signals[ETK_WIDGET_MOUSE_OUT_SIGNAL], 
ETK_OBJECT(widget), NULL, &event);
    
-   if (_etk_widget_propagate_event && widget->parent)
+   if (_etk_widget_propagate_event && widget->parent && 
etk_object_lookup(ETK_OBJECT(widget)))
       _etk_widget_mouse_out_cb(widget->parent, evas, NULL, event_info);
 }
 
@@ -2014,7 +2014,7 @@
 
    etk_signal_emit(_etk_widget_signals[ETK_WIDGET_MOUSE_MOVE_SIGNAL], 
ETK_OBJECT(widget), NULL, &event);
    
-   if (_etk_widget_propagate_event && widget->parent)
+   if (_etk_widget_propagate_event && widget->parent && 
etk_object_lookup(ETK_OBJECT(widget)))
       _etk_widget_mouse_move_cb(widget->parent, evas, NULL, event_info);
 }
 
@@ -2082,11 +2082,14 @@
 
    etk_signal_emit(_etk_widget_signals[ETK_WIDGET_MOUSE_UP_SIGNAL], 
ETK_OBJECT(widget), NULL, &event);
 
+   if(!etk_object_lookup(ETK_OBJECT(widget)))
+     return;
+   
    if (evas_event->canvas.x >= widget->geometry.x && evas_event->canvas.x <= 
widget->geometry.x + widget->geometry.w &&
          evas_event->canvas.y >= widget->geometry.y && evas_event->canvas.y <= 
widget->geometry.y + widget->geometry.h)
       etk_signal_emit(_etk_widget_signals[ETK_WIDGET_MOUSE_CLICK_SIGNAL], 
ETK_OBJECT(widget), NULL, &event);
    
-   if (_etk_widget_propagate_event && widget->repeat_events && widget->parent 
&& etk_object_lookup(ETK_OBJECT(widget)))
+   if (_etk_widget_propagate_event && widget->repeat_events && widget->parent)
       _etk_widget_mouse_up_cb(widget->parent, evas, NULL, event_info);
 }
 
@@ -2115,7 +2118,7 @@
 
    etk_signal_emit(_etk_widget_signals[ETK_WIDGET_MOUSE_WHEEL_SIGNAL], 
ETK_OBJECT(widget), NULL, &event);
    
-   if (_etk_widget_propagate_event && widget->parent)
+   if (_etk_widget_propagate_event && widget->parent && 
etk_object_lookup(ETK_OBJECT(widget)))
       _etk_widget_mouse_wheel_cb(widget->parent, evas, NULL, event_info);
 }
 
@@ -2142,7 +2145,7 @@
 
    etk_signal_emit(_etk_widget_signals[ETK_WIDGET_KEY_DOWN_SIGNAL], 
ETK_OBJECT(widget), NULL, &event);
    
-   if (_etk_widget_propagate_event && widget->parent)
+   if (_etk_widget_propagate_event && widget->parent && 
etk_object_lookup(ETK_OBJECT(widget)))
       _etk_widget_key_down_cb(widget->parent, evas, NULL, event_info);
 }
 
@@ -2195,7 +2198,7 @@
 
    etk_signal_emit(_etk_widget_signals[ETK_WIDGET_KEY_UP_SIGNAL], 
ETK_OBJECT(widget), NULL, &event);
    
-   if (_etk_widget_propagate_event && widget->parent)
+   if (_etk_widget_propagate_event && widget->parent && 
etk_object_lookup(ETK_OBJECT(widget)))
       _etk_widget_key_up_cb(widget->parent, evas, NULL, event_info);
 }
 




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to