Blame src/ibusenginedesc.c

Packit Service 1d8f1c
/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
Packit Service 1d8f1c
/* vim:set et sts=4: */
Packit Service 1d8f1c
/* bus - The Input Bus
Packit Service 1d8f1c
 * Copyright (C) 2008-2015 Peng Huang <shawn.p.huang@gmail.com>
Packit Service 1d8f1c
 * Copyright (C) 2008-2015 Red Hat, Inc.
Packit Service 1d8f1c
 *
Packit Service 1d8f1c
 * This library is free software; you can redistribute it and/or
Packit Service 1d8f1c
 * modify it under the terms of the GNU Lesser General Public
Packit Service 1d8f1c
 * License as published by the Free Software Foundation; either
Packit Service 1d8f1c
 * version 2.1 of the License, or (at your option) any later version.
Packit Service 1d8f1c
 *
Packit Service 1d8f1c
 * This library is distributed in the hope that it will be useful,
Packit Service 1d8f1c
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 1d8f1c
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 1d8f1c
 * Lesser General Public License for more details.
Packit Service 1d8f1c
 *
Packit Service 1d8f1c
 * You should have received a copy of the GNU Lesser General Public
Packit Service 1d8f1c
 * License along with this library; if not, write to the Free Software
Packit Service 1d8f1c
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
Packit Service 1d8f1c
 * USA
Packit Service 1d8f1c
 */
Packit Service 1d8f1c
#include <stdlib.h>
Packit Service 1d8f1c
#include "ibusenginedesc.h"
Packit Service 1d8f1c
#include "ibusinternal.h"
Packit Service 1d8f1c
#include "ibusxml.h"
Packit Service 1d8f1c
Packit Service 1d8f1c
enum {
Packit Service 1d8f1c
    LAST_SIGNAL,
Packit Service 1d8f1c
};
Packit Service 1d8f1c
Packit Service 1d8f1c
enum {
Packit Service 1d8f1c
    PROP_0 = 0,
Packit Service 1d8f1c
    PROP_NAME,
Packit Service 1d8f1c
    PROP_LONGNAME,
Packit Service 1d8f1c
    PROP_DESCRIPTION,
Packit Service 1d8f1c
    PROP_LANGUAGE,
Packit Service 1d8f1c
    PROP_LICENSE,
Packit Service 1d8f1c
    PROP_AUTHOR,
Packit Service 1d8f1c
    PROP_ICON,
Packit Service 1d8f1c
    PROP_LAYOUT,
Packit Service 1d8f1c
    PROP_LAYOUT_VARIANT,
Packit Service 1d8f1c
    PROP_LAYOUT_OPTION,
Packit Service 1d8f1c
    PROP_RANK,
Packit Service 1d8f1c
    PROP_HOTKEYS,
Packit Service 1d8f1c
    PROP_SYMBOL,
Packit Service 1d8f1c
    PROP_SETUP,
Packit Service 1d8f1c
    PROP_VERSION,
Packit Service 1d8f1c
    PROP_TEXTDOMAIN,
Packit Service 1d8f1c
    PROP_ICON_PROP_KEY
Packit Service 1d8f1c
};
Packit Service 1d8f1c
Packit Service 1d8f1c
Packit Service 1d8f1c
/* IBusEngineDescPriv */
Packit Service 1d8f1c
struct _IBusEngineDescPrivate {
Packit Service 1d8f1c
    gchar      *name;
Packit Service 1d8f1c
    gchar      *longname;
Packit Service 1d8f1c
    gchar      *description;
Packit Service 1d8f1c
    gchar      *language;
Packit Service 1d8f1c
    gchar      *license;
Packit Service 1d8f1c
    gchar      *author;
Packit Service 1d8f1c
    gchar      *icon;
Packit Service 1d8f1c
    gchar      *layout;
Packit Service 1d8f1c
    gchar      *layout_variant;
Packit Service 1d8f1c
    gchar      *layout_option;
Packit Service 1d8f1c
    guint       rank;
Packit Service 1d8f1c
    gchar      *hotkeys;
Packit Service 1d8f1c
    gchar      *symbol;
Packit Service 1d8f1c
    gchar      *setup;
Packit Service 1d8f1c
    gchar      *version;
Packit Service 1d8f1c
    gchar      *textdomain;
Packit Service 1d8f1c
    gchar      *icon_prop_key;
Packit Service 1d8f1c
};
Packit Service 1d8f1c
Packit Service 1d8f1c
#define IBUS_ENGINE_DESC_GET_PRIVATE(o)  \
Packit Service 1d8f1c
   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_ENGINE_DESC, IBusEngineDescPrivate))
