1 /* vim:set et sts=4: */
2 /* ibus - The Input Bus
3 * Copyright (C) 2008-2010 Peng Huang <shawn.p.huang@gmail.com>
4 * Copyright (C) 2008-2010 Red Hat, Inc.
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
23 * @short_description: Base proxy object.
26 * An IBusProxy is the base of all proxy objects,
27 * which communicate the corresponding #IBusServices on the other end of IBusConnection.
28 * For example, IBus clients (such as editors, web browsers) invoke the proxy object,
29 * IBusInputContext to communicate with the InputContext service of the ibus-daemon.
31 * Almost all services have corresponding proxies, except very simple services.
33 #ifndef __IBUS_PROXY_H_
34 #define __IBUS_PROXY_H_
36 #include <dbus/dbus.h>
37 #include "ibusobject.h"
38 #include "ibusconnection.h"
39 #include "ibusmessage.h"
45 /* define GOBJECT macros */
46 #define IBUS_TYPE_PROXY \
47 (ibus_proxy_get_type ())
48 #define IBUS_PROXY(obj) \
49 (G_TYPE_CHECK_INSTANCE_CAST ((obj), IBUS_TYPE_PROXY, IBusProxy))
50 #define IBUS_PROXY_CLASS(klass) \
51 (G_TYPE_CHECK_CLASS_CAST ((klass), IBUS_TYPE_PROXY, IBusProxyClass))
52 #define IBUS_IS_PROXY(obj) \
53 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), IBUS_TYPE_PROXY))
54 #define IBUS_IS_PROXY_CLASS(klass) \
55 (G_TYPE_CHECK_CLASS_TYPE ((klass), IBUS_TYPE_PROXY))
56 #define IBUS_PROXY_GET_CLASS(obj) \
57 (G_TYPE_INSTANCE_GET_CLASS ((obj), IBUS_TYPE_PROXY, IBusProxyClass))
61 typedef struct _IBusProxy IBusProxy;
62 typedef struct _IBusProxyClass IBusProxyClass;
67 * An opaque data type representing an IBusProxy.
71 /* instance members */
74 struct _IBusProxyClass {
75 IBusObjectClass parent;
78 gboolean (* ibus_signal) (IBusProxy *proxy,
79 IBusMessage *message);
85 GType ibus_proxy_get_type (void);
89 * @name: The service name of proxy object.
90 * @path: The path of proxy object.
91 * @connection: An IBusConnection.
92 * @returns: A newly allocated IBusProxy instance.
94 * New an IBusProxy instance.
95 * Property IBusProxy:name is set as @name, and
96 * IBusProxy:path is set as @path.
98 IBusProxy *ibus_proxy_new (const gchar *name,
100 IBusConnection *connection);
104 * @proxy: An IBusProxy.
105 * @message: The IBusMessage to be sent.
106 * @returns: TRUE if succeed; FALSE otherwise.
108 * Send an #IBusMessage to the corresponding service.
110 * @see_also ibus_proxy_call(), ibus_proxy_send_with_reply(), ibus_proxy_send_with_reply_and_block().
112 gboolean ibus_proxy_send (IBusProxy *proxy,
113 IBusMessage *message);
117 * @proxy: An IBusProxy.
118 * @method: The method to be called.
119 * @first_arg_type: Type of first argument.
120 * @...: Rest of arguments, NULL to mark the end.
121 * @returns: TRUE if succeed; FALSE otherwise.
123 * Call a method of the corresponding service.
125 * @see_also ibus_proxy_send(), ibus_proxy_call_with_reply(), ibus_proxy_call_with_reply_and_block().
127 gboolean ibus_proxy_call (IBusProxy *proxy,
129 GType first_arg_type,
133 * ibus_proxy_call_with_reply:
134 * @proxy: An IBusProxy.
135 * @method: The method to be called.
136 * @pending: Return location of a IBusPendingCall object, or NULL if connection is disconnected.
137 * @timeout_milliseconds: Time out in milliseconds.
138 * @error: Returned error is stored here; NULL to ignore error.
139 * @first_arg_type: Type of first argument.
140 * @...: Rest of arguments, NULL to mark the end.
141 * @returns: TRUE if succeed; FALSE otherwise.
143 * Call a method of the corresponding service, and returns an IBusPendingCall used to receive a reply to the message.
144 * This function calls ibus_connection_send_with_reply() to do the actual sending.
146 * @see_also: ibus_connection_send_with_reply(),
147 * @see_also: ibus_proxy_call(), ibus_proxy_send_with_reply(), ibus_proxy_call_with_reply_and_block().
149 gboolean ibus_proxy_call_with_reply (IBusProxy *proxy,
151 IBusPendingCall **pending,
152 gint timeout_milliseconds,
154 GType first_arg_type,
158 * ibus_proxy_call_with_reply_and_block:
159 * @proxy: An IBusProxy.
160 * @method: The method to be called.
161 * @timeout_milliseconds: Time out in milliseconds.
162 * @error: Returned error is stored here; NULL to ignore error.
163 * @first_arg_type: Type of first argument.
164 * @...: Rest of arguments, NULL to mark the end.
165 * @returns: An IBusMessage that is the reply or NULL with an error code if the function fails.
167 * Call a method of the corresponding service and blocks a certain time period while waiting for
168 * an IBusMessage as reply.
169 * If the IBusMessage is not NULL, it calls ibus_connection_send_with_reply_and_block() to do the
172 * @see_also: ibus_connection_send_with_reply_and_block(),
173 * @see_also: ibus_proxy_call(), ibus_proxy_send_with_reply(), ibus_proxy_call_with_reply_and_block().
175 IBusMessage *ibus_proxy_call_with_reply_and_block
178 gint timeout_milliseconds,
180 GType first_arg_type,
184 * ibus_proxy_send_with_reply:
185 * @proxy: An IBusProxy.
186 * @message: The IBusMessage to be sent.
187 * @pending: Return location of a IBusPendingCall object, or NULL if connection is disconnected.
188 * @timeout_milliseconds: Time out in milliseconds.
189 * @returns: TRUE if succeed; FALSE otherwise.
191 * Send an IBusMessage to the corresponding service and returns
192 * an IBusPendingCall used to receive a reply to the message.
193 * This function calls ibus_connection_send_with_reply() to do the actual sending.
195 * @see_also: ibus_connection_send_with_reply(),
196 * @see_also: ibus_proxy_send(), ibus_proxy_call_with_reply(), ibus_proxy_send_with_reply_and_block().
198 gboolean ibus_proxy_send_with_reply (IBusProxy *proxy,
199 IBusMessage *message,
200 IBusPendingCall **pending,
201 gint timeout_milliseconds);
204 * ibus_proxy_send_with_reply_and_block:
205 * @proxy: An IBusProxy.
206 * @message: The IBusMessage to be sent.
207 * @returns: An IBusMessage that is the reply or NULL with an error code if the function fails.
209 * Send an IBusMessage to the corresponding service and blocks a certain time period while waiting for
210 * an IBusMessage as reply.
211 * If the IBusMessage is not NULL, it calls ibus_connection_send_with_reply_and_block() to do the
214 * @see_also: ibus_connection_send_with_reply_and_block(),
215 * @see_also: ibus_proxy_send(), ibus_proxy_send_with_reply(), ibus_proxy_call_with_reply_and_block().
217 IBusMessage *ibus_proxy_send_with_reply_and_block
219 IBusMessage *message);
222 * ibus_proxy_handle_signal:
223 * @proxy: An IBusProxy.
224 * @message: The IBusMessage to be sent.
225 * @returns: TRUE if succeed; FALSE otherwise.
227 * Handle a signal by emitting IBusProxy::ibus-signal.
229 * If signal name is <constant>NameOwnerChanged</constant>
230 * and the service name is identical to the old name, then
231 * @proxy will be destroyed by ibus_object_destroy () and FALSE is returned.
232 * Otherwise TRUE is returned.
234 * Note that if the path of of message is not identical to the IBusProxy:path
235 * this function will not emit IBusProxy::ibus-signal.
238 gboolean ibus_proxy_handle_signal (IBusProxy *proxy,
239 IBusMessage *message);
242 * ibus_proxy_get_name:
243 * @proxy: An IBusProxy.
244 * @returns: The service name of the proxy object.
246 * Get the service name of a proxy object.
248 const gchar *ibus_proxy_get_name (IBusProxy *proxy);
251 * ibus_proxy_get_unique_name:
252 * @proxy: An IBusProxy.
253 * @returns: The service name of the proxy object.
255 * Get the unique name of the proxy object.
257 const gchar *ibus_proxy_get_unique_name (IBusProxy *proxy);
260 * ibus_proxy_get_path:
261 * @proxy: An IBusProxy.
262 * @returns: The path of proxy object.
264 * Get the path of a proxy object.
266 const gchar *ibus_proxy_get_path (IBusProxy *proxy);
269 * ibus_proxy_get_interface:
270 * @proxy: An IBusProxy.
271 * @returns: The service name of the proxy object.
273 * Get interface of a proxy object.
275 const gchar *ibus_proxy_get_interface (IBusProxy *proxy);
278 * ibus_proxy_get_connection:
279 * @proxy: An IBusProxy.
280 * @returns: The connection of the proxy object.
282 * Get the connection of a proxy object.
284 IBusConnection *ibus_proxy_get_connection (IBusProxy *proxy);