1
/* * This file is part of Maliit framework *
3
* Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
6
* Contact: maliit-discuss@lists.maliit.org
8
* This library is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License version 2.1 as published by the Free Software Foundation
11
* and appearing in the file LICENSE.LGPL included in the packaging
15
#include "mdbusglibinputcontextadaptor.h"
16
#include "mimserverconnection.h"
17
#include <maliit/settingdata.h>
19
#include <variantmarshalling.h>
21
#include <dbus/dbus.h>
23
G_DEFINE_TYPE(MDBusGlibInputContextAdaptor, m_dbus_glib_input_context_adaptor, G_TYPE_OBJECT)
26
static gboolean m_dbus_glib_input_context_adaptor_activation_lost_event(
27
MDBusGlibInputContextAdaptor *obj, GError **/*error*/)
29
Q_EMIT obj->imServerConnection->activationLostEvent();
33
static gboolean m_dbus_glib_input_context_adaptor_im_initiated_hide(
34
MDBusGlibInputContextAdaptor *obj, GError **/*error*/)
36
Q_EMIT obj->imServerConnection->imInitiatedHide();
40
static gboolean m_dbus_glib_input_context_adaptor_commit_string(
41
MDBusGlibInputContextAdaptor *obj, const char *string, gint32 replaceStart,
42
gint32 replaceLength, gint32 cursorPos, GError **/*error*/)
44
Q_EMIT obj->imServerConnection->commitString(QString::fromUtf8(string), replaceStart,
45
replaceLength, cursorPos);
49
QDataStream &operator>>(QDataStream &s, Maliit::PreeditTextFormat &t)
55
t.preeditFace = static_cast<Maliit::PreeditFace>(preeditFace);
59
static gboolean m_dbus_glib_input_context_adaptor_update_preedit(MDBusGlibInputContextAdaptor *obj,
61
GPtrArray *formatListData,
64
gint32 cursorPos, GError **/*error*/)
66
QList<Maliit::PreeditTextFormat> formatList;
67
for (guint i = 0; i < formatListData->len; ++i) {
68
GValueArray *itemData = ((GValueArray**)formatListData->pdata)[i];
69
formatList.push_back(Maliit::PreeditTextFormat(
70
g_value_get_int(g_value_array_get_nth(itemData, 0)),
71
g_value_get_int(g_value_array_get_nth(itemData, 1)),
73
g_value_get_int(g_value_array_get_nth(itemData, 2)))));
75
Q_EMIT obj->imServerConnection->updatePreedit(QString::fromUtf8(string),
83
static gboolean m_dbus_glib_input_context_adaptor_key_event(
84
MDBusGlibInputContextAdaptor *obj, gint32 type, gint32 key, gint32 modifiers, const char *text,
85
gboolean autoRepeat, gint32 count, guchar requestType, GError **/*error*/)
87
Q_EMIT obj->imServerConnection->keyEvent(type, key, modifiers, QString::fromUtf8(text),
88
autoRepeat == TRUE, count,
89
static_cast<Maliit::EventRequestType>(requestType));
93
static gboolean m_dbus_glib_input_context_adaptor_update_input_method_area(
94
MDBusGlibInputContextAdaptor *obj,
95
gint32 left, gint32 top, gint32 width, gint32 height,
98
Q_EMIT obj->imServerConnection->updateInputMethodArea(QRect(left, top, width, height));
102
static gboolean m_dbus_glib_input_context_adaptor_set_global_correction_enabled(
103
MDBusGlibInputContextAdaptor *obj, gboolean value, GError **/*error*/)
105
Q_EMIT obj->imServerConnection->setGlobalCorrectionEnabled(value == TRUE);
109
static gboolean m_dbus_glib_input_context_adaptor_preedit_rectangle(
110
MDBusGlibInputContextAdaptor *obj, gboolean *valid, gint *x, gint *y,
111
gint *width, gint *height, GError **/*error*/)
113
bool deserializedValidity;
115
Q_EMIT obj->imServerConnection->getPreeditRectangle(rect, deserializedValidity);
116
*valid = deserializedValidity ? TRUE : FALSE;
119
*width = rect.width();
120
*height = rect.height();
124
static gboolean m_dbus_glib_input_context_adaptor_set_redirect_keys(
125
MDBusGlibInputContextAdaptor *obj, gboolean enabled, GError **/*error*/)
127
Q_EMIT obj->imServerConnection->setRedirectKeys(enabled == TRUE);
131
static gboolean m_dbus_glib_input_context_adaptor_set_detectable_auto_repeat(
132
MDBusGlibInputContextAdaptor *obj, gboolean enabled, GError **/*error*/)
134
Q_EMIT obj->imServerConnection->setDetectableAutoRepeat(enabled == TRUE);
138
static gboolean m_dbus_glib_input_context_adaptor_set_selection(MDBusGlibInputContextAdaptor *obj,
139
gint32 start, gint32 length, GError **/*error*/)
141
Q_EMIT obj->imServerConnection->setSelection(start,length);
145
static gboolean m_dbus_glib_input_context_adaptor_selection(
146
MDBusGlibInputContextAdaptor *obj, gboolean *valid, gchar **gdata, GError **/*error*/)
150
Q_EMIT obj->imServerConnection->getSelection(selection, validity);
151
*valid = validity ? TRUE : FALSE;
154
if (validity && !selection.isEmpty()) {
155
*gdata = g_strdup(selection.toUtf8().data());
160
static gboolean m_dbus_glib_input_context_adaptor_set_language(
161
MDBusGlibInputContextAdaptor *obj, const char *string,
164
Q_EMIT obj->imServerConnection->setLanguage(QString::fromUtf8(string));
168
static gboolean m_dbus_glib_input_context_adaptor_notify_extended_attribute_changed(
169
MDBusGlibInputContextAdaptor *obj,
172
const char *targetItem,
173
const char *attribute,
178
QString error_message;
179
if (decodeVariant(&value, valueData, &error_message)) {
180
Q_EMIT obj->imServerConnection->extendedAttributeChanged(static_cast<int>(id),
181
QString::fromUtf8(target),
182
QString::fromUtf8(targetItem),
183
QString::fromUtf8(attribute),
186
qWarning() << "notify_extended_attribute_changed.arg[4]" + error_message;
191
static gboolean m_dbus_glib_input_context_adaptor_plugin_settings_loaded(MDBusGlibInputContextAdaptor *obj,
192
GPtrArray *settingsData, GError **/*error*/)
194
QList<MImPluginSettingsInfo> settings;
195
for (guint i = 0; i < settingsData->len; ++i) {
196
GValueArray *plugin_data = ((GValueArray**)settingsData->pdata)[i];
197
MImPluginSettingsInfo plugin;
198
GPtrArray *entries_data = (GPtrArray *)g_value_get_boxed(g_value_array_get_nth(plugin_data, 4));
200
plugin.description_language = QString::fromUtf8(g_value_get_string(g_value_array_get_nth(plugin_data, 0)));
201
plugin.plugin_name = QString::fromUtf8(g_value_get_string(g_value_array_get_nth(plugin_data, 1)));
202
plugin.plugin_description = QString::fromUtf8(g_value_get_string(g_value_array_get_nth(plugin_data, 2)));
203
plugin.extension_id = g_value_get_int(g_value_array_get_nth(plugin_data, 3));
205
for (guint i = 0; i < entries_data->len; ++i) {
206
GValueArray *entry_data = ((GValueArray**)entries_data->pdata)[i];
207
MImPluginSettingsEntry entry;
209
QString error_message;
210
if (!decodeVariantMap(&entry.attributes, (GHashTable *)g_value_get_boxed(g_value_array_get_nth(entry_data, 5)), &error_message)) {
211
qWarning() << "m_dbus_glib_input_context_adaptor_plugin_settings_loaded entry attributes:" + error_message;
216
entry.description = QString::fromUtf8(g_value_get_string(g_value_array_get_nth(entry_data, 0)));
217
entry.extension_key = QString::fromUtf8(g_value_get_string(g_value_array_get_nth(entry_data, 1)));
218
entry.type = static_cast<Maliit::SettingEntryType>(g_value_get_int(g_value_array_get_nth(entry_data, 2)));
220
bool valid = g_value_get_boolean(g_value_array_get_nth(entry_data, 3));
223
entry.value = QVariant();
224
} else if (!decodeVariant(&entry.value, g_value_array_get_nth(entry_data, 4), &error_message)) {
225
qWarning() << "m_dbus_glib_input_context_adaptor_plugin_settings_loaded entry value:" + error_message;
229
plugin.entries.append(entry);
232
settings.append(plugin);
234
Q_EMIT obj->imServerConnection->pluginSettingsReceived(settings);
239
#include "mdbusglibinputcontextadaptorglue.h"
242
m_dbus_glib_input_context_adaptor_init(MDBusGlibInputContextAdaptor */*obj*/)
247
m_dbus_glib_input_context_adaptor_class_init(MDBusGlibInputContextAdaptorClass */*klass*/)
249
dbus_g_object_type_install_info(M_TYPE_DBUS_GLIB_INPUT_CONTEXT_ADAPTOR, &dbus_glib_m_dbus_glib_input_context_adaptor_object_info);