Added WARN_CFLAGS support. Bug #308239.
[platform/core/uifw/at-spi2-atk.git] / cspi / bonobo / cspi-bonobo-listener.c
index 6b7316f..7b905f0 100644 (file)
@@ -71,10 +71,12 @@ cspi_event_list_remove_by_cb (GList *list, gpointer callback)
     {
       EventHandler *eh = l->data;
       next = l->next;
-      
-      list = g_list_delete_link (list, l);
-      
-      cspi_event_handler_free (eh);
+
+      if (eh->cb.method == callback)
+      {
+        list = g_list_delete_link (list, l);
+       cspi_event_handler_free (eh);
+      }
     }
 
   return list;
@@ -93,26 +95,33 @@ cspi_event (SpiEventListener    *listener,
 {
   GList *l;
   CSpiEventListener *clistener = (CSpiEventListener *) listener;
-  InternalEvent      aevent;
+  InternalEvent     *ievent;
+  AccessibleEvent   *aevent;
   Accessible        *source = cspi_object_borrow (event->source);
   
-  aevent.event.type    = event->type;
-  aevent.event.source  = source;
-  aevent.event.detail1 = event->detail1;
-  aevent.event.detail2 = event->detail2;
-  aevent.id            = _e_id++;
-  aevent.magic         = SPI_INTERNAL_EVENT_MAGIC;
-  aevent.ref_count     = 0;
-  aevent.data          = &event->any_data;
+  ievent = g_new0(InternalEvent, 1);
+  ievent->event.type    = g_strdup (event->type);
+  ievent->event.source  = source;
+  ievent->event.detail1 = event->detail1;
+  ievent->event.detail2 = event->detail2;
+  ievent->id            = _e_id++;
+  ievent->magic         = SPI_INTERNAL_EVENT_MAGIC;
+  ievent->ref_count     = 0;
+  ievent->data          = CORBA_any__alloc ();
+  CORBA_any__copy (ievent->data, &event->any_data);
+  aevent = (AccessibleEvent *)ievent;
+  Accessible_ref (source);
+  AccessibleEvent_ref (aevent);
 
   /* FIXME: re-enterancy hazard on this list */
   for (l = clistener->callbacks; l; l = l->next)
     {
       EventHandler *eh = l->data;
       /* cast hides our private stuff from client handlers */
-      eh->cb.event ((AccessibleEvent *) &aevent, eh->user_data);
+      eh->cb.event (aevent, eh->user_data);
     }
 
+  AccessibleEvent_unref (aevent);
   cspi_object_return (source);
 }
 
@@ -229,7 +238,8 @@ cspi_device_event (SpiDeviceListener               *listener,
          break;
        }
     }
-  
+  g_free (anevent.keystring);
+
   return handled;
 }