Packit Service 1d8f1c
Packit Service 1d8f1c
// static guint            _signals[LAST_SIGNAL] = { 0 };
Packit Service 1d8f1c
Packit Service 1d8f1c
/* functions prototype */
Packit Service 1d8f1c
static void         ibus_engine_desc_set_property   (IBusEngineDesc         *desc,
Packit Service 1d8f1c
                                                     guint                   prop_id,
Packit Service 1d8f1c
                                                     const GValue           *value,
Packit Service 1d8f1c
                                                     GParamSpec             *pspec);
Packit Service 1d8f1c
static void         ibus_engine_desc_get_property   (IBusEngineDesc         *desc,
Packit Service 1d8f1c
                                                     guint                   prop_id,
Packit Service 1d8f1c
                                                     GValue                 *value,
Packit Service 1d8f1c
                                                     GParamSpec             *pspec);
Packit Service 1d8f1c
static void         ibus_engine_desc_destroy        (IBusEngineDesc         *desc);
Packit Service 1d8f1c
static gboolean     ibus_engine_desc_serialize      (IBusEngineDesc         *desc,
Packit Service 1d8f1c
                                                     GVariantBuilder        *builder);
Packit Service 1d8f1c
static gint         ibus_engine_desc_deserialize    (IBusEngineDesc         *desc,
Packit Service 1d8f1c
                                                     GVariant               *variant);
Packit Service 1d8f1c
static gboolean     ibus_engine_desc_copy           (IBusEngineDesc         *dest,
Packit Service 1d8f1c
                                                     const IBusEngineDesc   *src);
Packit Service 1d8f1c
static gboolean     ibus_engine_desc_parse_xml_node (IBusEngineDesc         *desc,
Packit Service 1d8f1c
                                                     XMLNode                *node);
Packit Service 1d8f1c
Packit Service 1d8f1c
G_DEFINE_TYPE (IBusEngineDesc, ibus_engine_desc, IBUS_TYPE_SERIALIZABLE)
Packit Service 1d8f1c
Packit Service 1d8f1c
Packit Service 1d8f1c
static void
Packit Service 1d8f1c
ibus_engine_desc_class_init (IBusEngineDescClass *class)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    GObjectClass *gobject_class = G_OBJECT_CLASS (class);
Packit Service 1d8f1c
    IBusObjectClass *object_class = IBUS_OBJECT_CLASS (class);
Packit Service 1d8f1c
    IBusSerializableClass *serializable_class = IBUS_SERIALIZABLE_CLASS (class);
Packit Service 1d8f1c
Packit Service 1d8f1c
    gobject_class->set_property = (GObjectSetPropertyFunc) ibus_engine_desc_set_property;
Packit Service 1d8f1c
    gobject_class->get_property = (GObjectGetPropertyFunc) ibus_engine_desc_get_property;
Packit Service 1d8f1c
    object_class->destroy = (IBusObjectDestroyFunc) ibus_engine_desc_destroy;
Packit Service 1d8f1c
Packit Service 1d8f1c
    serializable_class->serialize   = (IBusSerializableSerializeFunc) ibus_engine_desc_serialize;
Packit Service 1d8f1c
    serializable_class->deserialize = (IBusSerializableDeserializeFunc) ibus_engine_desc_deserialize;
Packit Service 1d8f1c
    serializable_class->copy        = (IBusSerializableCopyFunc) ibus_engine_desc_copy;
