Implement serialization to GVariant.

This commit is contained in:
Daiki Ueno
2011-02-14 14:13:02 +09:00
parent 11026923bd
commit 7916930160
23 changed files with 774 additions and 396 deletions

View File

@ -70,6 +70,7 @@ main (int argc, char **argv)
gint retval = 0;
g_type_init ();
g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL);
context = g_option_context_new ("eekboard-client");
g_option_context_add_main_entries (context, options, NULL);

View File

@ -21,8 +21,6 @@
#include "proxy.h"
#define BUFSIZE 8192
enum {
KEY_PRESSED,
KEY_RELEASED,
@ -150,17 +148,9 @@ proxy_call_async_ready_cb (GObject *source_object,
void
eekboard_proxy_set_keyboard (EekboardProxy *proxy, EekKeyboard *keyboard)
{
GString *output;
GVariant *variant;
gchar *data;
output = g_string_sized_new (BUFSIZE);
eek_keyboard_output (keyboard, output, 0);
data = g_string_free (output, FALSE);
variant = g_variant_new ("(s)", data);
g_free (data);
variant = eek_serializable_serialize (EEK_SERIALIZABLE(keyboard));
g_dbus_proxy_call (G_DBUS_PROXY(proxy),
"SetKeyboard",
g_variant_new ("(v)", variant),

View File

@ -50,6 +50,14 @@ main (int argc, char **argv)
}
#endif
g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL);
g_type_class_ref (EEK_TYPE_KEYBOARD);
g_type_class_ref (EEK_TYPE_SECTION);
g_type_class_ref (EEK_TYPE_KEY);
g_type_class_ref (EEK_TYPE_SYMBOL);
g_type_class_ref (EEK_TYPE_KEYSYM);
error = NULL;
connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
if (error) {

View File

@ -310,26 +310,21 @@ handle_method_call (GDBusConnection *connection,
// g_debug ("%s", method_name);
if (g_strcmp0 (method_name, "SetKeyboard") == 0) {
EekSerializable *serializable;
GVariant *variant;
gchar *data;
GInputStream *input;
EekLayout *layout;
g_variant_get (parameters, "(v)", &variant);
g_variant_get (variant, "(&s)", &data);
input = g_memory_input_stream_new_from_data (data, -1, NULL);
g_variant_unref (variant);
layout = eek_xml_layout_new (input);
if (!layout) {
serializable = eek_serializable_deserialize (variant);
if (!EEK_IS_KEYBOARD(serializable)) {
g_dbus_method_invocation_return_error (invocation,
G_IO_ERROR,
G_IO_ERROR_FAILED_HANDLED,
"can't create layout");
"not a keyboard");
return;
}
server->keyboard = eek_keyboard_new (layout, CSW, CSH);
server->keyboard = EEK_KEYBOARD(serializable);
disconnect_keyboard_signals (server);
server->key_pressed_handler =
g_signal_connect (server->keyboard, "key-pressed",