static void mate_panel_applet_frame_matecomponent_finalize (GObject *object) { MatePanelAppletFrameMateComponent *frame = MATE_PANEL_APPLET_FRAME_MATECOMPONENT (object); if (frame->priv->control) { /* do this before unref'ing every matecomponent stuff since it looks * like we can receive some events when unref'ing them */ MateCORBA_small_unlisten_for_broken (frame->priv->control, G_CALLBACK (mate_panel_applet_frame_matecomponent_applet_broken)); matecomponent_object_release_unref (frame->priv->control, NULL); frame->priv->control = CORBA_OBJECT_NIL; } if (frame->priv->property_bag) matecomponent_object_release_unref ( frame->priv->property_bag, NULL); if (frame->priv->applet_shell) matecomponent_object_release_unref ( frame->priv->applet_shell, NULL); if (frame->priv->ui_component) matecomponent_object_unref ( MATECOMPONENT_OBJECT (frame->priv->ui_component)); G_OBJECT_CLASS (mate_panel_applet_frame_matecomponent_parent_class)->finalize (object); }
MateComponent_Unknown matecomponent_moniker_cache_resolve (MateComponentMoniker *moniker, const MateComponent_ResolveOptions *options, const CORBA_char *requested_interface, CORBA_Environment *ev) { MateComponent_Moniker parent; MateComponentStream *stream; MateComponent_Stream in_stream; if (!strcmp (requested_interface, "IDL:MateComponent/Stream:1.0")) { parent = matecomponent_moniker_get_parent (moniker, ev); if (MATECOMPONENT_EX (ev) || parent == CORBA_OBJECT_NIL) return CORBA_OBJECT_NIL; in_stream = MateComponent_Moniker_resolve (parent, options, "IDL:MateComponent/Stream:1.0", ev); if (MATECOMPONENT_EX (ev) || in_stream == CORBA_OBJECT_NIL) { matecomponent_object_release_unref (parent, NULL); return CORBA_OBJECT_NIL; } matecomponent_object_release_unref (parent, ev); if (MATECOMPONENT_EX (ev)) return CORBA_OBJECT_NIL; stream = matecomponent_stream_cache_create (in_stream, ev); if (MATECOMPONENT_EX (ev) || stream == CORBA_OBJECT_NIL) { matecomponent_object_release_unref (in_stream, NULL); return CORBA_OBJECT_NIL; } matecomponent_object_release_unref (in_stream, ev); if (MATECOMPONENT_EX (ev)) return CORBA_OBJECT_NIL; return CORBA_Object_duplicate (MATECOMPONENT_OBJREF (stream), ev); } return CORBA_OBJECT_NIL; /* use the extender */ }
MateCanvasItem* get_circle(MateCanvasGroup* group) { CORBA_Object server; MateCanvasItem *item; CORBA_Environment ev; CORBA_exception_init (&ev); server = matecomponent_activation_activate_from_id ("OAFIID:CircleItem", 0, NULL, &ev); if (server == CORBA_OBJECT_NIL || MATECOMPONENT_EX (&ev)) { g_warning (_("Could activate Circle: '%s'"), matecomponent_exception_get_text (&ev)); CORBA_exception_free(&ev); exit(0); } g_print("Got circle component connect.\n"); item = mate_canvas_item_new (group, matecomponent_canvas_item_get_type (), "corba_factory", server, NULL); /* I think this tells the object it is OK to exit. Probably want to call this when I close. or matecomponent_object_release_unref(server, &ev) CORBA_Object_release(server, &ev);*/ matecomponent_object_release_unref(server, &ev); CORBA_exception_free(&ev); return item; }
static void matecomponent_control_auto_merge (MateComponentControl *control) { MateComponent_UIContainer remote_container; if (control->priv->ui_component == NULL) return; /* * this makes a CORBA call, so re-entrancy can occur here */ remote_container = matecomponent_control_get_remote_ui_container (control, NULL); if (remote_container == CORBA_OBJECT_NIL) return; /* * we could have been re-entereted in the previous call, so * make sure we are still active */ if (control->priv->active) matecomponent_ui_component_set_container ( control->priv->ui_component, remote_container, NULL); matecomponent_object_release_unref (remote_container, NULL); }
static void desc_free (ListenerDesc *desc, CORBA_Environment *ev) { if (desc) { g_strfreev (desc->event_masks); matecomponent_object_release_unref (desc->listener, ev); g_free (desc); } }
MateComponent_Listener matecomponent_event_source_client_add_listener_full (MateComponent_Unknown object, GClosure *event_callback, const char *opt_mask, CORBA_Environment *opt_ev) { MateComponentListener *listener = NULL; MateComponent_Listener corba_listener = CORBA_OBJECT_NIL; MateComponent_Unknown es; CORBA_Environment *ev, temp_ev; g_return_val_if_fail (event_callback != NULL, CORBA_OBJECT_NIL); if (!opt_ev) { ev = &temp_ev; CORBA_exception_init (ev); } else ev = opt_ev; es = MateComponent_Unknown_queryInterface (object, "IDL:MateComponent/EventSource:1.0", ev); if (MATECOMPONENT_EX (ev) || !es) goto add_listener_end; if (!(listener = matecomponent_listener_new_closure (event_callback))) goto add_listener_end; corba_listener = MATECOMPONENT_OBJREF (listener); if (opt_mask) MateComponent_EventSource_addListenerWithMask ( es, corba_listener, opt_mask, ev); else MateComponent_EventSource_addListener ( es, corba_listener, ev); corba_listener = CORBA_Object_duplicate (corba_listener, ev); matecomponent_object_unref (MATECOMPONENT_OBJECT (listener)); matecomponent_object_release_unref (es, ev); add_listener_end: if (!opt_ev) { if (MATECOMPONENT_EX (ev)) { char *text = matecomponent_exception_get_text (ev); g_warning ("add_listener failed '%s'", text); g_free (text); } CORBA_exception_free (ev); } return corba_listener; }
static void matecomponent_stream_cache_destroy (MateComponentObject *object) { MateComponentStreamCache *stream_cache = MATECOMPONENT_STREAM_CACHE (object); if (stream_cache->priv->cs) matecomponent_object_release_unref (stream_cache->priv->cs, NULL); g_free (stream_cache->priv); }
static void rih_dispose (GObject *obj) { RootItemHack *rih = ROOT_ITEM_HACK (obj); rih->proxy = matecomponent_object_release_unref (rih->proxy, NULL); if (rih->orig_root) gtk_object_destroy (GTK_OBJECT (rih->orig_root)); rih->orig_root = NULL; G_OBJECT_CLASS (rih_parent_class)->dispose (obj); }
MateComponent_Unknown matecomponent_moniker_oaf_resolve (MateComponentMoniker *moniker, const MateComponent_ResolveOptions *options, const CORBA_char *requested_interface, CORBA_Environment *ev) { MateComponent_Moniker parent; MateComponent_Unknown object; parent = matecomponent_moniker_get_parent (moniker, ev); if (ev->_major != CORBA_NO_EXCEPTION) return CORBA_OBJECT_NIL; if (parent != CORBA_OBJECT_NIL) { matecomponent_object_release_unref (parent, ev); #ifdef G_ENABLE_DEBUG g_warning ("wierd; oafid moniker with a parent; strange"); #endif CORBA_exception_set (ev, CORBA_USER_EXCEPTION, ex_MateComponent_Moniker_InterfaceNotFound, NULL); return CORBA_OBJECT_NIL; } object = matecomponent_activation_activate_from_id ( (char *) matecomponent_moniker_get_name_full (moniker), 0, NULL, ev); if (MATECOMPONENT_EX (ev)) { if (ev->_major == CORBA_USER_EXCEPTION) { if (strcmp (ev->_id, ex_MateComponent_GeneralError)) { CORBA_exception_free (ev); matecomponent_exception_general_error_set ( ev, NULL, _("Exception activating '%s'"), matecomponent_moniker_get_name_full (moniker)); } } return CORBA_OBJECT_NIL; } else if (object == CORBA_OBJECT_NIL) { matecomponent_exception_general_error_set ( ev, NULL, _("Failed to activate '%s'"), matecomponent_moniker_get_name_full (moniker)); return CORBA_OBJECT_NIL; } return matecomponent_moniker_util_qi_return (object, requested_interface, ev); }
/** * matecomponent_control_set_properties: * @control: A #MateComponentControl object. * @pb: A #MateComponent_PropertyBag. * @opt_ev: An optional exception environment * * Binds @pb to @control. When a remote object queries @control * for its property bag, @pb will be used in the responses. */ void matecomponent_control_set_properties (MateComponentControl *control, MateComponent_PropertyBag pb, CORBA_Environment *opt_ev) { MateComponent_PropertyBag old_bag; g_return_if_fail (MATECOMPONENT_IS_CONTROL (control)); if (pb == control->priv->propbag) return; old_bag = control->priv->propbag; control->priv->propbag = matecomponent_object_dup_ref (pb, opt_ev); matecomponent_object_release_unref (old_bag, opt_ev); }
static void xfapplet_unload_applet (XfAppletPlugin *xap) { if (xap->prop_bag) { matecomponent_object_release_unref (xap->prop_bag, NULL); xap->prop_bag = CORBA_OBJECT_NIL; } if (xap->uic) { matecomponent_object_unref (MATECOMPONENT_OBJECT (xap->uic)); xap->uic = NULL; } if (xap->object) { MateCORBA_small_unlisten_for_broken (xap->object, G_CALLBACK (xfapplet_connection_broken)); CORBA_Object_release (xap->object, NULL); xap->object = CORBA_OBJECT_NIL; } }
static void last_unref_cb (gpointer context, CORBA_Object object) { matecomponent_object_release_unref (object, NULL); }
MateComponent_Unknown matecomponent_stream_extender_resolve (MateComponentMonikerExtender *extender, const MateComponent_Moniker m, const MateComponent_ResolveOptions *options, const CORBA_char *display_name, const CORBA_char *requested_interface, CORBA_Environment *ev) { char *mime_type; char *requirements; MateComponent_Unknown object; MateComponent_Unknown stream; MateComponent_Persist persist; #ifdef G_ENABLE_DEBUG g_message ("Stream extender: '%s'", display_name); #endif if (!m) return CORBA_OBJECT_NIL; stream = MateComponent_Moniker_resolve (m, options, "IDL:MateComponent/Stream:1.0", ev); if (!stream) return CORBA_OBJECT_NIL; mime_type = get_stream_type (stream, ev); if (!mime_type) goto unref_stream_exception; requirements = g_strdup_printf ( "matecomponent:supported_mime_types.has ('%s') AND repo_ids.has ('%s') AND " "repo_ids.has ('IDL:MateComponent/PersistStream:1.0')", mime_type, requested_interface); object = matecomponent_activation_activate (requirements, NULL, 0, NULL, ev); #ifdef G_ENABLE_DEBUG g_message ("Attempt activate object satisfying '%s': %p", requirements, object); #endif g_free (requirements); if (ev->_major != CORBA_NO_EXCEPTION) goto unref_stream_exception; if (object == CORBA_OBJECT_NIL) { #ifdef G_ENABLE_DEBUG g_warning ("Can't find object satisfying requirements"); #endif CORBA_exception_set (ev, CORBA_USER_EXCEPTION, ex_MateComponent_Moniker_InterfaceNotFound, NULL); goto unref_stream_exception; } persist = MateComponent_Unknown_queryInterface ( object, "IDL:MateComponent/PersistStream:1.0", ev); if (ev->_major != CORBA_NO_EXCEPTION) goto unref_object_exception; if (persist != CORBA_OBJECT_NIL) { MateComponent_PersistStream_load ( persist, stream, (const MateComponent_Persist_ContentType) mime_type, ev); matecomponent_object_release_unref (persist, ev); matecomponent_object_release_unref (stream, ev); return matecomponent_moniker_util_qi_return ( object, requested_interface, ev); } g_free (mime_type); unref_object_exception: matecomponent_object_release_unref (object, ev); unref_stream_exception: matecomponent_object_release_unref (stream, ev); return CORBA_OBJECT_NIL; }
static void xfapplet_applet_activated (MateComponent_Unknown object, CORBA_Environment *ev, gpointer data) { GtkWidget *bw, *child = NULL; CORBA_Object control; CORBA_Environment corba_ev; MateComponentControlFrame *frame; MateComponentUIComponent *uic; MateComponent_PropertyBag prop_bag; XfAppletPlugin *xap = (XfAppletPlugin*) data; gchar *error; if (MATECOMPONENT_EX (ev) || object == CORBA_OBJECT_NIL) { error = matecomponent_exception_get_text (ev); CORBA_exception_free (ev); g_warning ("Failed to load applet '%s' (can't get CORBA object): %s\n", xap->iid, error); xfapplet_applet_load_failed (xap); xfapplet_cleanup_current (xap); g_free (error); return; } control = CORBA_Object_duplicate (object, NULL); bw = matecomponent_widget_new_control_from_objref (object, CORBA_OBJECT_NIL); matecomponent_object_release_unref (object, NULL); if (!bw) { g_warning ("Failed to load applet '%s' (can't get matecomponent widget)\n", xap->iid); xfapplet_applet_load_failed (xap); xfapplet_cleanup_current (xap); return; } frame = matecomponent_widget_get_control_frame (MATECOMPONENT_WIDGET (bw)); if (!frame) { g_warning ("Failed to load applet '%s' (can't get control frame)\n", xap->iid); gtk_object_sink (GTK_OBJECT (bw)); xfapplet_applet_load_failed (xap); xfapplet_cleanup_current (xap); return; } CORBA_exception_init (&corba_ev); prop_bag = matecomponent_control_frame_get_control_property_bag (frame, &corba_ev); if (prop_bag == NULL || MATECOMPONENT_EX (&corba_ev)) { error = matecomponent_exception_get_text (&corba_ev); CORBA_exception_free (&corba_ev); g_warning ("Failed to load applet '%s' (can't get property bag): %s\n", xap->iid, error); gtk_object_sink (GTK_OBJECT (bw)); xfapplet_applet_load_failed (xap); xfapplet_cleanup_current (xap); g_free (error); return; } uic = matecomponent_control_frame_get_popup_component (frame, &corba_ev); if (uic == NULL || MATECOMPONENT_EX (&corba_ev)) { error = matecomponent_exception_get_text (&corba_ev); CORBA_exception_free (&corba_ev); g_warning ("Failed to load applet '%s' (can't get popup component): %s\n", xap->iid, error); gtk_object_sink (GTK_OBJECT (bw)); xfapplet_applet_load_failed (xap); xfapplet_cleanup_current (xap); g_free (error); return; } matecomponent_ui_component_freeze (uic, CORBA_OBJECT_NIL); xfce_textdomain ("xfce4-panel", LIBXFCE4PANEL_LOCALE_DIR, "UTF-8"); matecomponent_ui_util_set_ui (uic, PKGDATADIR "/ui", "XFCE_Panel_Popup.xml", "xfce4-xfapplet-plugin", &corba_ev); if (MATECOMPONENT_EX (&corba_ev)) { error = matecomponent_exception_get_text (&corba_ev); CORBA_exception_free (&corba_ev); g_warning ("Failed to load applet '%s' (can't set ui): %s\n", xap->iid, error); gtk_object_sink (GTK_OBJECT (bw)); xfapplet_applet_load_failed (xap); xfapplet_cleanup_current (xap); g_free (error); return; } xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); xfapplet_setup_menu_items (xap->plugin, uic); matecomponent_ui_component_thaw (uic, CORBA_OBJECT_NIL); gtk_widget_show (bw); if (xap->configured) xfapplet_unload_applet (xap); xap->object = control; xap->uic = uic; xap->prop_bag = prop_bag; MateCORBA_small_listen_for_broken (object, G_CALLBACK (xfapplet_connection_broken), xap); child = xfapplet_get_plugin_child (xap->plugin); if (child) gtk_widget_destroy (child); gtk_container_add (GTK_CONTAINER(xap->plugin), bw); xap->configured = TRUE; if (!xfapplet_save_configuration (xap)) g_warning ("Failed to save XfApplet configuration.\n"); }