Exemple #1
0
void
bus_dbus_impl_dispatch_message (BusDBusImpl  *dbus,
                                IBusMessage  *message)
{
    g_assert (BUS_IS_DBUS_IMPL (dbus));
    g_assert (message != NULL);

    const gchar *destination;
    BusConnection *dest_connection = NULL;

    if (G_UNLIKELY (IBUS_OBJECT_DESTROYED (dbus))) {
        return;
    }

    destination = ibus_message_get_destination (message);

    if (destination != NULL) {
        dest_connection = bus_dbus_impl_get_connection_by_name (dbus, destination);

        if (dest_connection != NULL) {
            ibus_connection_send (IBUS_CONNECTION (dest_connection), message);
        }
        else {
            IBusMessage *reply_message;
            reply_message = ibus_message_new_error_printf (message,
                                                     DBUS_ERROR_SERVICE_UNKNOWN,
                                                     "Can not find service %s",
                                                     destination);
            bus_dbus_impl_dispatch_message (dbus, reply_message);
            ibus_message_unref (reply_message);
        }
    }

    bus_dbus_impl_dispatch_message_by_rule (dbus, message, dest_connection);
}
Exemple #2
0
static IBusMessage *
_dbus_get_name_owner (BusDBusImpl   *dbus,
                      IBusMessage   *message,
                      BusConnection *connection)
{
    gchar *name;
    BusConnection *owner;
    gboolean retval;
    const gchar *owner_name = NULL;
    IBusMessage *reply_message;
    IBusError *error;

    retval = ibus_message_get_args (message,
                                    &error,
                                    G_TYPE_STRING, &name,
                                    G_TYPE_INVALID);

    if (! retval) {
        reply_message = ibus_message_new_error (message,
                                                error->name,
                                                error->message);
        ibus_error_free (error);
        return reply_message;
    }

    if (g_strcmp0 (name, DBUS_SERVICE_DBUS) == 0 ||
        g_strcmp0 (name, IBUS_SERVICE_IBUS) == 0) {
        owner_name = name;
    }
    else {
        owner = bus_dbus_impl_get_connection_by_name (dbus, name);
        if (owner != NULL) {
            owner_name = bus_connection_get_unique_name (owner);
        }
    }

    if (owner_name != NULL) {
        reply_message = ibus_message_new_method_return (message);
        ibus_message_append_args (reply_message,
                                  G_TYPE_STRING, &owner_name,
                                  G_TYPE_INVALID);
    }
    else {
        reply_message = ibus_message_new_error_printf (message,
                                                       DBUS_ERROR_NAME_HAS_NO_OWNER,
                                                       "Name '%s' does have owner",
                                                       name);
    }

    return reply_message;
}
Exemple #3
0
BusFactoryProxy *
bus_factory_proxy_new (IBusComponent *component,
                       BusConnection *connection)
{
    g_assert (IBUS_IS_COMPONENT (component));

    BusFactoryProxy *factory;
    GList *p;

    if (connection == NULL) {
        connection = bus_dbus_impl_get_connection_by_name (BUS_DEFAULT_DBUS, component->name);
    }

    if (connection == NULL) {
        return NULL;
    }

    factory = g_object_new (BUS_TYPE_FACTORY_PROXY,
                            "name", NULL,
                            "path", "/org/freedesktop/IBus/Factory",
                            "connection", connection,
                            NULL);

    g_object_ref (component);
    factory->component = component;
    g_object_set_data ((GObject *)factory->component, "factory", factory);

    factory->engine_list = ibus_component_get_engines (factory->component);

    for (p = factory->engine_list; p != NULL; p = p->next) {
        IBusEngineDesc *desc = (IBusEngineDesc *)p->data;
        g_object_ref (desc);
        g_object_set_data ((GObject *)desc, "factory", factory);
    }

    return factory;
}