Implement serialization to GVariant.
This commit is contained in:
@ -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);
|
||||
|
||||
12
src/proxy.c
12
src/proxy.c
@ -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),
|
||||
|
||||
@ -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) {
|
||||
|
||||
17
src/server.c
17
src/server.c
@ -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",
|
||||
|
||||
Reference in New Issue
Block a user