Packit Service 1d8f1c
Packit Service 1d8f1c
    g_type_class_add_private (class, sizeof (IBusEngineDescPrivate));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /* install properties */
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:name:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The name of engine description
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_NAME,
Packit Service 1d8f1c
                    g_param_spec_string ("name",
Packit Service 1d8f1c
                        "description name",
Packit Service 1d8f1c
                        "The name of engine description",
Packit Service 1d8f1c
                        NULL,
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:longname:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The longname of engine description
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_LONGNAME,
Packit Service 1d8f1c
                    g_param_spec_string ("longname",
Packit Service 1d8f1c
                        "description longname",
Packit Service 1d8f1c
                        "The longname of engine description",
Packit Service 1d8f1c
                        "",
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:description:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The description of engine description
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_DESCRIPTION,
Packit Service 1d8f1c
                    g_param_spec_string ("description",
Packit Service 1d8f1c
                        "description description",
Packit Service 1d8f1c
                        "The description of engine description",
Packit Service 1d8f1c
                        "",
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:language:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The language of engine description
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_LANGUAGE,
Packit Service 1d8f1c
                    g_param_spec_string ("language",
Packit Service 1d8f1c
                        "description language",
Packit Service 1d8f1c
                        "The language of engine description",
Packit Service 1d8f1c
                        "",
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:license:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The license of engine description
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_LICENSE,
Packit Service 1d8f1c
                    g_param_spec_string ("license",
Packit Service 1d8f1c
                        "description license",
Packit Service 1d8f1c
                        "The license of engine description",
Packit Service 1d8f1c
                        "",
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:author:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The author of engine description
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_AUTHOR,
Packit Service 1d8f1c
                    g_param_spec_string ("author",
Packit Service 1d8f1c
                        "description author",
Packit Service 1d8f1c
                        "The author of engine description",
Packit Service 1d8f1c
                        "",
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:icon:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The icon of engine description
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_ICON,
Packit Service 1d8f1c
                    g_param_spec_string ("icon",
Packit Service 1d8f1c
                        "description icon",
Packit Service 1d8f1c
                        "The icon of engine description",
Packit Service 1d8f1c
                        "ibus-engine",
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:layout:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The layout of engine description
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_LAYOUT,
Packit Service 1d8f1c
                    g_param_spec_string ("layout",
Packit Service 1d8f1c
                        "description layout",
Packit Service 1d8f1c
                        "The layout of engine description",
Packit Service 1d8f1c
                        "us",
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:layout-variant:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The keyboard variant of engine description
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_LAYOUT_VARIANT,
Packit Service 1d8f1c
                    g_param_spec_string ("layout-variant",
Packit Service 1d8f1c
                        "description keyboard variant",
Packit Service 1d8f1c
                        "The keyboard variant of engine description",
Packit Service 1d8f1c
                        "",
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:layout-option:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The keyboard option of engine description
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_LAYOUT_OPTION,
Packit Service 1d8f1c
                    g_param_spec_string ("layout-option",
Packit Service 1d8f1c
                        "description keyboard option",
Packit Service 1d8f1c
                        "The keyboard option of engine description",
Packit Service 1d8f1c
                        "",
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:rank:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The rank of engine description
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_RANK,
Packit Service 1d8f1c
                    g_param_spec_uint ("rank",
Packit Service 1d8f1c
                        "description rank",
Packit Service 1d8f1c
                        "The rank of engine description",
Packit Service 1d8f1c
                        0,
Packit Service 1d8f1c
                        G_MAXUINT,
Packit Service 1d8f1c
                        0,
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:hotkeys:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The hotkeys of engine description
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_HOTKEYS,
Packit Service 1d8f1c
                    g_param_spec_string ("hotkeys",
Packit Service 1d8f1c
                        "description hotkeys",
Packit Service 1d8f1c
                        "The hotkeys of engine description",
Packit Service 1d8f1c
                        "",
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:symbol:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The symbol chars of engine description instead of icon image
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_SYMBOL,
Packit Service 1d8f1c
                    g_param_spec_string ("symbol",
Packit Service 1d8f1c
                        "description symbol",
Packit Service 1d8f1c
                        "The icon symbol chars of engine description",
Packit Service 1d8f1c
                        "",
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:setup:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The exec lists of the engine setup command
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_SETUP,
Packit Service 1d8f1c
                    g_param_spec_string ("setup",
Packit Service 1d8f1c
                        "setup args",
Packit Service 1d8f1c
                        "The exec lists of the engine setup command",
Packit Service 1d8f1c
                        "",
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:version:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The version number of engine description
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_VERSION,
Packit Service 1d8f1c
                    g_param_spec_string ("version",
Packit Service 1d8f1c
                        "version number",
Packit Service 1d8f1c
                        "The version number of engine description",
Packit Service 1d8f1c
                        "",
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:textdomain:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The textdomain of engine description
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_TEXTDOMAIN,
Packit Service 1d8f1c
                    g_param_spec_string ("textdomain",
Packit Service 1d8f1c
                        "textdomain",
Packit Service 1d8f1c
                        "The textdomain of engine description",
Packit Service 1d8f1c
                        "",
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
Packit Service 1d8f1c
    /**
Packit Service 1d8f1c
     * IBusEngineDesc:icon-prop-key:
Packit Service 1d8f1c
     *
Packit Service 1d8f1c
     * The key of IBusProperty to change panel icon dynamically.
Packit Service 1d8f1c
     */
Packit Service 1d8f1c
    g_object_class_install_property (gobject_class,
Packit Service 1d8f1c
                    PROP_ICON_PROP_KEY,
Packit Service 1d8f1c
                    g_param_spec_string ("icon-prop-key",
Packit Service 1d8f1c
                        "icon property key",
Packit Service 1d8f1c
                        "The key of IBusProperty for the dynamic panel icon",
Packit Service 1d8f1c
                        "",
Packit Service 1d8f1c
                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
static void
Packit Service 1d8f1c
ibus_engine_desc_init (IBusEngineDesc *desc)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    desc->priv = IBUS_ENGINE_DESC_GET_PRIVATE (desc);
Packit Service 1d8f1c
Packit Service 1d8f1c
    desc->priv->name = NULL;
Packit Service 1d8f1c
    desc->priv->longname = NULL;
Packit Service 1d8f1c
    desc->priv->description = NULL;
Packit Service 1d8f1c
    desc->priv->language = NULL;
Packit Service 1d8f1c
    desc->priv->license = NULL;
Packit Service 1d8f1c
    desc->priv->author = NULL;
Packit Service 1d8f1c
    desc->priv->icon = NULL;
Packit Service 1d8f1c
    desc->priv->layout = NULL;
Packit Service 1d8f1c
    desc->priv->layout_variant = NULL;
Packit Service 1d8f1c
    desc->priv->layout_option = NULL;
Packit Service 1d8f1c
    desc->priv->rank = 0;
Packit Service 1d8f1c
    desc->priv->hotkeys = NULL;
Packit Service 1d8f1c
    desc->priv->symbol = NULL;
Packit Service 1d8f1c
    desc->priv->setup = NULL;
Packit Service 1d8f1c
    desc->priv->version = NULL;
Packit Service 1d8f1c
    desc->priv->textdomain = NULL;
Packit Service 1d8f1c
    desc->priv->icon_prop_key = NULL;
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
static void
Packit Service 1d8f1c
ibus_engine_desc_destroy (IBusEngineDesc *desc)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    g_free (desc->priv->name);
Packit Service 1d8f1c
    g_free (desc->priv->longname);
Packit Service 1d8f1c
    g_free (desc->priv->description);
Packit Service 1d8f1c
    g_free (desc->priv->language);
Packit Service 1d8f1c
    g_free (desc->priv->license);
Packit Service 1d8f1c
    g_free (desc->priv->author);
Packit Service 1d8f1c
    g_free (desc->priv->icon);
Packit Service 1d8f1c
    g_free (desc->priv->layout);
Packit Service 1d8f1c
    g_free (desc->priv->layout_variant);
Packit Service 1d8f1c
    g_free (desc->priv->layout_option);
Packit Service 1d8f1c
    g_free (desc->priv->hotkeys);
Packit Service 1d8f1c
    g_free (desc->priv->symbol);
Packit Service 1d8f1c
    g_free (desc->priv->setup);
Packit Service 1d8f1c
    g_free (desc->priv->version);
Packit Service 1d8f1c
    g_free (desc->priv->textdomain);
Packit Service 1d8f1c
    g_free (desc->priv->icon_prop_key);
Packit Service 1d8f1c
Packit Service 1d8f1c
    IBUS_OBJECT_CLASS (ibus_engine_desc_parent_class)->destroy (IBUS_OBJECT (desc));
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
static void
Packit Service 1d8f1c
ibus_engine_desc_set_property (IBusEngineDesc *desc,
Packit Service 1d8f1c
                               guint           prop_id,
Packit Service 1d8f1c
                               const GValue   *value,
Packit Service 1d8f1c
                               GParamSpec     *pspec)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    switch (prop_id) {
Packit Service 1d8f1c
    case PROP_NAME:
Packit Service 1d8f1c
        g_assert (desc->priv->name == NULL);
Packit Service 1d8f1c
        desc->priv->name = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_LONGNAME:
Packit Service 1d8f1c
        g_assert (desc->priv->longname == NULL);
Packit Service 1d8f1c
        desc->priv->longname = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_DESCRIPTION:
Packit Service 1d8f1c
        g_assert (desc->priv->description == NULL);
Packit Service 1d8f1c
        desc->priv->description  = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_LANGUAGE:
Packit Service 1d8f1c
        g_assert (desc->priv->language == NULL);
Packit Service 1d8f1c
        desc->priv->language = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_LICENSE:
Packit Service 1d8f1c
        g_assert (desc->priv->license == NULL);
Packit Service 1d8f1c
        desc->priv->license = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_AUTHOR:
Packit Service 1d8f1c
        g_assert (desc->priv->author == NULL);
Packit Service 1d8f1c
        desc->priv->author = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_ICON:
Packit Service 1d8f1c
        g_assert (desc->priv->icon == NULL);
Packit Service 1d8f1c
        desc->priv->icon = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_LAYOUT:
Packit Service 1d8f1c
        g_assert (desc->priv->layout == NULL);
Packit Service 1d8f1c
        desc->priv->layout = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_LAYOUT_VARIANT:
Packit Service 1d8f1c
        g_assert (desc->priv->layout_variant == NULL);
Packit Service 1d8f1c
        desc->priv->layout_variant = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_LAYOUT_OPTION:
Packit Service 1d8f1c
        g_assert (desc->priv->layout_option == NULL);
Packit Service 1d8f1c
        desc->priv->layout_option = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_RANK:
Packit Service 1d8f1c
        desc->priv->rank = g_value_get_uint (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_HOTKEYS:
Packit Service 1d8f1c
        g_assert (desc->priv->hotkeys == NULL);
Packit Service 1d8f1c
        desc->priv->hotkeys = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_SYMBOL:
Packit Service 1d8f1c
        g_assert (desc->priv->symbol == NULL);
Packit Service 1d8f1c
        desc->priv->symbol = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_SETUP:
Packit Service 1d8f1c
        g_assert (desc->priv->setup == NULL);
Packit Service 1d8f1c
        desc->priv->setup = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_VERSION:
Packit Service 1d8f1c
        g_assert (desc->priv->version == NULL);
Packit Service 1d8f1c
        desc->priv->version = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_TEXTDOMAIN:
Packit Service 1d8f1c
        g_assert (desc->priv->textdomain == NULL);
Packit Service 1d8f1c
        desc->priv->textdomain = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_ICON_PROP_KEY:
Packit Service 1d8f1c
        g_assert (desc->priv->icon_prop_key == NULL);
Packit Service 1d8f1c
        desc->priv->icon_prop_key = g_value_dup_string (value);
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    default:
Packit Service 1d8f1c
        G_OBJECT_WARN_INVALID_PROPERTY_ID (desc, prop_id, pspec);
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
static void
Packit Service 1d8f1c
ibus_engine_desc_get_property (IBusEngineDesc *desc,
Packit Service 1d8f1c
                               guint           prop_id,
Packit Service 1d8f1c
                               GValue         *value,
Packit Service 1d8f1c
                               GParamSpec     *pspec)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    switch (prop_id) {
Packit Service 1d8f1c
    case PROP_NAME:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_name (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_LONGNAME:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_longname (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_DESCRIPTION:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_description (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_LANGUAGE:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_language (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_LICENSE:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_license (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_AUTHOR:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_author (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_ICON:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_icon (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_LAYOUT:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_layout (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_LAYOUT_VARIANT:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_layout_variant (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_LAYOUT_OPTION:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_layout_option (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_RANK:
Packit Service 1d8f1c
        g_value_set_uint (value, ibus_engine_desc_get_rank (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_HOTKEYS:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_hotkeys (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_SYMBOL:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_symbol (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_SETUP:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_setup (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_VERSION:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_version (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_TEXTDOMAIN:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_textdomain (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    case PROP_ICON_PROP_KEY:
Packit Service 1d8f1c
        g_value_set_string (value, ibus_engine_desc_get_icon_prop_key (desc));
Packit Service 1d8f1c
        break;
Packit Service 1d8f1c
    default:
Packit Service 1d8f1c
        G_OBJECT_WARN_INVALID_PROPERTY_ID (desc, prop_id, pspec);
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
static gboolean
Packit Service 1d8f1c
ibus_engine_desc_serialize (IBusEngineDesc  *desc,
Packit Service 1d8f1c
                            GVariantBuilder *builder)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    gboolean retval;
Packit Service 1d8f1c
Packit Service 1d8f1c
    retval = IBUS_SERIALIZABLE_CLASS (ibus_engine_desc_parent_class)->serialize ((IBusSerializable *)desc, builder);
Packit Service 1d8f1c
    g_return_val_if_fail (retval, FALSE);
Packit Service 1d8f1c
    /* End dict iter */
Packit Service 1d8f1c
Packit Service 1d8f1c
#define NOTNULL(s) ((s) != NULL ? (s) : "")
Packit Service 1d8f1c
    /* If you will add a new property, you can append it at the end and
Packit Service 1d8f1c
     * you should not change the serialized order of name, longname,
Packit Service 1d8f1c
     * description, ... because the order is also used in other applications
Packit Service 1d8f1c
     * likes ibus-qt. */
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->name));
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->longname));
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->description));
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->language));
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->license));
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->author));
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->icon));
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->layout));
Packit Service 1d8f1c
    g_variant_builder_add (builder, "u", desc->priv->rank);
Packit Service 1d8f1c
    /* The serialized order should be kept. */
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->hotkeys));
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->symbol));
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->setup));
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->layout_variant));
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->layout_option));
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->version));
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->textdomain));
Packit Service 1d8f1c
    g_variant_builder_add (builder, "s", NOTNULL (desc->priv->icon_prop_key));
Packit Service 1d8f1c
#undef NOTNULL
Packit Service 1d8f1c
Packit Service 1d8f1c
    return TRUE;
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
static gint
Packit Service 1d8f1c
ibus_engine_desc_deserialize (IBusEngineDesc *desc,
Packit Service 1d8f1c
                              GVariant       *variant)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    gint retval;
Packit Service 1d8f1c
Packit Service 1d8f1c
    retval = IBUS_SERIALIZABLE_CLASS (ibus_engine_desc_parent_class)->deserialize ((IBusSerializable *)desc, variant);
Packit Service 1d8f1c
    g_return_val_if_fail (retval, 0);
Packit Service 1d8f1c
Packit Service 1d8f1c
    /* If you will add a new property, you can append it at the end and
Packit Service 1d8f1c
     * you should not change the serialized order of name, longname,
Packit Service 1d8f1c
     * description, ... because the order is also used in other applications
Packit Service 1d8f1c
     * likes ibus-qt. */
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->name);
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->longname);
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->description);
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->language);
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->license);
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->author);
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->icon);
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->layout);
Packit Service 1d8f1c
    g_variant_get_child (variant, retval++, "u", &desc->priv->rank);
