*** orig/gstadder.c	2005-06-16 12:00:23.892228224 +0200
--- my/gstadder.c	2005-06-16 12:17:06.060875432 +0200
***************
*** 97,102 ****
--- 97,103 ----
      GstPadTemplate * temp, const gchar * unused);
  static void gst_adder_release_pad (GstElement * element, GstPad * pad);
  static GstElementStateReturn gst_adder_change_state (GstElement * element);
+ static gboolean gst_adder_src_event (GstPad * pad, GstEvent * event);
  
  /* we do need a loop function */
  static void gst_adder_loop (GstElement * element);
***************
*** 248,253 ****
--- 249,255 ----
    gst_element_set_loop_function (GST_ELEMENT (adder), gst_adder_loop);
    gst_pad_set_getcaps_function (adder->srcpad, gst_pad_proxy_getcaps);
    gst_pad_set_link_function (adder->srcpad, gst_adder_link);
+   gst_pad_set_event_function (adder->srcpad, gst_adder_src_event);
  
    adder->format = GST_ADDER_FORMAT_UNSET;
  
***************
*** 645,650 ****
--- 647,672 ----
    return caps;
  }
  
+ static gboolean gst_adder_src_event (GstPad * pad, GstEvent * event)
+ {
+   GstAdder *adder;
+   GSList *inputs;
+ 
+   adder = GST_ADDER (gst_pad_get_parent (pad));
+   for (inputs = adder->input_channels; inputs; inputs = g_slist_next (inputs)) {
+     GstAdderInputChannel *input;
+ 
+     input = (GstAdderInputChannel *) inputs->data;
+     gst_event_ref (event);
+     if (!gst_pad_send_event (gst_pad_get_peer (input->sinkpad), event)) {
+       g_warning ("GstAdder: failed to send event to sink!\n");
+     }
+   }
+   gst_event_unref (event);
+ 
+   return TRUE;
+ }
+ 
  static gboolean
  plugin_init (GstPlugin * plugin)
  {
