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);
}
示例#11
0
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;
}
示例#14
0
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");
}