static AtkObject * goo_canvas_item_accessible_new (GObject *object) { AtkObject *accessible; g_return_val_if_fail (GOO_IS_CANVAS_ITEM (object), NULL); accessible = g_object_new (goo_canvas_item_accessible_get_type (), NULL); atk_object_initialize (accessible, object); return accessible; }
static void on_pad_unlink (GstPad * pad, GstPad * peer, GstEditorLink * link) { GRWLock *globallock; if ((GST_IS_EDITOR_LINK (link)) && (GST_IS_EDITOR_PAD (link->srcpad))) { globallock = GST_EDITOR_ITEM (link->srcpad)->globallock; } else if ((GST_IS_EDITOR_LINK (link)) && (GST_IS_EDITOR_PAD (link->sinkpad))) { globallock = GST_EDITOR_ITEM (link->sinkpad)->globallock; } else { g_print ("Warning: On pad unlink without any valid Pads called!!!!"); return; } g_rw_lock_writer_lock (globallock); g_print ("Unlink pad signal (%s:%s from %s:%s) with link %p", GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (peer), link); GstEditorBin *srcbin = NULL, *sinkbin = NULL; /* this function is called when unlinking dynamic links as well */ if (peer && pad) GST_CAT_DEBUG (gste_debug_cat, "Unlink pad signal (%s:%s from %s:%s) with link %p", GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (peer), link); else GST_CAT_DEBUG (gste_debug_cat, "Unlinking dynamic link"); if (!GST_IS_EDITOR_PAD (link->srcpad)) g_print ("Warning: Unlink pad signals critical: Srcpad not valid\n"); if (link->srcpad) g_signal_handlers_disconnect_by_func ( link->srcpad, on_editor_pad_position_changed, link); if (!GST_IS_EDITOR_PAD (link->sinkpad)) g_print ("Warning: Unlink pad signals critical: Sinkpad not valid\n"); if (link->sinkpad) g_signal_handlers_disconnect_by_func ( link->sinkpad, on_editor_pad_position_changed, link); if (GST_IS_PAD (pad)) g_signal_handlers_disconnect_by_func (pad, on_pad_unlink, link); else g_print ("Warning: On_pad_unlink: Pad not valid\n"); if (GST_IS_PAD (peer)) g_signal_handlers_disconnect_by_func (peer, on_pad_unlink, link); else g_print ("Warning: On_pad_unlink: Peer not valid\n"); g_print ("Unlinked pad signals, get srcbin\n"); if (link->srcpad) srcbin = GST_EDITOR_BIN (goo_canvas_item_get_parent ( goo_canvas_item_get_parent (GOO_CANVAS_ITEM (link->srcpad)))); g_print ("Unlinked pad signals, get sinkbin\n"); if (link->sinkpad) sinkbin = GST_EDITOR_BIN (goo_canvas_item_get_parent ( goo_canvas_item_get_parent (GOO_CANVAS_ITEM (link->sinkpad)))); g_print ( "Removing links from bin; srcbin: %p, sinkbin %p\n", srcbin, sinkbin); if (sinkbin) sinkbin->links = g_list_remove (sinkbin->links, link); else g_print ("Warning: On_pad_unlink: Sinkbin not valid\n"); if ((sinkbin != srcbin) && (srcbin)) srcbin->links = g_list_remove (srcbin->links, link); else g_print ("Warning: On_pad_unlink: Srcbin not validor same as Sinkbin\n"); if (link->ghost) { if (link->srcpad) GST_EDITOR_PAD (link->srcpad)->ghostlink = NULL; if (link->sinkpad) GST_EDITOR_PAD (link->sinkpad)->ghostlink = NULL; } else { if (link->srcpad) GST_EDITOR_PAD (link->srcpad)->link = NULL; if (link->sinkpad) GST_EDITOR_PAD (link->sinkpad)->link = NULL; } g_rw_lock_writer_unlock (globallock); link->srcpad = NULL; link->sinkpad = NULL; /* i have bad luck with actually killing the GCI's */ // goo_canvas_item_simple_hide (GOO_CANVAS_ITEM_SIMPLE (link)); if (GOO_IS_CANVAS_ITEM (link)) goo_canvas_item_remove (GOO_CANVAS_ITEM (link)); g_print ("Finished on_pad_unlink\n"); }