|
Packit Service |
1d8f1c |
/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
|
|
Packit Service |
1d8f1c |
/* vim:set et sts=4: */
|
|
Packit Service |
1d8f1c |
/* ibus - The Input Bus
|
|
Packit Service |
1d8f1c |
* Copyright (C) 2008-2015 Peng Huang <shawn.p.huang@gmail.com>
|
|
Packit Service |
1d8f1c |
* Copyright (C) 2015-2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
|
|
Packit Service |
1d8f1c |
* Copyright (C) 2008-2016 Red Hat, Inc.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* This library is free software; you can redistribute it and/or
|
|
Packit Service |
1d8f1c |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit Service |
1d8f1c |
* License as published by the Free Software Foundation; either
|
|
Packit Service |
1d8f1c |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* This library is distributed in the hope that it will be useful,
|
|
Packit Service |
1d8f1c |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
1d8f1c |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
1d8f1c |
* Lesser General Public License for more details.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit Service |
1d8f1c |
* License along with this library; if not, write to the Free Software
|
|
Packit Service |
1d8f1c |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
|
Packit Service |
1d8f1c |
* USA
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
#include "ibusbus.h"
|
|
Packit Service |
1d8f1c |
#include <errno.h>
|
|
Packit Service |
1d8f1c |
#include <sys/types.h>
|
|
Packit Service |
1d8f1c |
#include <sys/stat.h>
|
|
Packit Service |
1d8f1c |
#include <unistd.h>
|
|
Packit Service |
1d8f1c |
#include <glib/gstdio.h>
|
|
Packit Service |
1d8f1c |
#include <gio/gio.h>
|
|
Packit Service |
1d8f1c |
#include "ibusmarshalers.h"
|
|
Packit Service |
1d8f1c |
#include "ibusinternal.h"
|
|
Packit Service |
1d8f1c |
#include "ibusshare.h"
|
|
Packit Service |
1d8f1c |
#include "ibusenginedesc.h"
|
|
Packit Service |
1d8f1c |
#include "ibusserializable.h"
|
|
Packit Service |
1d8f1c |
#include "ibusconfig.h"
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
#define IBUS_BUS_GET_PRIVATE(o) \
|
|
Packit Service |
1d8f1c |
(G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_BUS, IBusBusPrivate))
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
enum {
|
|
Packit Service |
1d8f1c |
CONNECTED,
|
|
Packit Service |
1d8f1c |
DISCONNECTED,
|
|
Packit Service |
1d8f1c |
GLOBAL_ENGINE_CHANGED,
|
|
Packit Service |
1d8f1c |
NAME_OWNER_CHANGED,
|
|
Packit Service |
1d8f1c |
LAST_SIGNAL,
|
|
Packit Service |
1d8f1c |
};
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
enum {
|
|
Packit Service |
1d8f1c |
PROP_0 = 0,
|
|
Packit Service |
1d8f1c |
PROP_CONNECT_ASYNC,
|
|
Packit Service |
1d8f1c |
PROP_CLIENT_ONLY,
|
|
Packit Service |
1d8f1c |
};
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* IBusBusPriv */
|
|
Packit Service |
1d8f1c |
struct _IBusBusPrivate {
|
|
Packit Service |
1d8f1c |
GFileMonitor *monitor;
|
|
Packit Service |
1d8f1c |
GDBusConnection *connection;
|
|
Packit Service |
1d8f1c |
gboolean connected;
|
|
Packit Service |
1d8f1c |
gboolean watch_dbus_signal;
|
|
Packit Service |
1d8f1c |
guint watch_dbus_signal_id;
|
|
Packit Service |
1d8f1c |
gboolean watch_ibus_signal;
|
|
Packit Service |
1d8f1c |
guint watch_ibus_signal_id;
|
|
Packit Service |
1d8f1c |
IBusConfig *config;
|
|
Packit Service |
1d8f1c |
gchar *unique_name;
|
|
Packit Service |
1d8f1c |
gboolean connect_async;
|
|
Packit Service |
1d8f1c |
gchar *bus_address;
|
|
Packit Service |
1d8f1c |
gboolean use_portal;
|
|
Packit Service |
1d8f1c |
gboolean client_only;
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable;
|
|
Packit Service |
1d8f1c |
guint portal_name_watch_id;
|
|
Packit Service |
1d8f1c |
};
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static guint bus_signals[LAST_SIGNAL] = { 0 };
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static IBusBus *_bus = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* functions prototype */
|
|
Packit Service |
1d8f1c |
static GObject *ibus_bus_constructor (GType type,
|
|
Packit Service |
1d8f1c |
guint n_params,
|
|
Packit Service |
1d8f1c |
GObjectConstructParam *params);
|
|
Packit Service |
1d8f1c |
static void ibus_bus_destroy (IBusObject *object);
|
|
Packit Service |
1d8f1c |
static void ibus_bus_connect_async (IBusBus *bus);
|
|
Packit Service |
1d8f1c |
static void ibus_bus_watch_dbus_signal (IBusBus *bus);
|
|
Packit Service |
1d8f1c |
static void ibus_bus_unwatch_dbus_signal (IBusBus *bus);
|
|
Packit Service |
1d8f1c |
static void ibus_bus_watch_ibus_signal (IBusBus *bus);
|
|
Packit Service |
1d8f1c |
static void ibus_bus_unwatch_ibus_signal (IBusBus *bus);
|
|
Packit Service |
1d8f1c |
static GVariant *ibus_bus_call_sync (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *service,
|
|
Packit Service |
1d8f1c |
const gchar *path,
|
|
Packit Service |
1d8f1c |
const gchar *interface,
|
|
Packit Service |
1d8f1c |
const gchar *member,
|
|
Packit Service |
1d8f1c |
GVariant *parameters,
|
|
Packit Service |
1d8f1c |
const GVariantType *reply_type);
|
|
Packit Service |
1d8f1c |
static void ibus_bus_call_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *service,
|
|
Packit Service |
1d8f1c |
const gchar *path,
|
|
Packit Service |
1d8f1c |
const gchar *interface,
|
|
Packit Service |
1d8f1c |
const gchar *member,
|
|
Packit Service |
1d8f1c |
GVariant *parameters,
|
|
Packit Service |
1d8f1c |
const GVariantType *reply_type,
|
|
Packit Service |
1d8f1c |
gpointer source_tag,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data);
|
|
Packit Service |
1d8f1c |
static void ibus_bus_set_property (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
guint prop_id,
|
|
Packit Service |
1d8f1c |
const GValue *value,
|
|
Packit Service |
1d8f1c |
GParamSpec *pspec);
|
|
Packit Service |
1d8f1c |
static void ibus_bus_get_property (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
guint prop_id,
|
|
Packit Service |
1d8f1c |
GValue *value,
|
|
Packit Service |
1d8f1c |
GParamSpec *pspec);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void ibus_bus_close_connection (IBusBus *bus);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
G_DEFINE_TYPE (IBusBus, ibus_bus, IBUS_TYPE_OBJECT)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_bus_class_init (IBusBusClass *class)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GObjectClass *gobject_class = G_OBJECT_CLASS (class);
|
|
Packit Service |
1d8f1c |
IBusObjectClass *ibus_object_class = IBUS_OBJECT_CLASS (class);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gobject_class->constructor = ibus_bus_constructor;
|
|
Packit Service |
1d8f1c |
gobject_class->set_property =
|
|
Packit Service |
1d8f1c |
(GObjectSetPropertyFunc) ibus_bus_set_property;
|
|
Packit Service |
1d8f1c |
gobject_class->get_property =
|
|
Packit Service |
1d8f1c |
(GObjectGetPropertyFunc) ibus_bus_get_property;
|
|
Packit Service |
1d8f1c |
ibus_object_class->destroy = ibus_bus_destroy;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* install properties */
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusBus:connect-async:
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Whether the #IBusBus object should connect asynchronously to the bus.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
g_object_class_install_property (
|
|
Packit Service |
1d8f1c |
gobject_class,
|
|
Packit Service |
1d8f1c |
PROP_CONNECT_ASYNC,
|
|
Packit Service |
1d8f1c |
g_param_spec_boolean ("connect-async",
|
|
Packit Service |
1d8f1c |
"Connect Async",
|
|
Packit Service |
1d8f1c |
"Connect asynchronously to the bus",
|
|
Packit Service |
1d8f1c |
FALSE,
|
|
Packit Service |
1d8f1c |
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusBus:client-only:
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Whether the #IBusBus object is for client use only.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
g_object_class_install_property (
|
|
Packit Service |
1d8f1c |
gobject_class,
|
|
Packit Service |
1d8f1c |
PROP_CLIENT_ONLY,
|
|
Packit Service |
1d8f1c |
g_param_spec_boolean ("client-only",
|
|
Packit Service |
1d8f1c |
"ClientOnly",
|
|
Packit Service |
1d8f1c |
"Client use only",
|
|
Packit Service |
1d8f1c |
FALSE,
|
|
Packit Service |
1d8f1c |
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* install signals */
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusBus::connected:
|
|
Packit Service |
1d8f1c |
* @bus: The #IBusBus object which recevied the signal
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when #IBusBus is connected to ibus-daemon.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
bus_signals[CONNECTED] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("connected"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__VOID,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusBus::disconnected:
|
|
Packit Service |
1d8f1c |
* @bus: The #IBusBus object which recevied the signal
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when #IBusBus is disconnected from ibus-daemon.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
bus_signals[DISCONNECTED] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("disconnected"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__VOID,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusBus::global-engine-changed:
|
|
Packit Service |
1d8f1c |
* @bus: The #IBusBus object which recevied the signal
|
|
Packit Service |
1d8f1c |
* @name: The name of the new global engine.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when global engine is changed.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
bus_signals[GLOBAL_ENGINE_CHANGED] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("global-engine-changed"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__STRING,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
1,
|
|
Packit Service |
1d8f1c |
G_TYPE_STRING);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusBus::name-owner-changed:
|
|
Packit Service |
1d8f1c |
* @bus: The #IBusBus object which recevied the signal
|
|
Packit Service |
1d8f1c |
* @name: The name which ower is changed.
|
|
Packit Service |
1d8f1c |
* @old_owner: The unique bus name of the old owner.
|
|
Packit Service |
1d8f1c |
* @new_owner: The unique bus name of the new owner.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when D-Bus name owner is changed.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
bus_signals[NAME_OWNER_CHANGED] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("name-owner-changed"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__STRING_STRING_STRING,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
3,
|
|
Packit Service |
1d8f1c |
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_type_class_add_private (class, sizeof (IBusBusPrivate));
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
_connection_dbus_signal_cb (GDBusConnection *connection,
|
|
Packit Service |
1d8f1c |
const gchar *sender_name,
|
|
Packit Service |
1d8f1c |
const gchar *object_path,
|
|
Packit Service |
1d8f1c |
const gchar *interface_name,
|
|
Packit Service |
1d8f1c |
const gchar *signal_name,
|
|
Packit Service |
1d8f1c |
GVariant *parameters,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (user_data != NULL);
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (user_data));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (signal_name, "NameOwnerChanged") == 0) {
|
|
Packit Service |
1d8f1c |
gchar *name = NULL;
|
|
Packit Service |
1d8f1c |
gchar *old_owner = NULL;
|
|
Packit Service |
1d8f1c |
gchar *new_owner = NULL;
|
|
Packit Service |
1d8f1c |
g_variant_get (parameters, "(&s&s&s)", &name, &old_owner, &new_owner);
|
|
Packit Service |
1d8f1c |
g_signal_emit (IBUS_BUS (user_data),
|
|
Packit Service |
1d8f1c |
bus_signals[NAME_OWNER_CHANGED], 0,
|
|
Packit Service |
1d8f1c |
name, old_owner, new_owner);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
/* FIXME handle other D-Bus signals if needed */
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
_connection_ibus_signal_cb (GDBusConnection *connection,
|
|
Packit Service |
1d8f1c |
const gchar *sender_name,
|
|
Packit Service |
1d8f1c |
const gchar *object_path,
|
|
Packit Service |
1d8f1c |
const gchar *interface_name,
|
|
Packit Service |
1d8f1c |
const gchar *signal_name,
|
|
Packit Service |
1d8f1c |
GVariant *parameters,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (user_data != NULL);
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (user_data));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (signal_name, "GlobalEngineChanged") == 0) {
|
|
Packit Service |
1d8f1c |
gchar *engine_name = NULL;
|
|
Packit Service |
1d8f1c |
g_variant_get (parameters, "(&s)", &engine_name);
|
|
Packit Service |
1d8f1c |
g_signal_emit (IBUS_BUS (user_data),
|
|
Packit Service |
1d8f1c |
bus_signals[GLOBAL_ENGINE_CHANGED], 0,
|
|
Packit Service |
1d8f1c |
engine_name);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
/* FIXME handle org.freedesktop.IBus.RegistryChanged signal if needed */
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
_connection_closed_cb (GDBusConnection *connection,
|
|
Packit Service |
1d8f1c |
gboolean remote_peer_vanished,
|
|
Packit Service |
1d8f1c |
GError *error,
|
|
Packit Service |
1d8f1c |
IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
if (error) {
|
|
Packit Service |
1d8f1c |
/* We replaced g_warning with g_debug here because
|
|
Packit Service |
1d8f1c |
* currently when ibus-daemon restarts, GTK client calls this and
|
|
Packit Service |
1d8f1c |
* _g_dbus_worker_do_read_cb() sets the error message:
|
|
Packit Service |
1d8f1c |
* "Underlying GIOStream returned 0 bytes on an async read"
|
|
Packit Service |
1d8f1c |
* http://git.gnome.org/browse/glib/tree/gio/gdbusprivate.c#n693
|
|
Packit Service |
1d8f1c |
* However we think the error message is almost harmless. */
|
|
Packit Service |
1d8f1c |
g_debug ("_connection_closed_cb: %s", error->message);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
ibus_bus_close_connection (bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_bus_close_connection (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_free (bus->priv->unique_name);
|
|
Packit Service |
1d8f1c |
bus->priv->unique_name = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
bus->priv->watch_dbus_signal_id = 0;
|
|
Packit Service |
1d8f1c |
bus->priv->watch_ibus_signal_id = 0;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_free (bus->priv->bus_address);
|
|
Packit Service |
1d8f1c |
bus->priv->bus_address = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* Cancel ongoing connect request. */
|
|
Packit Service |
1d8f1c |
g_cancellable_cancel (bus->priv->cancellable);
|
|
Packit Service |
1d8f1c |
g_cancellable_reset (bus->priv->cancellable);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
bus->priv->connected = FALSE;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* unref the old connection at first */
|
|
Packit Service |
1d8f1c |
if (bus->priv->connection != NULL) {
|
|
Packit Service |
1d8f1c |
g_signal_handlers_disconnect_by_func (bus->priv->connection,
|
|
Packit Service |
1d8f1c |
G_CALLBACK (_connection_closed_cb),
|
|
Packit Service |
1d8f1c |
bus);
|
|
Packit Service |
1d8f1c |
if (!g_dbus_connection_is_closed(bus->priv->connection))
|
|
Packit Service |
1d8f1c |
g_dbus_connection_close(bus->priv->connection, NULL, NULL, NULL);
|
|
Packit Service |
1d8f1c |
g_object_unref (bus->priv->connection);
|
|
Packit Service |
1d8f1c |
bus->priv->connection = NULL;
|
|
Packit Service |
1d8f1c |
g_signal_emit (bus, bus_signals[DISCONNECTED], 0);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_bus_connect_completed (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (bus->priv->connection);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
bus->priv->connected = TRUE;
|
|
Packit Service |
1d8f1c |
/* FIXME */
|
|
Packit Service |
1d8f1c |
ibus_bus_hello (bus);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_signal_connect (bus->priv->connection,
|
|
Packit Service |
1d8f1c |
"closed",
|
|
Packit Service |
1d8f1c |
(GCallback) _connection_closed_cb,
|
|
Packit Service |
1d8f1c |
bus);
|
|
Packit Service |
1d8f1c |
if (bus->priv->watch_dbus_signal) {
|
|
Packit Service |
1d8f1c |
ibus_bus_watch_dbus_signal (bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
if (bus->priv->watch_ibus_signal) {
|
|
Packit Service |
1d8f1c |
ibus_bus_watch_ibus_signal (bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_signal_emit (bus, bus_signals[CONNECTED], 0);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
_bus_connect_start_portal_cb (GObject *source_object,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusBus *bus = IBUS_BUS (user_data);
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
GError *error = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
result = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object),
|
|
Packit Service |
1d8f1c |
res,
|
|
Packit Service |
1d8f1c |
&error);
|
|
Packit Service |
1d8f1c |
if (result != NULL) {
|
|
Packit Service |
1d8f1c |
ibus_bus_connect_completed (bus);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
} else {
|
|
Packit Service |
1d8f1c |
g_error_free (error);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_dbus_connection_close (bus->priv->connection, NULL, NULL, NULL);
|
|
Packit Service |
1d8f1c |
g_object_unref (bus->priv->connection);
|
|
Packit Service |
1d8f1c |
bus->priv->connection = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_free (bus->priv->bus_address);
|
|
Packit Service |
1d8f1c |
bus->priv->bus_address = NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_object_unref (bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
_bus_connect_async_cb (GObject *source_object,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (user_data != NULL);
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (user_data));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusBus *bus = IBUS_BUS (user_data);
|
|
Packit Service |
1d8f1c |
GError *error = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
bus->priv->connection =
|
|
Packit Service |
1d8f1c |
g_dbus_connection_new_for_address_finish (res, &error);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (error != NULL) {
|
|
Packit Service |
1d8f1c |
g_warning ("Unable to connect to ibus: %s", error->message);
|
|
Packit Service |
1d8f1c |
g_error_free (error);
|
|
Packit Service |
1d8f1c |
error = NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (bus->priv->connection != NULL) {
|
|
Packit Service |
1d8f1c |
if (bus->priv->use_portal) {
|
|
Packit Service |
1d8f1c |
g_object_set_data (G_OBJECT (bus->priv->connection),
|
|
Packit Service |
1d8f1c |
"ibus-portal-connection",
|
|
Packit Service |
1d8f1c |
GINT_TO_POINTER (TRUE));
|
|
Packit Service |
1d8f1c |
g_dbus_connection_call (
|
|
Packit Service |
1d8f1c |
bus->priv->connection,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_PORTAL,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.DBus.Peer",
|
|
Packit Service |
1d8f1c |
"Ping",
|
|
Packit Service |
1d8f1c |
g_variant_new ("()"),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("()"),
|
|
Packit Service |
1d8f1c |
G_DBUS_CALL_FLAGS_NONE,
|
|
Packit Service |
1d8f1c |
-1,
|
|
Packit Service |
1d8f1c |
bus->priv->cancellable,
|
|
Packit Service |
1d8f1c |
(GAsyncReadyCallback) _bus_connect_start_portal_cb,
|
|
Packit Service |
1d8f1c |
g_object_ref (bus));
|
|
Packit Service |
1d8f1c |
} else {
|
|
Packit Service |
1d8f1c |
ibus_bus_connect_completed (bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
else {
|
|
Packit Service |
1d8f1c |
g_free (bus->priv->bus_address);
|
|
Packit Service |
1d8f1c |
bus->priv->bus_address = NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* unref the ref from ibus_bus_connect */
|
|
Packit Service |
1d8f1c |
g_object_unref (bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static gchar *
|
|
Packit Service |
1d8f1c |
ibus_bus_get_bus_address (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
if (_bus->priv->use_portal)
|
|
Packit Service |
1d8f1c |
return g_dbus_address_get_for_bus_sync (G_BUS_TYPE_SESSION, NULL, NULL);
|
|
Packit Service |
1d8f1c |
else
|
|
Packit Service |
1d8f1c |
return g_strdup (ibus_get_address ());
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_bus_connect_async (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
gchar *bus_address = ibus_bus_get_bus_address (bus);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (bus_address == NULL)
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (bus->priv->bus_address, bus_address) == 0) {
|
|
Packit Service |
1d8f1c |
g_free (bus_address);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* Close current connection and cancel ongoing connect request. */
|
|
Packit Service |
1d8f1c |
ibus_bus_close_connection (bus);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
bus->priv->bus_address = bus_address;
|
|
Packit Service |
1d8f1c |
g_object_ref (bus);
|
|
Packit Service |
1d8f1c |
g_dbus_connection_new_for_address (
|
|
Packit Service |
1d8f1c |
bus_address,
|
|
Packit Service |
1d8f1c |
G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT |
|
|
Packit Service |
1d8f1c |
G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION,
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
bus->priv->cancellable,
|
|
Packit Service |
1d8f1c |
_bus_connect_async_cb, bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static gboolean
|
|
Packit Service |
1d8f1c |
is_in_flatpak (void)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
static gboolean flatpak_info_read;
|
|
Packit Service |
1d8f1c |
static gboolean in_flatpak;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (flatpak_info_read)
|
|
Packit Service |
1d8f1c |
return in_flatpak;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
flatpak_info_read = TRUE;
|
|
Packit Service |
1d8f1c |
if (g_file_test ("/.flatpak-info", G_FILE_TEST_EXISTS))
|
|
Packit Service |
1d8f1c |
in_flatpak = TRUE;
|
|
Packit Service |
1d8f1c |
return in_flatpak;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_should_connect_portal (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
return bus->priv->client_only &&
|
|
Packit Service |
1d8f1c |
(is_in_flatpak () || g_getenv ("IBUS_USE_PORTAL") != NULL);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_bus_connect (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
const gchar *bus_address = ibus_get_address ();
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (bus_address == NULL)
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (bus_address, bus->priv->bus_address) == 0 &&
|
|
Packit Service |
1d8f1c |
bus->priv->connection != NULL)
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* Close current connection and cancel ongoing connect request. */
|
|
Packit Service |
1d8f1c |
ibus_bus_close_connection (bus);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
bus->priv->connection = g_dbus_connection_new_for_address_sync (
|
|
Packit Service |
1d8f1c |
bus_address,
|
|
Packit Service |
1d8f1c |
G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT |
|
|
Packit Service |
1d8f1c |
G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION,
|
|
Packit Service |
1d8f1c |
NULL, NULL, NULL);
|
|
Packit Service |
1d8f1c |
if (bus->priv->connection) {
|
|
Packit Service |
1d8f1c |
bus->priv->bus_address = g_strdup (bus_address);
|
|
Packit Service |
1d8f1c |
ibus_bus_connect_completed (bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
_changed_cb (GFileMonitor *monitor,
|
|
Packit Service |
1d8f1c |
GFile *file,
|
|
Packit Service |
1d8f1c |
GFile *other_file,
|
|
Packit Service |
1d8f1c |
GFileMonitorEvent event_type,
|
|
Packit Service |
1d8f1c |
IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
if (event_type != G_FILE_MONITOR_EVENT_CHANGED &&
|
|
Packit Service |
1d8f1c |
event_type != G_FILE_MONITOR_EVENT_CREATED &&
|
|
Packit Service |
1d8f1c |
event_type != G_FILE_MONITOR_EVENT_DELETED)
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_connect_async (bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_bus_init (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
struct stat buf;
|
|
Packit Service |
1d8f1c |
gchar *path;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
bus->priv = IBUS_BUS_GET_PRIVATE (bus);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
bus->priv->config = NULL;
|
|
Packit Service |
1d8f1c |
bus->priv->connection = NULL;
|
|
Packit Service |
1d8f1c |
bus->priv->watch_dbus_signal = FALSE;
|
|
Packit Service |
1d8f1c |
bus->priv->watch_dbus_signal_id = 0;
|
|
Packit Service |
1d8f1c |
bus->priv->watch_ibus_signal = FALSE;
|
|
Packit Service |
1d8f1c |
bus->priv->watch_ibus_signal_id = 0;
|
|
Packit Service |
1d8f1c |
bus->priv->unique_name = NULL;
|
|
Packit Service |
1d8f1c |
bus->priv->connect_async = FALSE;
|
|
Packit Service |
1d8f1c |
bus->priv->client_only = FALSE;
|
|
Packit Service |
1d8f1c |
bus->priv->bus_address = NULL;
|
|
Packit Service |
1d8f1c |
bus->priv->cancellable = g_cancellable_new ();
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
path = g_path_get_dirname (ibus_get_socket_path ());
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_mkdir_with_parents (path, 0700);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (stat (path, &buf) == 0) {
|
|
Packit Service |
1d8f1c |
if (buf.st_uid != getuid ()) {
|
|
Packit Service |
1d8f1c |
g_warning ("The owner of %s is not %s!",
|
|
Packit Service |
1d8f1c |
path, ibus_get_user_name ());
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
if (buf.st_mode != (S_IFDIR | S_IRWXU)) {
|
|
Packit Service |
1d8f1c |
errno = 0;
|
|
Packit Service |
1d8f1c |
if (g_chmod (path, 0700))
|
|
Packit Service |
1d8f1c |
g_warning ("chmod failed: %s", errno ? g_strerror (errno) : "");
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_free (path);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_bus_set_property (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
guint prop_id,
|
|
Packit Service |
1d8f1c |
const GValue *value,
|
|
Packit Service |
1d8f1c |
GParamSpec *pspec)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
switch (prop_id) {
|
|
Packit Service |
1d8f1c |
case PROP_CONNECT_ASYNC:
|
|
Packit Service |
1d8f1c |
bus->priv->connect_async = g_value_get_boolean (value);
|
|
Packit Service |
1d8f1c |
break;
|
|
Packit Service |
1d8f1c |
case PROP_CLIENT_ONLY:
|
|
Packit Service |
1d8f1c |
bus->priv->client_only = g_value_get_boolean (value);
|
|
Packit Service |
1d8f1c |
break;
|
|
Packit Service |
1d8f1c |
default:
|
|
Packit Service |
1d8f1c |
G_OBJECT_WARN_INVALID_PROPERTY_ID (bus, prop_id, pspec);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_bus_get_property (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
guint prop_id,
|
|
Packit Service |
1d8f1c |
GValue *value,
|
|
Packit Service |
1d8f1c |
GParamSpec *pspec)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
switch (prop_id) {
|
|
Packit Service |
1d8f1c |
case PROP_CONNECT_ASYNC:
|
|
Packit Service |
1d8f1c |
g_value_set_boolean (value, bus->priv->connect_async);
|
|
Packit Service |
1d8f1c |
break;
|
|
Packit Service |
1d8f1c |
case PROP_CLIENT_ONLY:
|
|
Packit Service |
1d8f1c |
g_value_set_boolean (value, bus->priv->client_only);
|
|
Packit Service |
1d8f1c |
break;
|
|
Packit Service |
1d8f1c |
default:
|
|
Packit Service |
1d8f1c |
G_OBJECT_WARN_INVALID_PROPERTY_ID (bus, prop_id, pspec);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
portal_name_appeared (GDBusConnection *connection,
|
|
Packit Service |
1d8f1c |
const gchar *name,
|
|
Packit Service |
1d8f1c |
const gchar *owner,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusBus *bus = IBUS_BUS (user_data);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (bus->priv->connection == NULL)
|
|
Packit Service |
1d8f1c |
ibus_bus_connect_async (bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
portal_name_vanished (GDBusConnection *connection,
|
|
Packit Service |
1d8f1c |
const gchar *name,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusBus *bus = IBUS_BUS (user_data);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (bus->priv->connection)
|
|
Packit Service |
1d8f1c |
g_dbus_connection_close (bus->priv->connection, NULL, NULL, NULL);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static GObject*
|
|
Packit Service |
1d8f1c |
ibus_bus_constructor (GType type,
|
|
Packit Service |
1d8f1c |
guint n_params,
|
|
Packit Service |
1d8f1c |
GObjectConstructParam *params)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GObject *object;
|
|
Packit Service |
1d8f1c |
GFile *file;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* share one IBusBus instance in whole application */
|
|
Packit Service |
1d8f1c |
if (_bus == NULL) {
|
|
Packit Service |
1d8f1c |
object = G_OBJECT_CLASS (ibus_bus_parent_class)->constructor (
|
|
Packit Service |
1d8f1c |
type, n_params, params);
|
|
Packit Service |
1d8f1c |
/* make bus object sink */
|
|
Packit Service |
1d8f1c |
g_object_ref_sink (object);
|
|
Packit Service |
1d8f1c |
_bus = IBUS_BUS (object);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
_bus->priv->use_portal = ibus_bus_should_connect_portal (_bus);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (!_bus->priv->use_portal) {
|
|
Packit Service |
1d8f1c |
file = g_file_new_for_path (ibus_get_socket_path ());
|
|
Packit Service |
1d8f1c |
_bus->priv->monitor = g_file_monitor_file (file, 0, NULL, NULL);
|
|
Packit Service |
1d8f1c |
g_signal_connect (_bus->priv->monitor, "changed",
|
|
Packit Service |
1d8f1c |
(GCallback) _changed_cb, _bus);
|
|
Packit Service |
1d8f1c |
g_object_unref (file);
|
|
Packit Service |
1d8f1c |
} else {
|
|
Packit Service |
1d8f1c |
_bus->priv->portal_name_watch_id =
|
|
Packit Service |
1d8f1c |
g_bus_watch_name (G_BUS_TYPE_SESSION,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_PORTAL,
|
|
Packit Service |
1d8f1c |
G_BUS_NAME_WATCHER_FLAGS_NONE,
|
|
Packit Service |
1d8f1c |
portal_name_appeared,
|
|
Packit Service |
1d8f1c |
portal_name_vanished,
|
|
Packit Service |
1d8f1c |
_bus, NULL);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (_bus->priv->connect_async)
|
|
Packit Service |
1d8f1c |
ibus_bus_connect_async (_bus);
|
|
Packit Service |
1d8f1c |
else
|
|
Packit Service |
1d8f1c |
ibus_bus_connect (_bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
else {
|
|
Packit Service |
1d8f1c |
object = g_object_ref (G_OBJECT (_bus));
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return object;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_bus_destroy (IBusObject *object)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (_bus == (IBusBus *)object);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusBus * bus = _bus;
|
|
Packit Service |
1d8f1c |
_bus = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (bus->priv->monitor) {
|
|
Packit Service |
1d8f1c |
g_object_unref (bus->priv->monitor);
|
|
Packit Service |
1d8f1c |
bus->priv->monitor = NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (bus->priv->config) {
|
|
Packit Service |
1d8f1c |
ibus_proxy_destroy ((IBusProxy *) bus->priv->config);
|
|
Packit Service |
1d8f1c |
bus->priv->config = NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (bus->priv->connection) {
|
|
Packit Service |
1d8f1c |
g_signal_handlers_disconnect_by_func (bus->priv->connection,
|
|
Packit Service |
1d8f1c |
G_CALLBACK (_connection_closed_cb),
|
|
Packit Service |
1d8f1c |
bus);
|
|
Packit Service |
1d8f1c |
/* FIXME should use async close function */
|
|
Packit Service |
1d8f1c |
g_dbus_connection_close_sync (bus->priv->connection, NULL, NULL);
|
|
Packit Service |
1d8f1c |
g_object_unref (bus->priv->connection);
|
|
Packit Service |
1d8f1c |
bus->priv->connection = NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_free (bus->priv->unique_name);
|
|
Packit Service |
1d8f1c |
bus->priv->unique_name = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_free (bus->priv->bus_address);
|
|
Packit Service |
1d8f1c |
bus->priv->bus_address = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_cancellable_cancel (bus->priv->cancellable);
|
|
Packit Service |
1d8f1c |
g_object_unref (bus->priv->cancellable);
|
|
Packit Service |
1d8f1c |
bus->priv->cancellable = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (bus->priv->portal_name_watch_id) {
|
|
Packit Service |
1d8f1c |
g_bus_unwatch_name (bus->priv->portal_name_watch_id);
|
|
Packit Service |
1d8f1c |
bus->priv->portal_name_watch_id = 0;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBUS_OBJECT_CLASS (ibus_bus_parent_class)->destroy (object);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static gboolean
|
|
Packit Service |
1d8f1c |
_async_finish_void (GTask *task,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
/* g_task_propagate_error() is not a public API and
|
|
Packit Service |
1d8f1c |
* g_task_had_error() needs to be called before
|
|
Packit Service |
1d8f1c |
* g_task_propagate_pointer() clears task->error.
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
gboolean had_error = g_task_had_error (task);
|
|
Packit Service |
1d8f1c |
g_task_propagate_pointer (task, error);
|
|
Packit Service |
1d8f1c |
if (had_error)
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static gchar *
|
|
Packit Service |
1d8f1c |
_async_finish_object_path (GTask *task,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
gboolean had_error = g_task_had_error (task);
|
|
Packit Service |
1d8f1c |
GVariant *result = g_task_propagate_pointer (task, error);
|
|
Packit Service |
1d8f1c |
GVariant *variant = NULL;
|
|
Packit Service |
1d8f1c |
gchar *path = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (had_error) {
|
|
Packit Service |
1d8f1c |
g_assert (result == NULL);
|
|
Packit Service |
1d8f1c |
return NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (result != NULL, NULL);
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(v)", &variant);
|
|
Packit Service |
1d8f1c |
path = g_variant_dup_string (variant, NULL);
|
|
Packit Service |
1d8f1c |
g_variant_unref (variant);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
return path;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static gchar *
|
|
Packit Service |
1d8f1c |
_async_finish_string (GTask *task,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
gboolean had_error = g_task_had_error (task);
|
|
Packit Service |
1d8f1c |
GVariant *variant = g_task_propagate_pointer (task, error);
|
|
Packit Service |
1d8f1c |
gchar *s = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (had_error) {
|
|
Packit Service |
1d8f1c |
g_assert (variant == NULL);
|
|
Packit Service |
1d8f1c |
return NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (variant != NULL, NULL);
|
|
Packit Service |
1d8f1c |
g_variant_get (variant, "(&s)", &s);
|
|
Packit Service |
1d8f1c |
g_variant_unref (variant);
|
|
Packit Service |
1d8f1c |
return s;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static gboolean
|
|
Packit Service |
1d8f1c |
_async_finish_gboolean (GTask *task,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
gboolean had_error = g_task_had_error (task);
|
|
Packit Service |
1d8f1c |
GVariant *variant = g_task_propagate_pointer (task, error);
|
|
Packit Service |
1d8f1c |
gboolean retval = FALSE;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (had_error) {
|
|
Packit Service |
1d8f1c |
g_assert (variant == NULL);
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (variant != NULL, FALSE);
|
|
Packit Service |
1d8f1c |
g_variant_get (variant, "(b)", &retval);
|
|
Packit Service |
1d8f1c |
g_variant_unref (variant);
|
|
Packit Service |
1d8f1c |
return retval;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static guint
|
|
Packit Service |
1d8f1c |
_async_finish_guint (GTask *task,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
gboolean had_error = g_task_had_error (task);
|
|
Packit Service |
1d8f1c |
GVariant *variant = g_task_propagate_pointer (task, error);
|
|
Packit Service |
1d8f1c |
static const guint bad_id = 0;
|
|
Packit Service |
1d8f1c |
guint id = 0;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (had_error) {
|
|
Packit Service |
1d8f1c |
g_assert (variant == NULL);
|
|
Packit Service |
1d8f1c |
return bad_id;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (variant != NULL, bad_id);
|
|
Packit Service |
1d8f1c |
g_variant_get (variant, "(u)", &id;;
|
|
Packit Service |
1d8f1c |
g_variant_unref (variant);
|
|
Packit Service |
1d8f1c |
return id;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusBus *
|
|
Packit Service |
1d8f1c |
ibus_bus_new (void)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusBus *bus = IBUS_BUS (g_object_new (IBUS_TYPE_BUS,
|
|
Packit Service |
1d8f1c |
"connect-async", FALSE,
|
|
Packit Service |
1d8f1c |
"client-only", FALSE,
|
|
Packit Service |
1d8f1c |
NULL));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return bus;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusBus *
|
|
Packit Service |
1d8f1c |
ibus_bus_new_async (void)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusBus *bus = IBUS_BUS (g_object_new (IBUS_TYPE_BUS,
|
|
Packit Service |
1d8f1c |
"connect-async", TRUE,
|
|
Packit Service |
1d8f1c |
"client-only", FALSE,
|
|
Packit Service |
1d8f1c |
NULL));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return bus;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusBus *
|
|
Packit Service |
1d8f1c |
ibus_bus_new_async_client (void)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusBus *bus = IBUS_BUS (g_object_new (IBUS_TYPE_BUS,
|
|
Packit Service |
1d8f1c |
"connect-async", TRUE,
|
|
Packit Service |
1d8f1c |
"client-only", TRUE,
|
|
Packit Service |
1d8f1c |
NULL));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return bus;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_is_connected (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), FALSE);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (bus->priv->connection == NULL || g_dbus_connection_is_closed (bus->priv->connection))
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return bus->priv->connected;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusInputContext *
|
|
Packit Service |
1d8f1c |
ibus_bus_create_input_context (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *client_name)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), NULL);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (client_name != NULL, NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gchar *path;
|
|
Packit Service |
1d8f1c |
IBusInputContext *context = NULL;
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"CreateInputContext",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(s)", client_name),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(o)"));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result != NULL) {
|
|
Packit Service |
1d8f1c |
GError *error = NULL;
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(&o)", &path);
|
|
Packit Service |
1d8f1c |
context = ibus_input_context_new (path, bus->priv->connection, NULL, &error);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
if (context == NULL) {
|
|
Packit Service |
1d8f1c |
g_warning ("ibus_bus_create_input_context: %s", error->message);
|
|
Packit Service |
1d8f1c |
g_error_free (error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return context;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
_create_input_context_async_step_two_done (GObject *source_object,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GTask *task)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GError *error = NULL;
|
|
Packit Service |
1d8f1c |
IBusInputContext *context =
|
|
Packit Service |
1d8f1c |
ibus_input_context_new_async_finish (res, &error);
|
|
Packit Service |
1d8f1c |
if (context == NULL)
|
|
Packit Service |
1d8f1c |
g_task_return_error (task, error);
|
|
Packit Service |
1d8f1c |
else
|
|
Packit Service |
1d8f1c |
g_task_return_pointer (task, context, NULL);
|
|
Packit Service |
1d8f1c |
g_object_unref (task);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
_create_input_context_async_step_one_done (GDBusConnection *connection,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GTask *task)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GError *error = NULL;
|
|
Packit Service |
1d8f1c |
GVariant *variant = g_dbus_connection_call_finish (connection, res, &error);
|
|
Packit Service |
1d8f1c |
const gchar *path = NULL;
|
|
Packit Service |
1d8f1c |
IBusBus *bus;
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (variant == NULL) {
|
|
Packit Service |
1d8f1c |
g_task_return_error (task, error);
|
|
Packit Service |
1d8f1c |
g_object_unref (task);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_dbus_connection_is_closed (connection)) {
|
|
Packit Service |
1d8f1c |
/*
|
|
Packit Service |
1d8f1c |
* The connection is closed, can not contine next steps, so complete
|
|
Packit Service |
1d8f1c |
* the asynchronous request with error.
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
g_variant_unref(variant);
|
|
Packit Service |
1d8f1c |
g_task_return_new_error (task,
|
|
Packit Service |
1d8f1c |
G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "Connection is closed.");
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_variant_get (variant, "(&o)", &path);
|
|
Packit Service |
1d8f1c |
g_variant_unref(variant);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
bus = (IBusBus *)g_task_get_source_object (task);
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
cancellable = g_task_get_cancellable (task);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_input_context_new_async (path,
|
|
Packit Service |
1d8f1c |
bus->priv->connection,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
(GAsyncReadyCallback)_create_input_context_async_step_two_done,
|
|
Packit Service |
1d8f1c |
task);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_create_input_context_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *client_name,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (client_name != NULL);
|
|
Packit Service |
1d8f1c |
g_return_if_fail (callback != NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = g_task_new (bus, cancellable, callback, user_data);
|
|
Packit Service |
1d8f1c |
g_task_set_source_tag (task, ibus_bus_create_input_context_async);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* do not use ibus_bus_call_async, instread use g_dbus_connection_call
|
|
Packit Service |
1d8f1c |
* directly, because we need two async steps for create an IBusInputContext.
|
|
Packit Service |
1d8f1c |
* 1. Call CreateInputContext to request ibus-daemon create a remote IC.
|
|
Packit Service |
1d8f1c |
* 2. New local IBusInputContext proxy of the remote IC
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
g_dbus_connection_call (bus->priv->connection,
|
|
Packit Service |
1d8f1c |
ibus_bus_get_service_name (bus),
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
bus->priv->use_portal ? IBUS_INTERFACE_PORTAL : IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"CreateInputContext",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(s)", client_name),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE("(o)"),
|
|
Packit Service |
1d8f1c |
G_DBUS_CALL_FLAGS_NO_AUTO_START,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
(GAsyncReadyCallback)_create_input_context_async_step_one_done,
|
|
Packit Service |
1d8f1c |
task);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusInputContext *
|
|
Packit Service |
1d8f1c |
ibus_bus_create_input_context_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
gboolean had_error;
|
|
Packit Service |
1d8f1c |
IBusInputContext *context = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_assert (g_task_get_source_tag (task) ==
|
|
Packit Service |
1d8f1c |
ibus_bus_create_input_context_async);
|
|
Packit Service |
1d8f1c |
had_error = g_task_had_error (task);
|
|
Packit Service |
1d8f1c |
context = g_task_propagate_pointer (task, error);
|
|
Packit Service |
1d8f1c |
if (had_error) {
|
|
Packit Service |
1d8f1c |
g_assert (context == NULL);
|
|
Packit Service |
1d8f1c |
return NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_INPUT_CONTEXT (context));
|
|
Packit Service |
1d8f1c |
return context;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gchar *
|
|
Packit Service |
1d8f1c |
ibus_bus_current_input_context (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gchar *path = NULL;
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.DBus.Properties",
|
|
Packit Service |
1d8f1c |
"Get",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(ss)",
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"CurrentInputContext"),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(v)"));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result != NULL) {
|
|
Packit Service |
1d8f1c |
GVariant *variant = NULL;
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(v)", &variant);
|
|
Packit Service |
1d8f1c |
path = g_variant_dup_string (variant, NULL);
|
|
Packit Service |
1d8f1c |
g_variant_unref (variant);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return path;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_current_input_context_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.DBus.Properties",
|
|
Packit Service |
1d8f1c |
"Get",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(ss)",
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"CurrentInputContext"),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(v)"),
|
|
Packit Service |
1d8f1c |
ibus_bus_current_input_context_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gchar *
|
|
Packit Service |
1d8f1c |
ibus_bus_current_input_context_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_assert(g_task_get_source_tag (task) ==
|
|
Packit Service |
1d8f1c |
ibus_bus_current_input_context_async);
|
|
Packit Service |
1d8f1c |
return _async_finish_object_path (task, error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_bus_watch_dbus_signal (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (bus->priv->connection != NULL);
|
|
Packit Service |
1d8f1c |
g_return_if_fail (bus->priv->watch_dbus_signal_id == 0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* Subscribe to dbus signals such as NameOwnerChanged. */
|
|
Packit Service |
1d8f1c |
bus->priv->watch_dbus_signal_id
|
|
Packit Service |
1d8f1c |
= g_dbus_connection_signal_subscribe (bus->priv->connection,
|
|
Packit Service |
1d8f1c |
DBUS_SERVICE_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_INTERFACE_DBUS,
|
|
Packit Service |
1d8f1c |
"NameOwnerChanged",
|
|
Packit Service |
1d8f1c |
DBUS_PATH_DBUS,
|
|
Packit Service |
1d8f1c |
NULL /* arg0 */,
|
|
Packit Service |
1d8f1c |
(GDBusSignalFlags) 0,
|
|
Packit Service |
1d8f1c |
_connection_dbus_signal_cb,
|
|
Packit Service |
1d8f1c |
bus,
|
|
Packit Service |
1d8f1c |
NULL /* user_data_free_func */);
|
|
Packit Service |
1d8f1c |
/* FIXME handle other D-Bus signals if needed */
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_bus_unwatch_dbus_signal (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (bus->priv->watch_dbus_signal_id != 0);
|
|
Packit Service |
1d8f1c |
g_dbus_connection_signal_unsubscribe (bus->priv->connection,
|
|
Packit Service |
1d8f1c |
bus->priv->watch_dbus_signal_id);
|
|
Packit Service |
1d8f1c |
bus->priv->watch_dbus_signal_id = 0;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_set_watch_dbus_signal (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
gboolean watch)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (bus->priv->watch_dbus_signal == watch)
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
bus->priv->watch_dbus_signal = watch;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (ibus_bus_is_connected (bus)) {
|
|
Packit Service |
1d8f1c |
if (watch) {
|
|
Packit Service |
1d8f1c |
ibus_bus_watch_dbus_signal (bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
else {
|
|
Packit Service |
1d8f1c |
ibus_bus_unwatch_dbus_signal (bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_bus_watch_ibus_signal (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (bus->priv->connection != NULL);
|
|
Packit Service |
1d8f1c |
g_return_if_fail (bus->priv->watch_ibus_signal_id == 0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* Subscribe to ibus signals such as GlboalEngineChanged. */
|
|
Packit Service |
1d8f1c |
bus->priv->watch_ibus_signal_id
|
|
Packit Service |
1d8f1c |
= g_dbus_connection_signal_subscribe (bus->priv->connection,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.IBus",
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"GlobalEngineChanged",
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
NULL /* arg0 */,
|
|
Packit Service |
1d8f1c |
(GDBusSignalFlags) 0,
|
|
Packit Service |
1d8f1c |
_connection_ibus_signal_cb,
|
|
Packit Service |
1d8f1c |
bus,
|
|
Packit Service |
1d8f1c |
NULL /* user_data_free_func */);
|
|
Packit Service |
1d8f1c |
/* FIXME handle org.freedesktop.IBus.RegistryChanged signal if needed */
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_bus_unwatch_ibus_signal (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (bus->priv->watch_ibus_signal_id != 0);
|
|
Packit Service |
1d8f1c |
g_dbus_connection_signal_unsubscribe (bus->priv->connection,
|
|
Packit Service |
1d8f1c |
bus->priv->watch_ibus_signal_id);
|
|
Packit Service |
1d8f1c |
bus->priv->watch_ibus_signal_id = 0;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_set_watch_ibus_signal (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
gboolean watch)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (bus->priv->watch_ibus_signal == watch)
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
bus->priv->watch_ibus_signal = watch;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (ibus_bus_is_connected (bus)) {
|
|
Packit Service |
1d8f1c |
if (watch) {
|
|
Packit Service |
1d8f1c |
ibus_bus_watch_ibus_signal (bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
else {
|
|
Packit Service |
1d8f1c |
ibus_bus_unwatch_ibus_signal (bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
const gchar *
|
|
Packit Service |
1d8f1c |
ibus_bus_hello (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), NULL);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (ibus_bus_is_connected (bus), NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* gdbus connection will say hello by self. */
|
|
Packit Service |
1d8f1c |
if (bus->priv->connection)
|
|
Packit Service |
1d8f1c |
return g_dbus_connection_get_unique_name (bus->priv->connection);
|
|
Packit Service |
1d8f1c |
return NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
guint32
|
|
Packit Service |
1d8f1c |
ibus_bus_request_name (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *name,
|
|
Packit Service |
1d8f1c |
guint32 flags)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), 0);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (name != NULL, 0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
guint32 retval = 0;
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
DBUS_SERVICE_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_PATH_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_INTERFACE_DBUS,
|
|
Packit Service |
1d8f1c |
"RequestName",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(su)", name, flags),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(u)"));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(u)", &retval);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return retval;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_request_name_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *name,
|
|
Packit Service |
1d8f1c |
guint flags,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (name != NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
DBUS_SERVICE_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_PATH_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_INTERFACE_DBUS,
|
|
Packit Service |
1d8f1c |
"RequestName",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(su)", name, flags),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(u)"),
|
|
Packit Service |
1d8f1c |
ibus_bus_request_name_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
guint
|
|
Packit Service |
1d8f1c |
ibus_bus_request_name_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_assert(g_task_get_source_tag (task) == ibus_bus_request_name_async);
|
|
Packit Service |
1d8f1c |
return _async_finish_guint (task, error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
guint
|
|
Packit Service |
1d8f1c |
ibus_bus_release_name (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *name)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), 0);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (name != NULL, 0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
guint retval = 0;
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
DBUS_SERVICE_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_PATH_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_INTERFACE_DBUS,
|
|
Packit Service |
1d8f1c |
"ReleaseName",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(s)", name),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(u)"));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(u)", &retval);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return retval;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_release_name_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *name,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (name != NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
DBUS_SERVICE_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_PATH_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_INTERFACE_DBUS,
|
|
Packit Service |
1d8f1c |
"ReleaseName",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(s)", name),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(u)"),
|
|
Packit Service |
1d8f1c |
ibus_bus_release_name_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
guint
|
|
Packit Service |
1d8f1c |
ibus_bus_release_name_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_assert(g_task_get_source_tag (task) == ibus_bus_release_name_async);
|
|
Packit Service |
1d8f1c |
return _async_finish_guint (task, error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GList *
|
|
Packit Service |
1d8f1c |
ibus_bus_list_queued_owners (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *name)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GList *retval = NULL;
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), NULL);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (name != NULL, NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
DBUS_SERVICE_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_PATH_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_INTERFACE_DBUS,
|
|
Packit Service |
1d8f1c |
"ListQueuedOwners",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(s)", name),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(as)"));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
GVariantIter *iter = NULL;
|
|
Packit Service |
1d8f1c |
const gchar *name = NULL;
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(as)", &iter);
|
|
Packit Service |
1d8f1c |
while (g_variant_iter_loop (iter, "&s", &name)) {
|
|
Packit Service |
1d8f1c |
if (name == NULL) {
|
|
Packit Service |
1d8f1c |
continue;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
retval = g_list_append (retval, g_strdup (name));
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_variant_iter_free (iter);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return retval;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_name_has_owner (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *name)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), FALSE);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (name != NULL, FALSE);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean retval = FALSE;
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
DBUS_SERVICE_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_PATH_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_INTERFACE_DBUS,
|
|
Packit Service |
1d8f1c |
"NameHasOwner",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(s)", name),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(b)"));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(b)", &retval);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return retval;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_name_has_owner_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *name,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (name != NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
DBUS_SERVICE_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_PATH_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_INTERFACE_DBUS,
|
|
Packit Service |
1d8f1c |
"NameHasOwner",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(s)", name),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(b)"),
|
|
Packit Service |
1d8f1c |
ibus_bus_name_has_owner_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_name_has_owner_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_assert(g_task_get_source_tag (task) == ibus_bus_name_has_owner_async);
|
|
Packit Service |
1d8f1c |
return _async_finish_gboolean (task, error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GList *
|
|
Packit Service |
1d8f1c |
ibus_bus_list_names (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), NULL);
|
|
Packit Service |
1d8f1c |
return NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_add_match (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *rule)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), FALSE);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (rule != NULL, FALSE);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
DBUS_SERVICE_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_PATH_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_INTERFACE_DBUS,
|
|
Packit Service |
1d8f1c |
"AddMatch",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(s)", rule),
|
|
Packit Service |
1d8f1c |
NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_add_match_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *rule,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (rule != NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
DBUS_SERVICE_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_PATH_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_INTERFACE_DBUS,
|
|
Packit Service |
1d8f1c |
"AddMatch",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(s)", rule),
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
ibus_bus_add_match_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_add_match_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_assert(g_task_get_source_tag (task) == ibus_bus_add_match_async);
|
|
Packit Service |
1d8f1c |
return _async_finish_void (task, error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_remove_match (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *rule)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), FALSE);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (rule != NULL, FALSE);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
DBUS_SERVICE_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_PATH_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_INTERFACE_DBUS,
|
|
Packit Service |
1d8f1c |
"RemoveMatch",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(s)", rule),
|
|
Packit Service |
1d8f1c |
NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_remove_match_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *rule,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (rule != NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
DBUS_SERVICE_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_PATH_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_INTERFACE_DBUS,
|
|
Packit Service |
1d8f1c |
"RemoveMatch",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(s)", rule),
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
ibus_bus_remove_match_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_remove_match_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_assert(g_task_get_source_tag (task) == ibus_bus_remove_match_async);
|
|
Packit Service |
1d8f1c |
return _async_finish_void (task, error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gchar *
|
|
Packit Service |
1d8f1c |
ibus_bus_get_name_owner (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *name)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), NULL);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (name != NULL, NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gchar *retval = NULL;
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
DBUS_SERVICE_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_PATH_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_INTERFACE_DBUS,
|
|
Packit Service |
1d8f1c |
"GetNameOwner",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(s)", name),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(s)"));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(s)", &retval);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return retval;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_get_name_owner_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *name,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (name != NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
DBUS_SERVICE_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_PATH_DBUS,
|
|
Packit Service |
1d8f1c |
DBUS_INTERFACE_DBUS,
|
|
Packit Service |
1d8f1c |
"GetNameOwner",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(s)", name),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(s)"),
|
|
Packit Service |
1d8f1c |
ibus_bus_get_name_owner_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gchar *
|
|
Packit Service |
1d8f1c |
ibus_bus_get_name_owner_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_assert(g_task_get_source_tag (task) == ibus_bus_get_name_owner_async);
|
|
Packit Service |
1d8f1c |
return g_strdup (_async_finish_string (task, error));
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GDBusConnection *
|
|
Packit Service |
1d8f1c |
ibus_bus_get_connection (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return bus->priv->connection;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
const gchar *
|
|
Packit Service |
1d8f1c |
ibus_bus_get_service_name (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
if (bus->priv->use_portal)
|
|
Packit Service |
1d8f1c |
return IBUS_SERVICE_PORTAL;
|
|
Packit Service |
1d8f1c |
return IBUS_SERVICE_IBUS;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_exit (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
gboolean restart)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), FALSE);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"Exit",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(b)", restart),
|
|
Packit Service |
1d8f1c |
NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_close_connection (bus);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_exit_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
gboolean restart,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"Exit",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(b)", restart),
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
ibus_bus_exit_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_exit_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_assert (g_task_get_source_tag (task) == ibus_bus_exit_async);
|
|
Packit Service |
1d8f1c |
return _async_finish_void (task, error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_register_component (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
IBusComponent *component)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), FALSE);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_COMPONENT (component), FALSE);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *variant = ibus_serializable_serialize ((IBusSerializable *)component);
|
|
Packit Service |
1d8f1c |
GVariant *result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"RegisterComponent",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(v)", variant),
|
|
Packit Service |
1d8f1c |
NULL);
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_register_component_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
IBusComponent *component,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_COMPONENT (component));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *variant = ibus_serializable_serialize ((IBusSerializable *)component);
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"RegisterComponent",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(v)", variant),
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
ibus_bus_register_component_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_register_component_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_assert (
|
|
Packit Service |
1d8f1c |
g_task_get_source_tag (task) == ibus_bus_register_component_async);
|
|
Packit Service |
1d8f1c |
return _async_finish_void (task, error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static GList *
|
|
Packit Service |
1d8f1c |
ibus_bus_do_list_engines (IBusBus *bus, gboolean active_engines_only)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GList *retval = NULL;
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
const gchar *property =
|
|
Packit Service |
1d8f1c |
active_engines_only ? "ActiveEngines" : "Engines";
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.DBus.Properties",
|
|
Packit Service |
1d8f1c |
"Get",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(ss)",
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
property),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(v)"));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
GVariant *variant = NULL;
|
|
Packit Service |
1d8f1c |
GVariantIter *iter = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(v)", &variant);
|
|
Packit Service |
1d8f1c |
iter = g_variant_iter_new (variant);
|
|
Packit Service |
1d8f1c |
GVariant *var;
|
|
Packit Service |
1d8f1c |
while (g_variant_iter_loop (iter, "v", &var)) {
|
|
Packit Service |
1d8f1c |
IBusSerializable *serializable = ibus_serializable_deserialize (var);
|
|
Packit Service |
1d8f1c |
g_object_ref_sink (serializable);
|
|
Packit Service |
1d8f1c |
retval = g_list_append (retval, serializable);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_variant_iter_free (iter);
|
|
Packit Service |
1d8f1c |
g_variant_unref (variant);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return retval;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GList *
|
|
Packit Service |
1d8f1c |
ibus_bus_list_engines (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
return ibus_bus_do_list_engines (bus, FALSE);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_list_engines_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.DBus.Properties",
|
|
Packit Service |
1d8f1c |
"Get",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(ss)",
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"Engines"),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(v)"),
|
|
Packit Service |
1d8f1c |
ibus_bus_list_engines_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GList *
|
|
Packit Service |
1d8f1c |
ibus_bus_list_engines_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
gboolean had_error;
|
|
Packit Service |
1d8f1c |
GVariant *result = NULL;
|
|
Packit Service |
1d8f1c |
GVariant *variant = NULL;
|
|
Packit Service |
1d8f1c |
GList *retval = NULL;
|
|
Packit Service |
1d8f1c |
GVariantIter *iter = NULL;
|
|
Packit Service |
1d8f1c |
GVariant *var;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
had_error = g_task_had_error (task);
|
|
Packit Service |
1d8f1c |
result = g_task_propagate_pointer (task, error);
|
|
Packit Service |
1d8f1c |
if (had_error) {
|
|
Packit Service |
1d8f1c |
g_assert (result == NULL);
|
|
Packit Service |
1d8f1c |
return NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (result != NULL, NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(v)", &variant);
|
|
Packit Service |
1d8f1c |
iter = g_variant_iter_new (variant);
|
|
Packit Service |
1d8f1c |
while (g_variant_iter_loop (iter, "v", &var)) {
|
|
Packit Service |
1d8f1c |
IBusSerializable *serializable = ibus_serializable_deserialize (var);
|
|
Packit Service |
1d8f1c |
g_object_ref_sink (serializable);
|
|
Packit Service |
1d8f1c |
retval = g_list_append (retval, serializable);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_variant_iter_free (iter);
|
|
Packit Service |
1d8f1c |
g_variant_unref (variant);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
return retval;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
#ifndef IBUS_DISABLE_DEPRECATED
|
|
Packit Service |
1d8f1c |
GList *
|
|
Packit Service |
1d8f1c |
ibus_bus_list_active_engines (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
return ibus_bus_do_list_engines (bus, TRUE);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_list_active_engines_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.DBus.Properties",
|
|
Packit Service |
1d8f1c |
"Get",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(ss)",
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"ActiveEngines"),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(v)"),
|
|
Packit Service |
1d8f1c |
ibus_bus_list_active_engines_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GList *
|
|
Packit Service |
1d8f1c |
ibus_bus_list_active_engines_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
return ibus_bus_list_engines_async_finish (bus, res, error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
#endif /* IBUS_DISABLE_DEPRECATED */
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusEngineDesc **
|
|
Packit Service |
1d8f1c |
ibus_bus_get_engines_by_names (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar * const *names)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"GetEnginesByNames",
|
|
Packit Service |
1d8f1c |
g_variant_new("(^as)", names),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(av)"));
|
|
Packit Service |
1d8f1c |
if (result == NULL)
|
|
Packit Service |
1d8f1c |
return NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GArray *array = g_array_new (TRUE, TRUE, sizeof (IBusEngineDesc *));
|
|
Packit Service |
1d8f1c |
GVariantIter *iter = NULL;
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(av)", &iter);
|
|
Packit Service |
1d8f1c |
GVariant *var;
|
|
Packit Service |
1d8f1c |
while (g_variant_iter_loop (iter, "v", &var)) {
|
|
Packit Service |
1d8f1c |
IBusEngineDesc *desc = (IBusEngineDesc *) ibus_serializable_deserialize (var);
|
|
Packit Service |
1d8f1c |
g_object_ref_sink (desc);
|
|
Packit Service |
1d8f1c |
g_array_append_val (array, desc);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_variant_iter_free (iter);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return (IBusEngineDesc **)g_array_free (array, FALSE);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
_config_destroy_cb (IBusConfig *config,
|
|
Packit Service |
1d8f1c |
IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusBusPrivate *priv;
|
|
Packit Service |
1d8f1c |
priv = IBUS_BUS_GET_PRIVATE (bus);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (priv->config == config);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_object_unref (config);
|
|
Packit Service |
1d8f1c |
priv->config = NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusConfig *
|
|
Packit Service |
1d8f1c |
ibus_bus_get_config (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (ibus_bus_is_connected (bus), NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusBusPrivate *priv;
|
|
Packit Service |
1d8f1c |
priv = IBUS_BUS_GET_PRIVATE (bus);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (priv->config == NULL && priv->connection) {
|
|
Packit Service |
1d8f1c |
priv->config = ibus_config_new (priv->connection, NULL, NULL);
|
|
Packit Service |
1d8f1c |
if (priv->config) {
|
|
Packit Service |
1d8f1c |
g_signal_connect (priv->config, "destroy", G_CALLBACK (_config_destroy_cb), bus);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return priv->config;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
#ifndef IBUS_DISABLE_DEPRECATED
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_get_use_sys_layout (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), FALSE);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean retval = FALSE;
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"GetUseSysLayout",
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(b)"));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(b)", &retval);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return retval;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_get_use_sys_layout_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"GetUseSysLayout",
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(b)"),
|
|
Packit Service |
1d8f1c |
ibus_bus_get_use_sys_layout_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_get_use_sys_layout_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_assert(g_task_get_source_tag (task) == ibus_bus_get_use_sys_layout_async);
|
|
Packit Service |
1d8f1c |
return _async_finish_gboolean (task, error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_get_use_global_engine (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), FALSE);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean retval = FALSE;
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"GetUseGlobalEngine",
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(b)"));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(b)", &retval);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return retval;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_get_use_global_engine_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"GetUseGlobalEngine",
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(b)"),
|
|
Packit Service |
1d8f1c |
ibus_bus_get_use_global_engine_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_get_use_global_engine_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_assert(g_task_get_source_tag (task) ==
|
|
Packit Service |
1d8f1c |
ibus_bus_get_use_global_engine_async);
|
|
Packit Service |
1d8f1c |
return _async_finish_gboolean (task, error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_is_global_engine_enabled (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), FALSE);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean retval = FALSE;
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"IsGlobalEngineEnabled",
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(b)"));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(b)", &retval);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return retval;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void ibus_bus_is_global_engine_enabled_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"IsGlobalEngineEnabled",
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(b)"),
|
|
Packit Service |
1d8f1c |
ibus_bus_is_global_engine_enabled_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean ibus_bus_is_global_engine_enabled_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_assert(g_task_get_source_tag (task) ==
|
|
Packit Service |
1d8f1c |
ibus_bus_is_global_engine_enabled_async);
|
|
Packit Service |
1d8f1c |
return _async_finish_gboolean (task, error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
#endif /* IBUS_DISABLE_DEPRECATED */
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusEngineDesc *
|
|
Packit Service |
1d8f1c |
ibus_bus_get_global_engine (IBusBus *bus)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
IBusEngineDesc *engine = NULL;
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.DBus.Properties",
|
|
Packit Service |
1d8f1c |
"Get",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(ss)",
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"GlobalEngine"),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(v)"));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
GVariant *variant = NULL;
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(v)", &variant);
|
|
Packit Service |
1d8f1c |
if (variant) {
|
|
Packit Service |
1d8f1c |
GVariant *obj = g_variant_get_variant (variant);
|
|
Packit Service |
1d8f1c |
engine = IBUS_ENGINE_DESC (ibus_serializable_deserialize (obj));
|
|
Packit Service |
1d8f1c |
g_variant_unref (obj);
|
|
Packit Service |
1d8f1c |
g_variant_unref (variant);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return engine;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_get_global_engine_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.DBus.Properties",
|
|
Packit Service |
1d8f1c |
"Get",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(ss)",
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"GlobalEngine"),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(v)"),
|
|
Packit Service |
1d8f1c |
ibus_bus_get_global_engine_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusEngineDesc *
|
|
Packit Service |
1d8f1c |
ibus_bus_get_global_engine_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
gboolean had_error;
|
|
Packit Service |
1d8f1c |
GVariant *result = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
had_error = g_task_had_error (task);
|
|
Packit Service |
1d8f1c |
result = g_task_propagate_pointer (task, error);
|
|
Packit Service |
1d8f1c |
if (had_error) {
|
|
Packit Service |
1d8f1c |
g_assert (result == NULL);
|
|
Packit Service |
1d8f1c |
return NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (result != NULL, NULL);
|
|
Packit Service |
1d8f1c |
GVariant *variant = NULL;
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(v)", &variant);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusEngineDesc *engine = NULL;
|
|
Packit Service |
1d8f1c |
if (variant) {
|
|
Packit Service |
1d8f1c |
GVariant *obj = g_variant_get_variant (variant);
|
|
Packit Service |
1d8f1c |
engine = IBUS_ENGINE_DESC (ibus_serializable_deserialize (obj));
|
|
Packit Service |
1d8f1c |
g_variant_unref (obj);
|
|
Packit Service |
1d8f1c |
g_variant_unref (variant);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
return engine;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_set_global_engine (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *global_engine)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), FALSE);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (global_engine != NULL, FALSE);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"SetGlobalEngine",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(s)", global_engine),
|
|
Packit Service |
1d8f1c |
NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_set_global_engine_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *global_engine,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (global_engine != NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"SetGlobalEngine",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(s)", global_engine),
|
|
Packit Service |
1d8f1c |
NULL, /* no return value */
|
|
Packit Service |
1d8f1c |
ibus_bus_set_global_engine_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_set_global_engine_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_assert (g_task_get_source_tag (task) == ibus_bus_set_global_engine_async);
|
|
Packit Service |
1d8f1c |
return _async_finish_void (task, error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_preload_engines (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar * const *names)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
GVariant *variant = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), FALSE);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (names != NULL && names[0] != NULL, FALSE);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
variant = g_variant_new_strv(names, -1);
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.DBus.Properties",
|
|
Packit Service |
1d8f1c |
"Set",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(ssv)",
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"PreloadEngines",
|
|
Packit Service |
1d8f1c |
variant),
|
|
Packit Service |
1d8f1c |
NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_preload_engines_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar * const *names,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GVariant *variant = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (names != NULL && names[0] != NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
variant = g_variant_new_strv(names, -1);
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.DBus.Properties",
|
|
Packit Service |
1d8f1c |
"Set",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(ssv)",
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
"PreloadEngines",
|
|
Packit Service |
1d8f1c |
variant),
|
|
Packit Service |
1d8f1c |
NULL, /* no return value */
|
|
Packit Service |
1d8f1c |
ibus_bus_preload_engines_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_preload_engines_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_assert (g_task_get_source_tag (task) == ibus_bus_preload_engines_async);
|
|
Packit Service |
1d8f1c |
return _async_finish_void (task, error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *
|
|
Packit Service |
1d8f1c |
ibus_bus_get_ibus_property (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *property_name)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
GVariant *retval = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_BUS (bus), NULL);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (property_name != NULL, NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.DBus.Properties",
|
|
Packit Service |
1d8f1c |
"Get",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(ss)",
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
property_name),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(v)"));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(v)", &retval);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return retval;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_get_ibus_property_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *property_name,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (property_name != NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.DBus.Properties",
|
|
Packit Service |
1d8f1c |
"Get",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(ss)",
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
property_name),
|
|
Packit Service |
1d8f1c |
G_VARIANT_TYPE ("(v)"),
|
|
Packit Service |
1d8f1c |
ibus_bus_get_ibus_property_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *
|
|
Packit Service |
1d8f1c |
ibus_bus_get_ibus_property_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
gboolean had_error;
|
|
Packit Service |
1d8f1c |
GVariant *result = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
had_error = g_task_had_error (task);
|
|
Packit Service |
1d8f1c |
result = g_task_propagate_pointer (task, error);
|
|
Packit Service |
1d8f1c |
if (had_error) {
|
|
Packit Service |
1d8f1c |
g_assert (result == NULL);
|
|
Packit Service |
1d8f1c |
return NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (result != NULL, NULL);
|
|
Packit Service |
1d8f1c |
GVariant *retval = NULL;
|
|
Packit Service |
1d8f1c |
g_variant_get (result, "(v)", &retval);
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return retval;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_set_ibus_property (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *property_name,
|
|
Packit Service |
1d8f1c |
GVariant *value)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (property_name != NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
result = ibus_bus_call_sync (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.DBus.Properties",
|
|
Packit Service |
1d8f1c |
"Set",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(ssv)",
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
property_name,
|
|
Packit Service |
1d8f1c |
value),
|
|
Packit Service |
1d8f1c |
NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result) {
|
|
Packit Service |
1d8f1c |
g_variant_unref (result);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_bus_set_ibus_property_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *property_name,
|
|
Packit Service |
1d8f1c |
GVariant *value,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (property_name != NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (bus,
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_IBUS,
|
|
Packit Service |
1d8f1c |
IBUS_PATH_IBUS,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.DBus.Properties",
|
|
Packit Service |
1d8f1c |
"Set",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(ssv)",
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_IBUS,
|
|
Packit Service |
1d8f1c |
property_name,
|
|
Packit Service |
1d8f1c |
value),
|
|
Packit Service |
1d8f1c |
NULL, /* no return value */
|
|
Packit Service |
1d8f1c |
ibus_bus_set_ibus_property_async,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
callback,
|
|
Packit Service |
1d8f1c |
user_data);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_bus_set_ibus_property_async_finish (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (g_task_is_valid (res, bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = G_TASK (res);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (
|
|
Packit Service |
1d8f1c |
g_task_get_source_tag (task) == ibus_bus_set_ibus_property_async,
|
|
Packit Service |
1d8f1c |
FALSE);
|
|
Packit Service |
1d8f1c |
return _async_finish_void (task, error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static GVariant *
|
|
Packit Service |
1d8f1c |
ibus_bus_call_sync (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *bus_name,
|
|
Packit Service |
1d8f1c |
const gchar *path,
|
|
Packit Service |
1d8f1c |
const gchar *interface,
|
|
Packit Service |
1d8f1c |
const gchar *member,
|
|
Packit Service |
1d8f1c |
GVariant *parameters,
|
|
Packit Service |
1d8f1c |
const GVariantType *reply_type)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (member != NULL);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (ibus_bus_is_connected (bus), NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (bus->priv->use_portal &&
|
|
Packit Service |
1d8f1c |
g_strcmp0 (bus_name, IBUS_SERVICE_IBUS) == 0) {
|
|
Packit Service |
1d8f1c |
bus_name = IBUS_SERVICE_PORTAL;
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (interface, IBUS_INTERFACE_IBUS) == 0)
|
|
Packit Service |
1d8f1c |
interface = IBUS_INTERFACE_PORTAL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GError *error = NULL;
|
|
Packit Service |
1d8f1c |
GVariant *result;
|
|
Packit Service |
1d8f1c |
result = g_dbus_connection_call_sync (bus->priv->connection,
|
|
Packit Service |
1d8f1c |
bus_name,
|
|
Packit Service |
1d8f1c |
path,
|
|
Packit Service |
1d8f1c |
interface,
|
|
Packit Service |
1d8f1c |
member,
|
|
Packit Service |
1d8f1c |
parameters,
|
|
Packit Service |
1d8f1c |
reply_type,
|
|
Packit Service |
1d8f1c |
G_DBUS_CALL_FLAGS_NO_AUTO_START,
|
|
Packit Service |
1d8f1c |
ibus_get_timeout (),
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
&error);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (result == NULL) {
|
|
Packit Service |
1d8f1c |
g_warning ("ibus_bus_call_sync: %s.%s: %s", interface, member, error->message);
|
|
Packit Service |
1d8f1c |
g_error_free (error);
|
|
Packit Service |
1d8f1c |
return NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return result;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async_done (GDBusConnection *connection,
|
|
Packit Service |
1d8f1c |
GAsyncResult *res,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
GError *error = NULL;
|
|
Packit Service |
1d8f1c |
GVariant *variant;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (G_IS_DBUS_CONNECTION (connection));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = (GTask* ) user_data;
|
|
Packit Service |
1d8f1c |
variant = g_dbus_connection_call_finish (connection, res, &error);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (variant == NULL)
|
|
Packit Service |
1d8f1c |
g_task_return_error (task, error);
|
|
Packit Service |
1d8f1c |
else
|
|
Packit Service |
1d8f1c |
g_task_return_pointer (task, variant, (GDestroyNotify) g_variant_unref);
|
|
Packit Service |
1d8f1c |
g_object_unref (task);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_bus_call_async (IBusBus *bus,
|
|
Packit Service |
1d8f1c |
const gchar *bus_name,
|
|
Packit Service |
1d8f1c |
const gchar *path,
|
|
Packit Service |
1d8f1c |
const gchar *interface,
|
|
Packit Service |
1d8f1c |
const gchar *member,
|
|
Packit Service |
1d8f1c |
GVariant *parameters,
|
|
Packit Service |
1d8f1c |
const GVariantType *reply_type,
|
|
Packit Service |
1d8f1c |
gpointer source_tag,
|
|
Packit Service |
1d8f1c |
gint timeout_msec,
|
|
Packit Service |
1d8f1c |
GCancellable *cancellable,
|
|
Packit Service |
1d8f1c |
GAsyncReadyCallback callback,
|
|
Packit Service |
1d8f1c |
gpointer user_data)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GTask *task;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_BUS (bus));
|
|
Packit Service |
1d8f1c |
g_assert (member != NULL);
|
|
Packit Service |
1d8f1c |
g_return_if_fail (ibus_bus_is_connected (bus));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
task = g_task_new (bus, cancellable, callback, user_data);
|
|
Packit Service |
1d8f1c |
g_task_set_source_tag (task, source_tag);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (bus->priv->use_portal &&
|
|
Packit Service |
1d8f1c |
g_strcmp0 (bus_name, IBUS_SERVICE_IBUS) == 0) {
|
|
Packit Service |
1d8f1c |
bus_name = IBUS_SERVICE_PORTAL;
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (interface, IBUS_INTERFACE_IBUS) == 0)
|
|
Packit Service |
1d8f1c |
interface = IBUS_INTERFACE_PORTAL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_dbus_connection_call (bus->priv->connection,
|
|
Packit Service |
1d8f1c |
bus_name,
|
|
Packit Service |
1d8f1c |
path,
|
|
Packit Service |
1d8f1c |
interface,
|
|
Packit Service |
1d8f1c |
member,
|
|
Packit Service |
1d8f1c |
parameters,
|
|
Packit Service |
1d8f1c |
reply_type,
|
|
Packit Service |
1d8f1c |
G_DBUS_CALL_FLAGS_NO_AUTO_START,
|
|
Packit Service |
1d8f1c |
timeout_msec,
|
|
Packit Service |
1d8f1c |
cancellable,
|
|
Packit Service |
1d8f1c |
(GAsyncReadyCallback) ibus_bus_call_async_done,
|
|
Packit Service |
1d8f1c |
task);
|
|
Packit Service |
1d8f1c |
}
|