Packit Service 1d8f1c
    /* The serialized order should be kept. */
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->hotkeys);
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->symbol);
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->setup);
Packit Service 1d8f1c
    if (g_variant_n_children (variant) < retval + 2)
Packit Service 1d8f1c
        return retval;
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->layout_variant);
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->layout_option);
Packit Service 1d8f1c
    if (g_variant_n_children (variant) < retval + 1)
Packit Service 1d8f1c
        return retval;
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->version);
Packit Service 1d8f1c
    if (g_variant_n_children (variant) < retval + 1)
Packit Service 1d8f1c
        return retval;
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->textdomain);
Packit Service 1d8f1c
    if (g_variant_n_children (variant) < retval + 1)
Packit Service 1d8f1c
        return retval;
Packit Service 1d8f1c
    ibus_g_variant_get_child_string (variant, retval++,
Packit Service 1d8f1c
                                     &desc->priv->icon_prop_key);
Packit Service 1d8f1c
Packit Service 1d8f1c
    return retval;
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
static gboolean
Packit Service 1d8f1c
ibus_engine_desc_copy (IBusEngineDesc       *dest,
Packit Service 1d8f1c
                       const IBusEngineDesc *src)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    gboolean retval;
Packit Service 1d8f1c
Packit Service 1d8f1c
    retval = IBUS_SERIALIZABLE_CLASS (ibus_engine_desc_parent_class)->copy ((IBusSerializable *)dest,
Packit Service 1d8f1c
                                 (IBusSerializable *)src);
