2
* Copyright (C) 2010 Intel Corporation
3
* Copyright (C) 2012 One Laptop per Child Association
5
* Author: Raymond Liu <raymond.li@intel.com>
7
* This library is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public License
9
* version 2.1 as published by the Free Software Foundation.
11
* This library is distributed in the hope that it will be useful, but
12
* 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 Free Software
18
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
26
#include "meego-imcontext-dbus.h"
29
#include "maliitmarshalers.h"
31
#include <dbus/dbus-glib.h>
33
#define MEEGO_IMCONTEXT_DBUSOBJ_SERVICE_OBJECT_PATH "/com/meego/inputmethod/inputcontext"
35
G_DEFINE_TYPE(MeegoIMContextDbusObj, meego_imcontext_dbusobj, G_TYPE_OBJECT);
37
#include "meego-imcontext-dbus-private.h"
40
ACTIVATION_LOST_EVENT,
45
UPDATE_INPUT_METHOD_AREA,
46
SET_GLOBAL_CORRECTION,
51
SET_DETECTABLE_AUTO_REPEAT,
55
NOTIFY_EXTENDED_ATTRIBUTE_CHANGED,
56
PLUGIN_SETTINGS_LOADED,
60
static guint imcontext_signals[LAST_SIGNAL] = { 0 };
62
#include "meego-imcontext-dbus-glue.h"
66
meego_imcontext_dbusobj_init(MeegoIMContextDbusObj *obj)
69
g_assert(obj != NULL);
74
meego_imcontext_dbusobj_class_init(MeegoIMContextDbusObjClass *klass)
76
g_assert(klass != NULL);
78
dbus_g_object_type_install_info(MEEGO_IMCONTEXT_TYPE_DBUSOBJ,
79
&dbus_glib_meego_imcontext_dbus_object_info);
81
imcontext_signals[ACTIVATION_LOST_EVENT] = g_signal_new("activation-lost-event",
82
G_TYPE_FROM_CLASS(klass),
86
g_cclosure_marshal_VOID__VOID,
88
imcontext_signals[IM_INITIATED_HIDE] = g_signal_new("im-initiated-hide",
89
G_TYPE_FROM_CLASS(klass),
93
g_cclosure_marshal_VOID__VOID,
95
imcontext_signals[COMMIT_STRING] = g_signal_new("commit-string",
96
G_TYPE_FROM_CLASS(klass),
100
_maliit_marshal_VOID__STRING_INT_INT_INT,
106
imcontext_signals[UPDATE_PREEDIT] = g_signal_new("update-preedit",
107
G_TYPE_FROM_CLASS(klass),
111
_maliit_marshal_VOID__STRING_BOXED_INT_INT_INT,
118
imcontext_signals[KEY_EVENT] = g_signal_new("key-event",
119
G_TYPE_FROM_CLASS(klass),
123
_maliit_marshal_VOID__INT_INT_INT_STRING_BOOLEAN_INT,
131
imcontext_signals[UPDATE_INPUT_METHOD_AREA] = g_signal_new("update-input-method-area",
132
G_TYPE_FROM_CLASS(klass),
136
_maliit_marshal_VOID__INT_INT_INT_INT,
142
imcontext_signals[SET_GLOBAL_CORRECTION] = g_signal_new("set-global-correction",
143
G_TYPE_FROM_CLASS(klass),
147
g_cclosure_marshal_VOID__BOOLEAN,
150
imcontext_signals[PREEDIT_RECTANGLE] = g_signal_new("preedit-rectangle",
151
G_TYPE_FROM_CLASS(klass),
155
_maliit_marshal_BOXED__VOID,
156
G_TYPE_PTR_ARRAY, 0);
157
imcontext_signals[COPY] = g_signal_new("copy",
158
G_TYPE_FROM_CLASS(klass),
162
g_cclosure_marshal_VOID__VOID,
164
imcontext_signals[PASTE] = g_signal_new("paste",
165
G_TYPE_FROM_CLASS(klass),
169
g_cclosure_marshal_VOID__VOID,
171
imcontext_signals[SET_REDIRECT_KEYS] = g_signal_new("set-redirect-keys",
172
G_TYPE_FROM_CLASS(klass),
176
g_cclosure_marshal_VOID__BOOLEAN,
179
imcontext_signals[SET_DETECTABLE_AUTO_REPEAT] = g_signal_new("set-detectable-auto-repeat",
180
G_TYPE_FROM_CLASS(klass),
184
g_cclosure_marshal_VOID__BOOLEAN,
187
imcontext_signals[SET_SELECTION] = g_signal_new("set-selection",
188
G_TYPE_FROM_CLASS(klass),
192
_maliit_marshal_VOID__INT_INT,
196
imcontext_signals[SELECTION] = g_signal_new("selection",
197
G_TYPE_FROM_CLASS(klass),
201
_maliit_marshal_STRING__VOID,
203
imcontext_signals[SET_LANGUAGE] = g_signal_new("set-language",
204
G_TYPE_FROM_CLASS(klass),
208
g_cclosure_marshal_VOID__STRING,
211
imcontext_signals[NOTIFY_EXTENDED_ATTRIBUTE_CHANGED] = g_signal_new("notify-extended-attribute-changed",
212
G_TYPE_FROM_CLASS(klass),
216
_maliit_marshal_VOID__INT_STRING_STRING_STRING_VARIANT,
224
imcontext_signals[PLUGIN_SETTINGS_LOADED] =
225
g_signal_new ("plugin-settings-loaded",
226
G_TYPE_FROM_CLASS(klass),
231
g_cclosure_marshal_VOID__BOXED,
238
meego_imcontext_dbusobj_connect(MeegoIMContextDbusObj *obj, gpointer connection)
240
DBusGConnection *dbus_connection = (DBusGConnection *)connection;
241
g_return_if_fail(dbus_connection != NULL);
243
dbus_g_connection_register_g_object(dbus_connection,
244
MEEGO_IMCONTEXT_DBUSOBJ_SERVICE_OBJECT_PATH,
248
MeegoIMContextDbusObj *
249
meego_imcontext_dbusobj_new(void)
251
return g_object_new(MEEGO_IMCONTEXT_TYPE_DBUSOBJ, NULL);
256
meego_imcontext_dbus_activation_lost_event(MeegoIMContextDbusObj *obj, GError **error)
260
g_signal_emit(obj, imcontext_signals[ACTIVATION_LOST_EVENT], 0);
267
meego_imcontext_dbus_im_initiated_hide(MeegoIMContextDbusObj *obj, GError **error)
271
g_signal_emit(obj, imcontext_signals[IM_INITIATED_HIDE], 0);
278
meego_imcontext_dbus_commit_string(MeegoIMContextDbusObj *obj, char *string, gint replacement_start,
279
int replacement_length, int cursor_pos, GError **error)
283
DBG("commit string: %s", string);
285
g_signal_emit(obj, imcontext_signals[COMMIT_STRING], 0, string, replacement_start, replacement_length, cursor_pos);
292
meego_imcontext_dbus_update_preedit(MeegoIMContextDbusObj *obj, const char *string, GPtrArray *formatListData, gint32 replaceStart, gint32 replaceLength, gint32 cursorPos, GError **error)
296
DBG("preedit string: %s", string);
298
g_signal_emit(obj, imcontext_signals[UPDATE_PREEDIT], 0, string, formatListData, replaceStart, replaceLength, cursorPos);
305
meego_imcontext_dbus_key_event(MeegoIMContextDbusObj *obj, int type, int key, int modifiers, char *text,
306
gboolean auto_repeat, int count, GError **error)
310
DBG("type=0x%x, key=0x%x, modifiers=0x%x, text = %s, auto_repeat=%d, count=%d",
311
type, key, modifiers, text, auto_repeat, count);
313
g_signal_emit(obj, imcontext_signals[KEY_EVENT], 0, type, key, modifiers, text, auto_repeat, count);
319
meego_imcontext_dbus_update_input_method_area(MeegoIMContextDbusObj *obj, int x, int y, int width, int height, GError **error G_GNUC_UNUSED)
323
g_signal_emit(obj, imcontext_signals[UPDATE_INPUT_METHOD_AREA], 0, x, y, width, height);
330
meego_imcontext_dbus_set_global_correction_enabled(MeegoIMContextDbusObj *obj, gboolean correction, GError **error)
334
// TODO emit SET_GLOBAL_CORRECTION signal
340
meego_imcontext_dbus_set_redirect_keys(MeegoIMContextDbusObj *obj, gboolean enabled, GError **error)
346
g_signal_emit(obj, imcontext_signals[SET_REDIRECT_KEYS], 0, enabled);
353
meego_imcontext_dbus_preedit_rectangle(MeegoIMContextDbusObj *obj, GValueArray **rect, gboolean *valid, GError **error)
357
// TODO emit PREEDIT_RECTANGLE signal
363
meego_imcontext_dbus_set_detectable_auto_repeat(MeegoIMContextDbusObj *obj, gboolean enabled, GError **error)
367
// TODO emit SET_DETECTABLE_AUTO_REPEAT signal
373
meego_imcontext_dbus_set_selection(MeegoIMContextDbusObj *obj, int start, int length, GError **error)
377
// TODO emit SET_SELECTION signal
383
meego_imcontext_dbus_selection(MeegoIMContextDbusObj *obj, gboolean *valid, gchar **gdata, GError **error)
387
// TODO emit SELECTION signal
393
meego_imcontext_dbus_set_language (MeegoIMContextDbusObj *obj,
394
const gchar *language_id,
400
g_signal_emit(obj, imcontext_signals[SET_LANGUAGE], 0, language_id);
406
meego_imcontext_dbus_notify_extended_attribute_changed (MeegoIMContextDbusObj *obj,
409
const gchar *target_item,
417
GVariant *variant_value = dbus_g_value_build_g_variant (value);
420
if (g_variant_is_floating (variant_value)) {
421
g_variant_ref_sink (variant_value);
424
g_signal_emit(obj, imcontext_signals[NOTIFY_EXTENDED_ATTRIBUTE_CHANGED], 0, id, target, target_item, key, variant_value);
426
g_variant_unref (variant_value);
431
g_warning ("Unknown data type: %s", G_VALUE_TYPE_NAME (value));
437
meego_imcontext_dbus_plugin_settings_loaded (MeegoIMContextDbusObj *obj,
438
GPtrArray *settings_data,
439
GError **error G_GNUC_UNUSED)
441
g_signal_emit(obj, imcontext_signals[PLUGIN_SETTINGS_LOADED], 0, settings_data);