Packit Service 1d8f1c
    g_return_val_if_fail (retval, FALSE);
Packit Service 1d8f1c
Packit Service 1d8f1c
    dest->priv->name             = g_strdup (src->priv->name);
Packit Service 1d8f1c
    dest->priv->longname         = g_strdup (src->priv->longname);
Packit Service 1d8f1c
    dest->priv->description      = g_strdup (src->priv->description);
Packit Service 1d8f1c
    dest->priv->language         = g_strdup (src->priv->language);
Packit Service 1d8f1c
    dest->priv->license          = g_strdup (src->priv->license);
Packit Service 1d8f1c
    dest->priv->author           = g_strdup (src->priv->author);
Packit Service 1d8f1c
    dest->priv->icon             = g_strdup (src->priv->icon);
Packit Service 1d8f1c
    dest->priv->layout           = g_strdup (src->priv->layout);
Packit Service 1d8f1c
    dest->priv->layout_variant   = g_strdup (src->priv->layout_variant);
Packit Service 1d8f1c
    dest->priv->layout_option    = g_strdup (src->priv->layout_option);
Packit Service 1d8f1c
    dest->priv->rank             = src->priv->rank;
Packit Service 1d8f1c
    dest->priv->hotkeys          = g_strdup (src->priv->hotkeys);
Packit Service 1d8f1c
    dest->priv->symbol           = g_strdup (src->priv->symbol);
Packit Service 1d8f1c
    dest->priv->setup            = g_strdup (src->priv->setup);
Packit Service 1d8f1c
    dest->priv->version          = g_strdup (src->priv->version);
Packit Service 1d8f1c
    dest->priv->textdomain       = g_strdup (src->priv->textdomain);
Packit Service 1d8f1c
    dest->priv->icon_prop_key    = g_strdup (src->priv->icon_prop_key);
Packit Service 1d8f1c
    return TRUE;
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
#define g_string_append_indent(string, indent)  \
Packit Service 1d8f1c
    {                                           \
Packit Service 1d8f1c
        gint i;                                 \
Packit Service 1d8f1c
        for (i = 0; i < (indent); i++) {        \
Packit Service 1d8f1c
            g_string_append (string, "    ");   \
Packit Service 1d8f1c
        }                                       \
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
Packit Service 1d8f1c
void
Packit Service 1d8f1c
ibus_engine_desc_output (IBusEngineDesc *desc,
Packit Service 1d8f1c
                         GString        *output,
Packit Service 1d8f1c
                         gint            indent)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    g_string_append_indent (output, indent);
Packit Service 1d8f1c
    g_string_append (output, "<engine>\n");
Packit Service 1d8f1c
#define OUTPUT_ENTRY(field, element)                                        \
Packit Service 1d8f1c
    {                                                                       \
Packit Service 1d8f1c
        gchar *escape_text = g_markup_escape_text (                         \
Packit Service 1d8f1c
                        desc->priv->field ? desc->priv->field : "", -1);    \
Packit Service 1d8f1c
        g_string_append_indent (output, indent + 1);                        \
Packit Service 1d8f1c
        g_string_append_printf (output, "<"element">%s</"element">\n",      \
Packit Service 1d8f1c
                                escape_text);                               \
Packit Service 1d8f1c
        g_free (escape_text);                                               \
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
#define OUTPUT_ENTRY_1(name) OUTPUT_ENTRY(name, #name)
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(name);
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(longname);
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(description);
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(language);
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(license);
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(author);
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(icon);
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(layout);
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(layout_variant);
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(layout_option);
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(hotkeys);
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(symbol);
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(setup);
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(version);
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(textdomain);
Packit Service 1d8f1c
    OUTPUT_ENTRY_1(icon_prop_key);
Packit Service 1d8f1c
    g_string_append_indent (output, indent + 1);
Packit Service 1d8f1c
    g_string_append_printf (output, "<rank>%u</rank>\n", desc->priv->rank);
Packit Service 1d8f1c
#undef OUTPUT_ENTRY
Packit Service 1d8f1c
#undef OUTPUT_ENTRY_1
Packit Service 1d8f1c
    g_string_append_indent (output, indent);
Packit Service 1d8f1c
    g_string_append (output, "</engine>\n");
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
static gboolean
Packit Service 1d8f1c
ibus_engine_desc_parse_xml_node (IBusEngineDesc *desc,
Packit Service 1d8f1c
                                XMLNode       *node)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    GList *p;
Packit Service 1d8f1c
Packit Service 1d8f1c
    for (p = node->sub_nodes; p != NULL; p = p->next) {
Packit Service 1d8f1c
        XMLNode *sub_node = (XMLNode *) p->data;
Packit Service 1d8f1c
Packit Service 1d8f1c
#define PARSE_ENTRY(field_name, element_name)                   \
Packit Service 1d8f1c
        if (g_strcmp0 (sub_node->name, element_name) == 0) {    \
Packit Service 1d8f1c
            g_free (desc->priv->field_name);                    \
Packit Service 1d8f1c
            desc->priv->field_name = g_strdup (sub_node->text); \
Packit Service 1d8f1c
            continue;                                           \
Packit Service 1d8f1c
        }
Packit Service 1d8f1c
#define PARSE_ENTRY_1(name) PARSE_ENTRY(name, #name)
Packit Service 1d8f1c
        PARSE_ENTRY_1(name);
Packit Service 1d8f1c
        PARSE_ENTRY_1(longname);
Packit Service 1d8f1c
        PARSE_ENTRY_1(description);
Packit Service 1d8f1c
        PARSE_ENTRY_1(language);
Packit Service 1d8f1c
        PARSE_ENTRY_1(license);
Packit Service 1d8f1c
        PARSE_ENTRY_1(author);
Packit Service 1d8f1c
        PARSE_ENTRY_1(icon);
Packit Service 1d8f1c
        PARSE_ENTRY_1(layout);
Packit Service 1d8f1c
        PARSE_ENTRY_1(layout_variant);
Packit Service 1d8f1c
        PARSE_ENTRY_1(layout_option);
Packit Service 1d8f1c
        PARSE_ENTRY_1(hotkeys);
Packit Service 1d8f1c
        PARSE_ENTRY_1(symbol);
Packit Service 1d8f1c
        PARSE_ENTRY_1(setup);
Packit Service 1d8f1c
        PARSE_ENTRY_1(version);
Packit Service 1d8f1c
        PARSE_ENTRY_1(textdomain);
Packit Service 1d8f1c
        PARSE_ENTRY_1(icon_prop_key);
Packit Service 1d8f1c
#undef PARSE_ENTRY
Packit Service 1d8f1c
#undef PARSE_ENTRY_1
Packit Service 1d8f1c
        if (g_strcmp0 (sub_node->name , "rank") == 0) {
Packit Service 1d8f1c
            desc->priv->rank = atoi (sub_node->text);
Packit Service 1d8f1c
            continue;
Packit Service 1d8f1c
        }
Packit Service 1d8f1c
        g_warning ("<engines> element contains invalidate element <%s>", sub_node->name);
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
    return TRUE;
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
#define IBUS_ENGINE_DESC_GET_PROPERTY(property, return_type)    \
Packit Service 1d8f1c
return_type                                                     \
Packit Service 1d8f1c
ibus_engine_desc_get_ ## property (IBusEngineDesc *desc)        \
Packit Service 1d8f1c
{                                                               \
Packit Service 1d8f1c
    return desc->priv->property;                                \
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (name, const gchar *)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (longname, const gchar *)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (description, const gchar *)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (language, const gchar *)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (license, const gchar *)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (author, const gchar *)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (icon, const gchar *)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (layout, const gchar *)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (layout_variant, const gchar *)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (layout_option, const gchar *)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (rank, guint)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (hotkeys, const gchar *)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (symbol, const gchar *)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (setup, const gchar *)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (version, const gchar *)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (textdomain, const gchar *)
Packit Service 1d8f1c
IBUS_ENGINE_DESC_GET_PROPERTY (icon_prop_key, const gchar *)
Packit Service 1d8f1c
#undef IBUS_ENGINE_DESC_GET_PROPERTY
Packit Service 1d8f1c
Packit Service 1d8f1c
IBusEngineDesc *
Packit Service 1d8f1c
ibus_engine_desc_new (const gchar *name,
Packit Service 1d8f1c
                      const gchar *longname,
Packit Service 1d8f1c
                      const gchar *description,
Packit Service 1d8f1c
                      const gchar *language,
Packit Service 1d8f1c
                      const gchar *license,
Packit Service 1d8f1c
                      const gchar *author,
Packit Service 1d8f1c
                      const gchar *icon,
Packit Service 1d8f1c
                      const gchar *layout)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    return ibus_engine_desc_new_varargs ("name", name,
Packit Service 1d8f1c
                                         "longname", longname,
Packit Service 1d8f1c
                                         "description", description,
Packit Service 1d8f1c
                                         "language", language,
Packit Service 1d8f1c
                                         "license", license,
Packit Service 1d8f1c
                                         "author", author,
Packit Service 1d8f1c
                                         "icon", icon,
Packit Service 1d8f1c
                                         "layout", layout,
Packit Service 1d8f1c
                                         NULL);
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
IBusEngineDesc *
Packit Service 1d8f1c
ibus_engine_desc_new_varargs (const gchar *first_property_name, ...)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    va_list var_args;
Packit Service 1d8f1c
    IBusEngineDesc *desc;
Packit Service 1d8f1c
Packit Service 1d8f1c
    g_assert (first_property_name);
Packit Service 1d8f1c
Packit Service 1d8f1c
    va_start (var_args, first_property_name);
Packit Service 1d8f1c
    desc = (IBusEngineDesc *) g_object_new_valist (IBUS_TYPE_ENGINE_DESC,
Packit Service 1d8f1c
                                                   first_property_name,
Packit Service 1d8f1c
                                                   var_args);
Packit Service 1d8f1c
    va_end (var_args);
Packit Service 1d8f1c
Packit Service 1d8f1c
    /* name is required. Other properties are set in class_init by default. */
Packit Service 1d8f1c
    g_assert (desc->priv->name);
Packit Service 1d8f1c
    g_assert (desc->priv->longname);
Packit Service 1d8f1c
    g_assert (desc->priv->description);
Packit Service 1d8f1c
    g_assert (desc->priv->language);
Packit Service 1d8f1c
    g_assert (desc->priv->license);
Packit Service 1d8f1c
    g_assert (desc->priv->author);
Packit Service 1d8f1c
    g_assert (desc->priv->icon);
Packit Service 1d8f1c
    g_assert (desc->priv->layout);
Packit Service 1d8f1c
    g_assert (desc->priv->layout_variant);
Packit Service 1d8f1c
    g_assert (desc->priv->layout_option);
Packit Service 1d8f1c
    g_assert (desc->priv->hotkeys);
Packit Service 1d8f1c
    g_assert (desc->priv->symbol);
Packit Service 1d8f1c
    g_assert (desc->priv->setup);
Packit Service 1d8f1c
    g_assert (desc->priv->version);
Packit Service 1d8f1c
    g_assert (desc->priv->textdomain);
Packit Service 1d8f1c
    g_assert (desc->priv->icon_prop_key);
Packit Service 1d8f1c
Packit Service 1d8f1c
    return desc;
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
IBusEngineDesc *
Packit Service 1d8f1c
ibus_engine_desc_new_from_xml_node (XMLNode      *node)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    g_assert (node);
Packit Service 1d8f1c
Packit Service 1d8f1c
    IBusEngineDesc *desc;
Packit Service 1d8f1c
Packit Service 1d8f1c
    if (G_UNLIKELY (g_strcmp0 (node->name, "engine") != 0)) {
Packit Service 1d8f1c
        return NULL;
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
Packit Service 1d8f1c
    desc = (IBusEngineDesc *)g_object_new (IBUS_TYPE_ENGINE_DESC, NULL);
Packit Service 1d8f1c
Packit Service 1d8f1c
    if (!ibus_engine_desc_parse_xml_node (desc, node)) {
Packit Service 1d8f1c
        g_object_unref (desc);
Packit Service 1d8f1c
        desc = NULL;
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
Packit Service 1d8f1c
    return desc;
Packit Service 1d8f1c
}