2861 lines
92 KiB
Diff
2861 lines
92 KiB
Diff
From 7a0deadb02ff06e7d2db1177ce1fbb0661201bf1 Mon Sep 17 00:00:00 2001
|
|
From: Daiki Ueno <ueno@unixuser.org>
|
|
Date: Mon, 5 Sep 2011 09:41:21 +0900
|
|
Subject: [PATCH 01/10] Update the format of default.xml to allow override.
|
|
|
|
This patch allows value inheritance from the previous matches.
|
|
With the new format:
|
|
|
|
<engines>
|
|
<engine>
|
|
<name>*</name>
|
|
<rank>0</rank>
|
|
<preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:ja:*</name>
|
|
<rank>2</rank>
|
|
<preedit-highlight>TRUE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:ja:anthy</name>
|
|
<rank>1</rank>
|
|
</engine>
|
|
</engines>
|
|
|
|
We will get preedit-highlight == TRUE and rank == 1 for m17n:ja:anthy.
|
|
|
|
BUG=none
|
|
TEST=manual
|
|
|
|
Review URL: http://codereview.appspot.com/4950059
|
|
---
|
|
src/Makefile.am | 3 +-
|
|
src/default.xml.in.in | 221 +++++++++++++++++++------------------------------
|
|
src/engine.c | 2 +
|
|
src/m17nutil.c | 69 +++++++---------
|
|
src/m17nutil.h | 1 +
|
|
src/test.c | 66 +++++++++++++++
|
|
6 files changed, 186 insertions(+), 176 deletions(-)
|
|
create mode 100644 src/test.c
|
|
|
|
diff --git a/src/Makefile.am b/src/Makefile.am
|
|
index 282128a..e354149 100644
|
|
--- a/src/Makefile.am
|
|
+++ b/src/Makefile.am
|
|
@@ -40,11 +40,10 @@ TESTS = \
|
|
|
|
|
|
test_m17n_SOURCES = \
|
|
- m17nutil.c \
|
|
+ test.c \
|
|
$(NULL)
|
|
test_m17n_CFLAGS = \
|
|
$(AM_CFLAGS) \
|
|
- -DDEBUG \
|
|
$(NULL)
|
|
test_m17n_LDADD = \
|
|
libm17ncommon.a \
|
|
diff --git a/src/default.xml.in.in b/src/default.xml.in.in
|
|
index 5c5d67d..dc93fd3 100644
|
|
--- a/src/default.xml.in.in
|
|
+++ b/src/default.xml.in.in
|
|
@@ -1,246 +1,197 @@
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<engines>
|
|
<!-- This file defines the default config value for each
|
|
- engine. The "engine" elements below are checked in
|
|
- first-to-last order and a "name" element in an "engine"
|
|
- element allows wildcard patterns. Please keep more
|
|
- specific entries to appear first. -->
|
|
- <!-- Indic engines which represent languages. -->
|
|
+ engine. A "name" element in an "engine" element allows
|
|
+ wildcard patterns. "engine" elements are evaluated in
|
|
+ first-to-last order and the latter match may override the
|
|
+ existing default. -->
|
|
+ <!-- Default for other engines. -->
|
|
+ <engine>
|
|
+ <name>m17n:*</name>
|
|
+ <rank>0</rank>
|
|
+ <preedit-highlight>FALSE</preedit-highlight>
|
|
+ </engine>
|
|
+ <!-- Indic engines should be selected by default:
|
|
+ https://bugzilla.redhat.com/show_bug.cgi?id=640896 -->
|
|
+ <engine>
|
|
+ <name>m17n:as:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:bn:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:gu:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:hi:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:kn:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:ks:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:mai:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:ml:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:mr:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:ne:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:or:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:pa:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:sa:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:sd:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:si:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:ta:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:te:*</name>
|
|
+ <rank>1</rank>
|
|
+ </engine>
|
|
+ <!-- Assign higher rank to Indic engines which represent each
|
|
+ language. -->
|
|
<engine>
|
|
<name>m17n:as:phonetic</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:bn:inscript</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:gu:inscript</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:hi:inscript</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:kn:kgp</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:ks:kbd</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:mai:inscript</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:ml:inscript</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:mr:inscript</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:ne:rom</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:or:inscript</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:pa:inscript</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:sa:harvard-kyoto</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:sd:inscript</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:si:wijesekera</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:ta:tamil99</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:te:inscript</name>
|
|
<rank>2</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
</engine>
|
|
- <!-- Samanala should have lower rank than other Sinhala
|
|
- engines since it is the only non-keyboard input method in
|
|
- Sinhala. -->
|
|
+ <!-- Assign lower rank to Sinhala Samanala since it is a
|
|
+ non-keyboard input method in Sinhala. -->
|
|
<engine>
|
|
<name>m17n:si:samanala</name>
|
|
<rank>0</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <!-- Chinese and Japanese engines which require preedit decoration. -->
|
|
- <engine>
|
|
- <name>m17n:ja:anthy</name>
|
|
- <rank>0</rank>
|
|
- <preedit-highlight>TRUE</preedit-highlight>
|
|
</engine>
|
|
+ <!-- Some CJK engines use preedit. -->
|
|
<engine>
|
|
<name>m17n:zh:cangjie</name>
|
|
- <rank>0</rank>
|
|
<preedit-highlight>TRUE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:zh:py-b5</name>
|
|
- <rank>0</rank>
|
|
<preedit-highlight>TRUE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:zh:py-gb</name>
|
|
- <rank>0</rank>
|
|
<preedit-highlight>TRUE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:zh:py</name>
|
|
- <rank>0</rank>
|
|
<preedit-highlight>TRUE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:zh:quick</name>
|
|
- <rank>0</rank>
|
|
<preedit-highlight>TRUE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:zh:tonepy-b5</name>
|
|
- <rank>0</rank>
|
|
<preedit-highlight>TRUE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:zh:tonepy-gb</name>
|
|
- <rank>0</rank>
|
|
<preedit-highlight>TRUE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
<name>m17n:zh:tonepy</name>
|
|
- <rank>0</rank>
|
|
<preedit-highlight>TRUE</preedit-highlight>
|
|
</engine>
|
|
<engine>
|
|
- <name>m17n:zh:util</name>
|
|
- <rank>0</rank>
|
|
+ <name>m17n:ja:anthy</name>
|
|
<preedit-highlight>TRUE</preedit-highlight>
|
|
</engine>
|
|
- <!-- Other Indic engines should be selected by default:
|
|
- https://bugzilla.redhat.com/show_bug.cgi?id=640896 -->
|
|
- <engine>
|
|
- <name>m17n:as:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:bn:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:gu:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:hi:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:kn:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:ks:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:mai:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:ml:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:mr:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:ne:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:or:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:pa:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:sa:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:sd:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:si:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:ta:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <engine>
|
|
- <name>m17n:te:*</name>
|
|
- <rank>1</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
- <!-- Default for other engines. -->
|
|
- <engine>
|
|
- <name>m17n:*</name>
|
|
- <rank>0</rank>
|
|
- <preedit-highlight>FALSE</preedit-highlight>
|
|
- </engine>
|
|
</engines>
|
|
diff --git a/src/engine.c b/src/engine.c
|
|
index cfb853c..dcff0c7 100644
|
|
--- a/src/engine.c
|
|
+++ b/src/engine.c
|
|
@@ -290,6 +290,8 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
|
|
&klass->lookup_table_orientation))
|
|
klass->lookup_table_orientation = IBUS_ORIENTATION_SYSTEM;
|
|
|
|
+ ibus_m17n_engine_config_free (engine_config);
|
|
+
|
|
g_signal_connect (config, "value-changed",
|
|
G_CALLBACK(ibus_m17n_config_value_changed),
|
|
klass);
|
|
diff --git a/src/m17nutil.c b/src/m17nutil.c
|
|
index 42aa8f6..54561f2 100644
|
|
--- a/src/m17nutil.c
|
|
+++ b/src/m17nutil.c
|
|
@@ -13,12 +13,17 @@ static MConverter *utf8_converter = NULL;
|
|
|
|
#define DEFAULT_XML (SETUPDIR "/default.xml")
|
|
|
|
-struct _IBusM17NEngineConfigNode {
|
|
+typedef enum {
|
|
+ ENGINE_CONFIG_RANK_MASK = 1 << 0,
|
|
+ ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 1
|
|
+} EngineConfigMask;
|
|
+
|
|
+struct _EngineConfigNode {
|
|
gchar *name;
|
|
+ EngineConfigMask mask;
|
|
IBusM17NEngineConfig config;
|
|
};
|
|
-
|
|
-typedef struct _IBusM17NEngineConfigNode IBusM17NEngineConfigNode;
|
|
+typedef struct _EngineConfigNode EngineConfigNode;
|
|
|
|
static GSList *config_list = NULL;
|
|
|
|
@@ -257,20 +262,31 @@ ibus_m17n_list_engines (void)
|
|
IBusM17NEngineConfig *
|
|
ibus_m17n_get_engine_config (const gchar *engine_name)
|
|
{
|
|
+ IBusM17NEngineConfig *config = g_slice_new0 (IBusM17NEngineConfig);
|
|
GSList *p;
|
|
|
|
for (p = config_list; p != NULL; p = p->next) {
|
|
- IBusM17NEngineConfigNode *cnode = p->data;
|
|
+ EngineConfigNode *cnode = p->data;
|
|
|
|
- if (g_pattern_match_simple (cnode->name, engine_name))
|
|
- return &cnode->config;
|
|
+ if (g_pattern_match_simple (cnode->name, engine_name)) {
|
|
+ if (cnode->mask & ENGINE_CONFIG_RANK_MASK)
|
|
+ config->rank = cnode->config.rank;
|
|
+ if (cnode->mask & ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK)
|
|
+ config->preedit_highlight = cnode->config.preedit_highlight;
|
|
+ }
|
|
}
|
|
- g_return_val_if_reached (NULL);
|
|
+ return config;
|
|
+}
|
|
+
|
|
+void
|
|
+ibus_m17n_engine_config_free (IBusM17NEngineConfig *config)
|
|
+{
|
|
+ g_slice_free (IBusM17NEngineConfig, config);
|
|
}
|
|
|
|
static gboolean
|
|
-ibus_m17n_engine_config_parse_xml_node (IBusM17NEngineConfigNode *cnode,
|
|
- XMLNode *node)
|
|
+ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
|
|
+ XMLNode *node)
|
|
{
|
|
GList *p;
|
|
|
|
@@ -284,6 +300,7 @@ ibus_m17n_engine_config_parse_xml_node (IBusM17NEngineConfigNode *cnode,
|
|
}
|
|
if (g_strcmp0 (sub_node->name , "rank") == 0) {
|
|
cnode->config.rank = atoi (sub_node->text);
|
|
+ cnode->mask |= ENGINE_CONFIG_RANK_MASK;
|
|
continue;
|
|
}
|
|
if (g_strcmp0 (sub_node->name , "preedit-highlight") == 0) {
|
|
@@ -292,6 +309,7 @@ ibus_m17n_engine_config_parse_xml_node (IBusM17NEngineConfigNode *cnode,
|
|
else if (g_ascii_strcasecmp ("FALSE", sub_node->text) != 0)
|
|
g_warning ("<%s> element contains invalid boolean value %s",
|
|
sub_node->name, sub_node->text);
|
|
+ cnode->mask |= ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK;
|
|
continue;
|
|
}
|
|
g_warning ("<engine> element contains invalid element <%s>",
|
|
@@ -320,7 +338,7 @@ ibus_m17n_get_component (void)
|
|
if (node && g_strcmp0 (node->name, "engines") == 0) {
|
|
for (p = node->sub_nodes; p != NULL; p = p->next) {
|
|
XMLNode *sub_node = p->data;
|
|
- IBusM17NEngineConfigNode *cnode;
|
|
+ EngineConfigNode *cnode;
|
|
|
|
if (g_strcmp0 (sub_node->name, "engine") != 0) {
|
|
g_warning ("<engines> element contains invalid element <%s>",
|
|
@@ -328,9 +346,9 @@ ibus_m17n_get_component (void)
|
|
continue;
|
|
}
|
|
|
|
- cnode = g_slice_new0 (IBusM17NEngineConfigNode);
|
|
+ cnode = g_slice_new0 (EngineConfigNode);
|
|
if (!ibus_m17n_engine_config_parse_xml_node (cnode, sub_node)) {
|
|
- g_slice_free (IBusM17NEngineConfigNode, cnode);
|
|
+ g_slice_free (EngineConfigNode, cnode);
|
|
continue;
|
|
}
|
|
config_list = g_slist_prepend (config_list, cnode);
|
|
@@ -448,30 +466,3 @@ ibus_m17n_config_get_int (IBusConfig *config,
|
|
return FALSE;
|
|
#endif /* !IBUS_CHECK_VERSION(1,3,99) */
|
|
}
|
|
-
|
|
-#ifdef DEBUG
|
|
-#include <locale.h>
|
|
-
|
|
-int main ()
|
|
-{
|
|
- IBusComponent *component;
|
|
- GString *output;
|
|
-
|
|
- setlocale (LC_ALL, "");
|
|
- ibus_init ();
|
|
- ibus_m17n_init_common ();
|
|
-
|
|
- component = ibus_m17n_get_component ();
|
|
-
|
|
- output = g_string_new ("");
|
|
-
|
|
- ibus_component_output (component, output, 1);
|
|
-
|
|
- g_debug ("\n%s", output->str);
|
|
-
|
|
- g_string_free (output, TRUE);
|
|
- g_object_unref (component);
|
|
-
|
|
- return 0;
|
|
-}
|
|
-#endif
|
|
diff --git a/src/m17nutil.h b/src/m17nutil.h
|
|
index f083194..313e7bc 100644
|
|
--- a/src/m17nutil.h
|
|
+++ b/src/m17nutil.h
|
|
@@ -30,6 +30,7 @@ gunichar *ibus_m17n_mtext_to_ucs4 (MText *text,
|
|
guint ibus_m17n_parse_color (const gchar *hex);
|
|
IBusM17NEngineConfig
|
|
*ibus_m17n_get_engine_config (const gchar *engine_name);
|
|
+void ibus_m17n_engine_config_free (IBusM17NEngineConfig *config);
|
|
void ibus_m17n_config_set_string (IBusConfig *config,
|
|
const gchar *section,
|
|
const gchar *name,
|
|
diff --git a/src/test.c b/src/test.c
|
|
new file mode 100644
|
|
index 0000000..0908818
|
|
--- /dev/null
|
|
+++ b/src/test.c
|
|
@@ -0,0 +1,66 @@
|
|
+/* vim:set et sts=4: */
|
|
+#ifdef HAVE_CONFIG_H
|
|
+#include <config.h>
|
|
+#endif
|
|
+
|
|
+#include <ibus.h>
|
|
+#include <locale.h>
|
|
+#include "m17nutil.h"
|
|
+
|
|
+static void
|
|
+test_output_component (void)
|
|
+{
|
|
+ IBusComponent *component;
|
|
+ GString *output;
|
|
+
|
|
+ component = ibus_m17n_get_component ();
|
|
+
|
|
+ output = g_string_new ("");
|
|
+
|
|
+ ibus_component_output (component, output, 1);
|
|
+
|
|
+ g_debug ("\n%s", output->str);
|
|
+
|
|
+ g_string_free (output, TRUE);
|
|
+ g_object_unref (component);
|
|
+}
|
|
+
|
|
+static void
|
|
+test_engine_config (void)
|
|
+{
|
|
+ IBusM17NEngineConfig *config;
|
|
+
|
|
+ config = ibus_m17n_get_engine_config ("m17n:non:exsistent");
|
|
+ g_assert_cmpint (config->rank, ==, 0);
|
|
+ g_assert_cmpint (config->preedit_highlight, ==, 0);
|
|
+ ibus_m17n_engine_config_free (config);
|
|
+
|
|
+ config = ibus_m17n_get_engine_config ("m17n:si:wijesekera");
|
|
+ g_assert_cmpint (config->rank, ==, 2);
|
|
+ g_assert_cmpint (config->preedit_highlight, ==, 0);
|
|
+ ibus_m17n_engine_config_free (config);
|
|
+
|
|
+ config = ibus_m17n_get_engine_config ("m17n:si:phonetic-dynamic");
|
|
+ g_assert_cmpint (config->rank, ==, 1);
|
|
+ g_assert_cmpint (config->preedit_highlight, ==, 0);
|
|
+ ibus_m17n_engine_config_free (config);
|
|
+
|
|
+ config = ibus_m17n_get_engine_config ("m17n:si:samanala");
|
|
+ g_assert_cmpint (config->rank, ==, 0);
|
|
+ g_assert_cmpint (config->preedit_highlight, ==, 0);
|
|
+ ibus_m17n_engine_config_free (config);
|
|
+}
|
|
+
|
|
+int main (int argc, char **argv)
|
|
+{
|
|
+ setlocale (LC_ALL, "");
|
|
+ ibus_init ();
|
|
+ ibus_m17n_init_common ();
|
|
+
|
|
+ g_test_init (&argc, &argv, NULL);
|
|
+
|
|
+ g_test_add_func ("/test-m17n/output-component", test_output_component);
|
|
+ g_test_add_func ("/test-m17n/engine-config", test_engine_config);
|
|
+
|
|
+ return g_test_run ();
|
|
+}
|
|
--
|
|
1.7.7.6
|
|
|
|
|
|
From 5ff68ed781584d59f7f27e843f2f6da630c904ae Mon Sep 17 00:00:00 2001
|
|
From: Daiki Ueno <ueno@unixuser.org>
|
|
Date: Thu, 8 Sep 2011 09:51:02 +0900
|
|
Subject: [PATCH 02/10] Refactor setup.c.
|
|
|
|
Previously, each config item was saved when corresponding widget state was
|
|
changed. With this change, changes won't be saved until a user close the
|
|
setup dialog.
|
|
|
|
BUG=none
|
|
TEST=manual
|
|
|
|
Review URL: http://codereview.appspot.com/4968066
|
|
---
|
|
src/ibus-m17n-preferences.ui | 3 +-
|
|
src/setup.c | 668 +++++++++++++++++++++++-------------------
|
|
2 files changed, 363 insertions(+), 308 deletions(-)
|
|
|
|
diff --git a/src/ibus-m17n-preferences.ui b/src/ibus-m17n-preferences.ui
|
|
index 6f6ace7..a46ab49 100644
|
|
--- a/src/ibus-m17n-preferences.ui
|
|
+++ b/src/ibus-m17n-preferences.ui
|
|
@@ -263,9 +263,10 @@
|
|
<property name="hscrollbar_policy">automatic</property>
|
|
<property name="vscrollbar_policy">automatic</property>
|
|
<child>
|
|
- <object class="GtkTreeView" id="treeviewMimConfig">
|
|
+ <object class="GtkTreeView" id="treeview_mim_config">
|
|
<property name="visible">True</property>
|
|
<property name="can_focus">True</property>
|
|
+ <property name="has_tooltip">True</property>
|
|
<property name="enable_grid_lines">both</property>
|
|
</object>
|
|
</child>
|
|
diff --git a/src/setup.c b/src/setup.c
|
|
index aba0e92..02db691 100644
|
|
--- a/src/setup.c
|
|
+++ b/src/setup.c
|
|
@@ -17,19 +17,24 @@ enum {
|
|
NUM_COLS
|
|
};
|
|
|
|
-struct _ConfigContext {
|
|
- IBusConfig *config;
|
|
- MSymbol language;
|
|
- MSymbol name;
|
|
- GtkListStore *store;
|
|
- gchar *section;
|
|
+struct _SetupDialog {
|
|
+ GtkWidget *dialog;
|
|
+ GtkWidget *combobox_underline;
|
|
+ GtkWidget *combobox_orientation;
|
|
+ GtkWidget *checkbutton_foreground;
|
|
GtkWidget *colorbutton_foreground;
|
|
+ GtkWidget *checkbutton_background;
|
|
GtkWidget *colorbutton_background;
|
|
+ GtkWidget *treeview;
|
|
+ GtkListStore *store;
|
|
|
|
-};
|
|
-typedef struct _ConfigContext ConfigContext;
|
|
+ MSymbol lang;
|
|
+ MSymbol name;
|
|
|
|
-static IBusConfig *config = NULL;
|
|
+ IBusConfig *config;
|
|
+ gchar *section;
|
|
+};
|
|
+typedef struct _SetupDialog SetupDialog;
|
|
|
|
static gchar *opt_name = NULL;
|
|
static const GOptionEntry options[] = {
|
|
@@ -38,17 +43,8 @@ static const GOptionEntry options[] = {
|
|
{NULL}
|
|
};
|
|
|
|
-void
|
|
-ibus_m17n_init (IBusBus *bus)
|
|
-{
|
|
- config = ibus_bus_get_config (bus);
|
|
- if (config)
|
|
- g_object_ref_sink (config);
|
|
- ibus_m17n_init_common ();
|
|
-}
|
|
-
|
|
static gchar *
|
|
-format_value (MPlist *plist)
|
|
+format_m17n_value (MPlist *plist)
|
|
{
|
|
if (mplist_key (plist) == Msymbol)
|
|
return g_strdup (msymbol_name ((MSymbol) mplist_value (plist)));
|
|
@@ -64,7 +60,7 @@ format_value (MPlist *plist)
|
|
}
|
|
|
|
static MPlist *
|
|
-parse_value (MPlist *plist, gchar *text)
|
|
+parse_m17n_value (MPlist *plist, gchar *text)
|
|
{
|
|
MPlist *value;
|
|
|
|
@@ -100,7 +96,7 @@ parse_value (MPlist *plist, gchar *text)
|
|
}
|
|
|
|
static void
|
|
-insert_items (GtkListStore *store, MSymbol language, MSymbol name)
|
|
+insert_m17n_items (GtkListStore *store, MSymbol language, MSymbol name)
|
|
{
|
|
MPlist *plist;
|
|
|
|
@@ -109,8 +105,8 @@ insert_items (GtkListStore *store, MSymbol language, MSymbol name)
|
|
for (; plist && mplist_key (plist) == Mplist; plist = mplist_next (plist)) {
|
|
GtkTreeIter iter;
|
|
MSymbol key;
|
|
- MPlist *p, *value;
|
|
- gchar *description;
|
|
+ MPlist *p, *mvalue;
|
|
+ gchar *description, *value;
|
|
|
|
p = mplist_value (plist);
|
|
key = mplist_value (p); /* name */
|
|
@@ -118,15 +114,17 @@ insert_items (GtkListStore *store, MSymbol language, MSymbol name)
|
|
p = mplist_next (p); /* description */
|
|
description = ibus_m17n_mtext_to_utf8 ((MText *) mplist_value (p));
|
|
p = mplist_next (p); /* status */
|
|
- value = mplist_next (p);
|
|
+ mvalue = mplist_next (p);
|
|
+ value = format_m17n_value (mvalue);
|
|
|
|
gtk_list_store_append (store, &iter);
|
|
gtk_list_store_set (store, &iter,
|
|
COLUMN_KEY, msymbol_name (key),
|
|
COLUMN_DESCRIPTION, description,
|
|
- COLUMN_VALUE, format_value (value),
|
|
+ COLUMN_VALUE, value,
|
|
-1);
|
|
g_free (description);
|
|
+ g_free (value);
|
|
}
|
|
}
|
|
|
|
@@ -138,7 +136,7 @@ on_query_tooltip (GtkWidget *widget,
|
|
GtkTooltip *tooltip,
|
|
gpointer user_data)
|
|
{
|
|
- GtkTreeView *treeview = GTK_TREE_VIEW(widget);
|
|
+ GtkTreeView *treeview = GTK_TREE_VIEW (widget);
|
|
GtkTreeModel *model = gtk_tree_view_get_model (treeview);
|
|
GtkTreePath *path = NULL;
|
|
GtkTreeIter iter;
|
|
@@ -163,173 +161,48 @@ on_edited (GtkCellRendererText *cell,
|
|
gchar *new_text,
|
|
gpointer data)
|
|
{
|
|
- ConfigContext *context = data;
|
|
- GtkTreeModel *model = GTK_TREE_MODEL (context->store);
|
|
+ SetupDialog *dialog = data;
|
|
+ GtkTreeModel *model = GTK_TREE_MODEL (dialog->store);
|
|
GtkTreeIter iter;
|
|
GtkTreePath *path = gtk_tree_path_new_from_string (path_string);
|
|
- MPlist *plist, *p, *value;
|
|
- gchar *key;
|
|
|
|
gtk_tree_model_get_iter (model, &iter, path);
|
|
- gtk_tree_model_get (model, &iter, COLUMN_KEY, &key, -1);
|
|
-
|
|
- plist = minput_get_variable (context->language, context->name,
|
|
- msymbol (key));
|
|
- if (!plist)
|
|
- goto fail;
|
|
-
|
|
- p = mplist_next (mplist_next (mplist_next (mplist_value (plist))));
|
|
- if (!p)
|
|
- goto fail;
|
|
-
|
|
- value = parse_value (p, new_text);
|
|
- if (!value)
|
|
- goto fail;
|
|
-
|
|
- if (minput_config_variable (context->language, context->name,
|
|
- msymbol (key), value) != 0)
|
|
- goto fail;
|
|
|
|
- if (minput_save_config () != 1)
|
|
- goto fail;
|
|
-
|
|
- gtk_list_store_set (context->store, &iter,
|
|
+ gtk_list_store_set (dialog->store, &iter,
|
|
COLUMN_VALUE, new_text,
|
|
-1);
|
|
-
|
|
- fail:
|
|
gtk_tree_path_free (path);
|
|
}
|
|
|
|
static void
|
|
-color_to_gdk (guint color, GdkColor *color_gdk)
|
|
+toggle_colorbutton_sensitive (GtkToggleButton *togglebutton,
|
|
+ GtkWidget *colorbutton)
|
|
{
|
|
- memset (color_gdk, 0, sizeof *color_gdk);
|
|
- color_gdk->red = (color >> 8) & 0xFF00;
|
|
- color_gdk->green = color & 0xFF00;
|
|
- color_gdk->blue = (color & 0xFF) << 8;
|
|
-}
|
|
-
|
|
-static void
|
|
-set_color (ConfigContext *context, const gchar *name, GdkColor *color)
|
|
-{
|
|
- gchar buf[8];
|
|
-
|
|
- if (color)
|
|
- sprintf (buf, "#%02X%02X%02X",
|
|
- (color->red & 0xFF00) >> 8,
|
|
- (color->green & 0xFF00) >> 8,
|
|
- (color->blue & 0xFF00) >> 8);
|
|
- else
|
|
- strcpy (buf, "none");
|
|
- ibus_m17n_config_set_string (config, context->section, name, buf);
|
|
-}
|
|
-
|
|
-static void
|
|
-on_foreground_color_set (GtkColorButton *widget,
|
|
- gpointer user_data)
|
|
-{
|
|
- ConfigContext *context = user_data;
|
|
- GdkColor color;
|
|
-
|
|
- gtk_color_button_get_color (GTK_COLOR_BUTTON(widget), &color);
|
|
- set_color (context, "preedit_foreground", &color);
|
|
-}
|
|
-
|
|
-static void
|
|
-on_background_color_set (GtkColorButton *widget,
|
|
- gpointer user_data)
|
|
-{
|
|
- ConfigContext *context = user_data;
|
|
- GdkColor color;
|
|
-
|
|
- gtk_color_button_get_color (GTK_COLOR_BUTTON(widget), &color);
|
|
- set_color (context, "preedit_background", &color);
|
|
-}
|
|
-
|
|
-static void
|
|
-on_underline_changed (GtkComboBox *combo,
|
|
- gpointer user_data)
|
|
-{
|
|
- ConfigContext *context = user_data;
|
|
- GtkTreeModel *model;
|
|
- GtkTreeIter iter;
|
|
- gint active;
|
|
-
|
|
- model = gtk_combo_box_get_model (combo);
|
|
- gtk_combo_box_get_active_iter (combo, &iter);
|
|
- gtk_tree_model_get (model, &iter, COLUMN_VALUE, &active, -1);
|
|
-
|
|
- ibus_m17n_config_set_int (config,
|
|
- context->section,
|
|
- "preedit_underline",
|
|
- active);
|
|
-}
|
|
-
|
|
-static void
|
|
-on_orientation_changed (GtkComboBox *combo,
|
|
- gpointer user_data)
|
|
-{
|
|
- ConfigContext *context = user_data;
|
|
- GtkTreeModel *model;
|
|
- GtkTreeIter iter;
|
|
- gint active;
|
|
-
|
|
- model = gtk_combo_box_get_model (combo);
|
|
- gtk_combo_box_get_active_iter (combo, &iter);
|
|
- gtk_tree_model_get (model, &iter, COLUMN_VALUE, &active, -1);
|
|
-
|
|
- ibus_m17n_config_set_int (config,
|
|
- context->section,
|
|
- "lookup_table_orientation",
|
|
- active);
|
|
-}
|
|
-
|
|
-static void
|
|
-toggle_color (ConfigContext *context,
|
|
- GtkToggleButton *togglebutton,
|
|
- GtkWidget *colorbutton,
|
|
- const gchar *name)
|
|
-{
|
|
- GdkColor color;
|
|
-
|
|
- if (gtk_toggle_button_get_active (togglebutton)) {
|
|
+ if (gtk_toggle_button_get_active (togglebutton))
|
|
gtk_widget_set_sensitive (colorbutton, TRUE);
|
|
- gtk_color_button_get_color (GTK_COLOR_BUTTON(colorbutton), &color);
|
|
- set_color (context, name, &color);
|
|
- } else {
|
|
+ else
|
|
gtk_widget_set_sensitive (colorbutton, FALSE);
|
|
- gtk_color_button_get_color (GTK_COLOR_BUTTON(colorbutton), &color);
|
|
- set_color (context, name, NULL);
|
|
- }
|
|
}
|
|
|
|
static void
|
|
on_foreground_toggled (GtkToggleButton *togglebutton,
|
|
gpointer user_data)
|
|
{
|
|
- ConfigContext *context = user_data;
|
|
-
|
|
- toggle_color (context,
|
|
- togglebutton,
|
|
- context->colorbutton_foreground,
|
|
- "preedit_foreground");
|
|
+ SetupDialog *dialog = user_data;
|
|
+ toggle_colorbutton_sensitive (togglebutton, dialog->colorbutton_foreground);
|
|
}
|
|
|
|
static void
|
|
on_background_toggled (GtkToggleButton *togglebutton,
|
|
gpointer user_data)
|
|
{
|
|
- ConfigContext *context = user_data;
|
|
-
|
|
- toggle_color (context,
|
|
- togglebutton,
|
|
- context->colorbutton_background,
|
|
- "preedit_background");
|
|
+ SetupDialog *dialog = user_data;
|
|
+ toggle_colorbutton_sensitive (togglebutton, dialog->colorbutton_background);
|
|
}
|
|
|
|
static gint
|
|
-get_combo_box_index_by_value (GtkComboBox *combobox, gint value)
|
|
+get_combo_box_index_by_value (GtkComboBox *combobox,
|
|
+ gint value)
|
|
{
|
|
GtkTreeModel *model;
|
|
GtkTreeIter iter;
|
|
@@ -351,185 +224,366 @@ get_combo_box_index_by_value (GtkComboBox *combobox, gint value)
|
|
}
|
|
|
|
static void
|
|
-start (const gchar *engine_name)
|
|
+_gdk_color_from_uint (guint color,
|
|
+ GdkColor *color_gdk)
|
|
+{
|
|
+ color_gdk->pixel = 0;
|
|
+ color_gdk->red = (color >> 8) & 0xFF00;
|
|
+ color_gdk->green = color & 0xFF00;
|
|
+ color_gdk->blue = (color & 0xFF) << 8;
|
|
+}
|
|
+
|
|
+static void
|
|
+setup_dialog_load_config (SetupDialog *dialog)
|
|
{
|
|
- IBusBus *bus;
|
|
- gchar **strv, *lang, *name;
|
|
- GtkBuilder *builder;
|
|
- GtkWidget *dialog;
|
|
- GtkWidget *combobox_underline, *combobox_orientation;
|
|
- GtkWidget *checkbutton_foreground, *checkbutton_background;
|
|
- GtkWidget *treeview;
|
|
- GtkListStore *store;
|
|
- GObject *object;
|
|
- GError *error = NULL;
|
|
- GtkCellRenderer *renderer;
|
|
- ConfigContext context;
|
|
gchar *color;
|
|
- gboolean is_foreground_set, is_background_set;
|
|
- GdkColor foreground, background;
|
|
- gint underline;
|
|
- gint orientation;
|
|
+ gboolean bvalue;
|
|
+ gint ivalue;
|
|
+ GdkColor cvalue;
|
|
+ GtkCellRenderer *renderer;
|
|
gint index;
|
|
|
|
- ibus_init ();
|
|
-
|
|
- bus = ibus_bus_new ();
|
|
- //g_signal_connect (bus, "disconnected", G_CALLBACK (ibus_disconnected_cb), NULL);
|
|
- ibus_m17n_init (bus);
|
|
-
|
|
- strv = g_strsplit (engine_name, ":", 3);
|
|
-
|
|
- g_assert (g_strv_length (strv) == 3);
|
|
- g_assert (g_strcmp0 (strv[0], "m17n") == 0);
|
|
-
|
|
- lang = strv[1];
|
|
- name = strv[2];
|
|
-
|
|
- config = ibus_bus_get_config (bus);
|
|
- context.section = g_strdup_printf ("engine/M17N/%s/%s", lang, name);
|
|
-
|
|
- builder = gtk_builder_new ();
|
|
- gtk_builder_set_translation_domain (builder, "ibus-m17n");
|
|
- gtk_builder_add_from_file (builder,
|
|
- SETUPDIR "/ibus-m17n-preferences.ui",
|
|
- &error);
|
|
- object = gtk_builder_get_object (builder, "dialog");
|
|
- dialog = GTK_WIDGET(object);
|
|
- object = gtk_builder_get_object (builder, "checkbutton_foreground");
|
|
- checkbutton_foreground = GTK_WIDGET(object);
|
|
- object = gtk_builder_get_object (builder, "colorbutton_foreground");
|
|
- context.colorbutton_foreground = GTK_WIDGET(object);
|
|
- object = gtk_builder_get_object (builder, "checkbutton_background");
|
|
- checkbutton_background = GTK_WIDGET(object);
|
|
- object = gtk_builder_get_object (builder, "colorbutton_background");
|
|
- context.colorbutton_background = GTK_WIDGET(object);
|
|
- object = gtk_builder_get_object (builder, "combobox_underline");
|
|
- combobox_underline = GTK_WIDGET(object);
|
|
- object = gtk_builder_get_object (builder, "combobox_orientation");
|
|
- combobox_orientation = GTK_WIDGET(object);
|
|
- object = gtk_builder_get_object (builder, "treeviewMimConfig");
|
|
- treeview = GTK_WIDGET(object);
|
|
-
|
|
/* General -> Pre-edit Appearance */
|
|
/* foreground color of pre-edit buffer */
|
|
- is_foreground_set = FALSE;
|
|
- color_to_gdk (PREEDIT_FOREGROUND, &foreground);
|
|
- if (ibus_m17n_config_get_string (config,
|
|
- context.section,
|
|
+ bvalue = FALSE;
|
|
+ _gdk_color_from_uint (PREEDIT_FOREGROUND, &cvalue);
|
|
+ if (ibus_m17n_config_get_string (dialog->config,
|
|
+ dialog->section,
|
|
"preedit_foreground",
|
|
&color)) {
|
|
- if (g_strcmp0 (color, "none") != 0 &&
|
|
- gdk_color_parse (color, &foreground))
|
|
- is_foreground_set = TRUE;
|
|
+ if (g_strcmp0 (color, "none") != 0 && gdk_color_parse (color, &cvalue))
|
|
+ bvalue = TRUE;
|
|
g_free (color);
|
|
}
|
|
|
|
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(checkbutton_foreground),
|
|
- is_foreground_set);
|
|
- g_signal_connect (checkbutton_foreground, "toggled",
|
|
- G_CALLBACK(on_foreground_toggled),
|
|
- &context);
|
|
- gtk_widget_set_sensitive (context.colorbutton_foreground,
|
|
- is_foreground_set);
|
|
+ gtk_toggle_button_set_active
|
|
+ (GTK_TOGGLE_BUTTON (dialog->checkbutton_foreground),
|
|
+ bvalue);
|
|
+ g_signal_connect (dialog->checkbutton_foreground, "toggled",
|
|
+ G_CALLBACK (on_foreground_toggled), dialog);
|
|
+ gtk_widget_set_sensitive (dialog->colorbutton_foreground, bvalue);
|
|
gtk_color_button_set_color
|
|
- (GTK_COLOR_BUTTON(context.colorbutton_foreground),
|
|
- &foreground);
|
|
- g_signal_connect (context.colorbutton_foreground, "color-set",
|
|
- G_CALLBACK(on_foreground_color_set), &context);
|
|
+ (GTK_COLOR_BUTTON (dialog->colorbutton_foreground),
|
|
+ &cvalue);
|
|
|
|
-
|
|
/* background color of pre-edit buffer */
|
|
- is_background_set = FALSE;
|
|
- color_to_gdk (PREEDIT_BACKGROUND, &background);
|
|
- if (ibus_m17n_config_get_string (config,
|
|
- context.section,
|
|
+ bvalue = FALSE;
|
|
+ _gdk_color_from_uint (PREEDIT_BACKGROUND, &cvalue);
|
|
+ if (ibus_m17n_config_get_string (dialog->config,
|
|
+ dialog->section,
|
|
"preedit_background",
|
|
&color)) {
|
|
- if (g_strcmp0 (color, "none") != 0 &&
|
|
- gdk_color_parse (color, &background))
|
|
- is_background_set = TRUE;
|
|
- g_debug ("preedit_background %d", is_background_set);
|
|
+ if (g_strcmp0 (color, "none") != 0 && gdk_color_parse (color, &cvalue))
|
|
+ bvalue = TRUE;
|
|
g_free (color);
|
|
}
|
|
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(checkbutton_background),
|
|
- is_background_set);
|
|
- g_signal_connect (checkbutton_background, "toggled",
|
|
- G_CALLBACK(on_background_toggled),
|
|
- &context);
|
|
- gtk_widget_set_sensitive (context.colorbutton_background,
|
|
- is_background_set);
|
|
+ gtk_toggle_button_set_active
|
|
+ (GTK_TOGGLE_BUTTON (dialog->checkbutton_background),
|
|
+ bvalue);
|
|
+ g_signal_connect (dialog->checkbutton_background, "toggled",
|
|
+ G_CALLBACK (on_background_toggled), dialog);
|
|
+ gtk_widget_set_sensitive (dialog->colorbutton_background, bvalue);
|
|
gtk_color_button_set_color
|
|
- (GTK_COLOR_BUTTON(context.colorbutton_background),
|
|
- &background);
|
|
- g_signal_connect (context.colorbutton_background, "color-set",
|
|
- G_CALLBACK(on_background_color_set), &context);
|
|
+ (GTK_COLOR_BUTTON (dialog->colorbutton_background),
|
|
+ &cvalue);
|
|
|
|
/* underline of pre-edit buffer */
|
|
renderer = gtk_cell_renderer_text_new ();
|
|
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT(combobox_underline),
|
|
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (dialog->combobox_underline),
|
|
renderer, TRUE);
|
|
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT(combobox_underline),
|
|
- renderer, "text", 0, NULL);
|
|
- if (!ibus_m17n_config_get_int (config,
|
|
- context.section,
|
|
+ gtk_cell_layout_set_attributes
|
|
+ (GTK_CELL_LAYOUT (dialog->combobox_underline),
|
|
+ renderer, "text", 0, NULL);
|
|
+ if (!ibus_m17n_config_get_int (dialog->config,
|
|
+ dialog->section,
|
|
"preedit_underline",
|
|
- &underline))
|
|
- underline = IBUS_ATTR_UNDERLINE_NONE;
|
|
+ &ivalue))
|
|
+ ivalue = IBUS_ATTR_UNDERLINE_NONE;
|
|
|
|
- index = get_combo_box_index_by_value (GTK_COMBO_BOX(combobox_underline),
|
|
- underline);
|
|
- gtk_combo_box_set_active (GTK_COMBO_BOX(combobox_underline), index);
|
|
- g_signal_connect (combobox_underline, "changed",
|
|
- G_CALLBACK(on_underline_changed), &context);
|
|
+ index = get_combo_box_index_by_value
|
|
+ (GTK_COMBO_BOX (dialog->combobox_underline),
|
|
+ ivalue);
|
|
+ gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combobox_underline),
|
|
+ index);
|
|
|
|
/* General -> Other */
|
|
+ /* lookup table orientation */
|
|
renderer = gtk_cell_renderer_text_new ();
|
|
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT(combobox_orientation),
|
|
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (dialog->combobox_orientation),
|
|
renderer, TRUE);
|
|
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT(combobox_orientation),
|
|
- renderer, "text", 0, NULL);
|
|
- if (!ibus_m17n_config_get_int (config,
|
|
- context.section,
|
|
+ gtk_cell_layout_set_attributes
|
|
+ (GTK_CELL_LAYOUT (dialog->combobox_orientation),
|
|
+ renderer, "text", 0, NULL);
|
|
+ if (!ibus_m17n_config_get_int (dialog->config,
|
|
+ dialog->section,
|
|
"lookup_table_orientation",
|
|
- &orientation))
|
|
- orientation = IBUS_ORIENTATION_SYSTEM;
|
|
+ &ivalue))
|
|
+ ivalue = IBUS_ORIENTATION_SYSTEM;
|
|
|
|
- index = get_combo_box_index_by_value (GTK_COMBO_BOX(combobox_orientation),
|
|
- orientation);
|
|
- gtk_combo_box_set_active (GTK_COMBO_BOX(combobox_orientation), index);
|
|
- g_signal_connect (combobox_orientation, "changed",
|
|
- G_CALLBACK(on_orientation_changed), &context);
|
|
+ index = get_combo_box_index_by_value
|
|
+ (GTK_COMBO_BOX (dialog->combobox_orientation),
|
|
+ ivalue);
|
|
+ gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combobox_orientation),
|
|
+ index);
|
|
|
|
/* Advanced -> m17n-lib configuration */
|
|
- store = gtk_list_store_new (NUM_COLS,
|
|
- G_TYPE_STRING,
|
|
- G_TYPE_STRING,
|
|
- G_TYPE_STRING);
|
|
- insert_items (store, msymbol (lang), msymbol (name));
|
|
-
|
|
- gtk_tree_view_set_model (GTK_TREE_VIEW(treeview), GTK_TREE_MODEL (store));
|
|
- gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview), -1,
|
|
- "Key",
|
|
- gtk_cell_renderer_text_new (),
|
|
- "text", COLUMN_KEY, NULL);
|
|
- g_object_set (treeview, "has-tooltip", TRUE, NULL);
|
|
- g_signal_connect (treeview, "query-tooltip", G_CALLBACK(on_query_tooltip),
|
|
- NULL);
|
|
-
|
|
- context.language = msymbol (lang);
|
|
- context.name = msymbol (name);
|
|
- context.store = store;
|
|
+ dialog->store = gtk_list_store_new (NUM_COLS,
|
|
+ G_TYPE_STRING,
|
|
+ G_TYPE_STRING,
|
|
+ G_TYPE_STRING);
|
|
+ insert_m17n_items (dialog->store, dialog->lang, dialog->name);
|
|
+
|
|
+ gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->treeview),
|
|
+ GTK_TREE_MODEL (dialog->store));
|
|
+
|
|
+ renderer = gtk_cell_renderer_text_new ();
|
|
+ gtk_tree_view_insert_column_with_attributes
|
|
+ (GTK_TREE_VIEW (dialog->treeview), -1,
|
|
+ "Key",
|
|
+ renderer,
|
|
+ "text", COLUMN_KEY,
|
|
+ NULL);
|
|
renderer = gtk_cell_renderer_text_new ();
|
|
- gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview), -1,
|
|
- "Value",
|
|
- renderer,
|
|
- "text", COLUMN_VALUE, NULL);
|
|
+ gtk_tree_view_insert_column_with_attributes
|
|
+ (GTK_TREE_VIEW (dialog->treeview), -1,
|
|
+ "Value",
|
|
+ renderer,
|
|
+ "text", COLUMN_VALUE,
|
|
+ NULL);
|
|
g_object_set (renderer, "editable", TRUE, NULL);
|
|
- g_signal_connect (renderer, "edited", G_CALLBACK(on_edited), &context);
|
|
+ g_signal_connect (renderer, "edited", G_CALLBACK (on_edited), dialog);
|
|
+
|
|
+ g_signal_connect (dialog->treeview, "query-tooltip",
|
|
+ G_CALLBACK (on_query_tooltip), NULL);
|
|
+}
|
|
+
|
|
+static gchar *
|
|
+_gdk_color_to_string (GdkColor *color)
|
|
+{
|
|
+ g_strdup_printf ("#%02X%02X%02X",
|
|
+ (color->red & 0xFF00) >> 8,
|
|
+ (color->green & 0xFF00) >> 8,
|
|
+ (color->blue & 0xFF00) >> 8);
|
|
+}
|
|
+
|
|
+static void
|
|
+save_color (SetupDialog *dialog,
|
|
+ GtkToggleButton *togglebutton,
|
|
+ GtkColorButton *colorbutton,
|
|
+ const gchar *name)
|
|
+{
|
|
+ if (gtk_toggle_button_get_active (togglebutton)) {
|
|
+ GdkColor color;
|
|
+ gchar *svalue;
|
|
+
|
|
+ gtk_color_button_get_color (colorbutton, &color);
|
|
+ svalue = _gdk_color_to_string (&color);
|
|
+ ibus_m17n_config_set_string (dialog->config,
|
|
+ dialog->section,
|
|
+ name,
|
|
+ svalue);
|
|
+ g_free (svalue);
|
|
+ } else {
|
|
+ ibus_m17n_config_set_string (dialog->config,
|
|
+ dialog->section,
|
|
+ name,
|
|
+ "none");
|
|
+ }
|
|
+}
|
|
+
|
|
+static void
|
|
+save_choice (SetupDialog *dialog,
|
|
+ GtkComboBox *combo,
|
|
+ const gchar *name)
|
|
+{
|
|
+ GtkTreeModel *model;
|
|
+ GtkTreeIter iter;
|
|
+ gint active;
|
|
+
|
|
+ model = gtk_combo_box_get_model (combo);
|
|
+ gtk_combo_box_get_active_iter (combo, &iter);
|
|
+ gtk_tree_model_get (model, &iter, COLUMN_VALUE, &active, -1);
|
|
+
|
|
+ ibus_m17n_config_set_int (dialog->config, dialog->section, name, active);
|
|
+}
|
|
+
|
|
+static gboolean
|
|
+save_m17n_options (SetupDialog *dialog)
|
|
+{
|
|
+ GtkTreeModel *model = GTK_TREE_MODEL (dialog->store);
|
|
+ GtkTreeIter iter;
|
|
+ MPlist *plist, *p, *mvalue = NULL;
|
|
+ gchar *key = NULL, *value = NULL;
|
|
+ gboolean retval = TRUE;
|
|
+
|
|
+ if (!gtk_tree_model_get_iter_first (model, &iter))
|
|
+ return;
|
|
+
|
|
+ do {
|
|
+ gtk_tree_model_get (model, &iter,
|
|
+ COLUMN_KEY, &key,
|
|
+ COLUMN_VALUE, &value,
|
|
+ -1);
|
|
+
|
|
+ plist = minput_get_variable (dialog->lang, dialog->name, msymbol (key));
|
|
+ if (!plist) {
|
|
+ retval = FALSE;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ p = mplist_next (mplist_next (mplist_next (mplist_value (plist))));
|
|
+ if (!p) {
|
|
+ retval = FALSE;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ mvalue = parse_m17n_value (p, value);
|
|
+ if (!mvalue) {
|
|
+ retval = FALSE;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ if (minput_config_variable (dialog->lang,
|
|
+ dialog->name,
|
|
+ msymbol (key),
|
|
+ mvalue) != 0) {
|
|
+ retval = FALSE;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ if (mvalue)
|
|
+ m17n_object_unref (mvalue);
|
|
+ g_free (key);
|
|
+ g_free (value);
|
|
+ mvalue = NULL;
|
|
+ key = NULL;
|
|
+ value = NULL;
|
|
+ } while (gtk_tree_model_iter_next (model, &iter));
|
|
+
|
|
+ if (retval && minput_save_config () != 1)
|
|
+ retval = FALSE;
|
|
+
|
|
+ if (mvalue)
|
|
+ m17n_object_unref (mvalue);
|
|
+ g_free (key);
|
|
+ g_free (value);
|
|
+
|
|
+ return retval;
|
|
+}
|
|
+
|
|
+static void
|
|
+setup_dialog_save_config (SetupDialog *dialog)
|
|
+{
|
|
+ save_color (dialog,
|
|
+ GTK_TOGGLE_BUTTON (dialog->checkbutton_foreground),
|
|
+ GTK_COLOR_BUTTON (dialog->colorbutton_foreground),
|
|
+ "preedit_foreground");
|
|
+ save_color (dialog,
|
|
+ GTK_TOGGLE_BUTTON (dialog->checkbutton_background),
|
|
+ GTK_COLOR_BUTTON (dialog->colorbutton_background),
|
|
+ "preedit_background");
|
|
+ save_choice (dialog,
|
|
+ GTK_COMBO_BOX (dialog->combobox_underline),
|
|
+ "preedit_underline");
|
|
+ save_choice (dialog,
|
|
+ GTK_COMBO_BOX (dialog->combobox_orientation),
|
|
+ "lookup_table_orientation");
|
|
+ save_m17n_options (dialog);
|
|
+}
|
|
+
|
|
+static SetupDialog *
|
|
+setup_dialog_new (IBusConfig *config,
|
|
+ MSymbol lang,
|
|
+ MSymbol name)
|
|
+{
|
|
+ GtkBuilder *builder;
|
|
+ SetupDialog *dialog;
|
|
+ GObject *object;
|
|
+ GError *error;
|
|
+
|
|
+ dialog = g_slice_new0 (SetupDialog);
|
|
+ dialog->config = config;
|
|
+ dialog->lang = lang;
|
|
+ dialog->name = name;
|
|
+ dialog->section = g_strdup_printf ("engine/M17N/%s/%s",
|
|
+ msymbol_name (lang),
|
|
+ msymbol_name (name));
|
|
+
|
|
+ builder = gtk_builder_new ();
|
|
+ gtk_builder_set_translation_domain (builder, "ibus-m17n");
|
|
+
|
|
+ error = NULL;
|
|
+ if (gtk_builder_add_from_file (builder,
|
|
+ SETUPDIR "/ibus-m17n-preferences.ui",
|
|
+ &error) == 0) {
|
|
+ g_error_free (error);
|
|
+ g_return_val_if_reached (NULL);
|
|
+ }
|
|
+
|
|
+ object = gtk_builder_get_object (builder, "dialog");
|
|
+ dialog->dialog = GTK_WIDGET (object);
|
|
+ object = gtk_builder_get_object (builder, "checkbutton_foreground");
|
|
+ dialog->checkbutton_foreground = GTK_WIDGET (object);
|
|
+ object = gtk_builder_get_object (builder, "colorbutton_foreground");
|
|
+ dialog->colorbutton_foreground = GTK_WIDGET (object);
|
|
+ object = gtk_builder_get_object (builder, "checkbutton_background");
|
|
+ dialog->checkbutton_background = GTK_WIDGET (object);
|
|
+ object = gtk_builder_get_object (builder, "colorbutton_background");
|
|
+ dialog->colorbutton_background = GTK_WIDGET (object);
|
|
+ object = gtk_builder_get_object (builder, "combobox_underline");
|
|
+ dialog->combobox_underline = GTK_WIDGET (object);
|
|
+ object = gtk_builder_get_object (builder, "combobox_orientation");
|
|
+ dialog->combobox_orientation = GTK_WIDGET (object);
|
|
+ object = gtk_builder_get_object (builder, "treeview_mim_config");
|
|
+ dialog->treeview = GTK_WIDGET (object);
|
|
+
|
|
+ return dialog;
|
|
+}
|
|
+
|
|
+static void
|
|
+setup_dialog_free (SetupDialog *dialog)
|
|
+{
|
|
+ gtk_widget_destroy (dialog->dialog);
|
|
+ g_free (dialog->section);
|
|
+ g_object_unref (dialog->store);
|
|
+ g_slice_free (SetupDialog, dialog);
|
|
+}
|
|
+
|
|
+static void
|
|
+start (const gchar *engine_name)
|
|
+{
|
|
+ IBusBus *bus;
|
|
+ IBusConfig *config;
|
|
+ gchar **strv, *section;
|
|
+ SetupDialog *dialog;
|
|
+ GObject *object;
|
|
+
|
|
+ ibus_init ();
|
|
+ ibus_m17n_init_common ();
|
|
+
|
|
+ strv = g_strsplit (engine_name, ":", 3);
|
|
+ g_assert (g_strv_length (strv) == 3);
|
|
+ g_assert (g_strcmp0 (strv[0], "m17n") == 0);
|
|
+
|
|
+ bus = ibus_bus_new ();
|
|
+ //g_signal_connect (bus, "disconnected", G_CALLBACK (ibus_disconnected_cb), NULL);
|
|
+ config = ibus_bus_get_config (bus);
|
|
+
|
|
+ /* strv == {"m17n", lang, name, NULL} */
|
|
+ dialog = setup_dialog_new (config, msymbol (strv[1]), msymbol (strv[2]));
|
|
+ g_strfreev (strv);
|
|
+
|
|
+ setup_dialog_load_config (dialog);
|
|
+
|
|
+ gtk_window_present (GTK_WINDOW (dialog->dialog));
|
|
+ gtk_dialog_run (GTK_DIALOG (dialog->dialog));
|
|
+
|
|
+ setup_dialog_save_config (dialog);
|
|
+ setup_dialog_free (dialog);
|
|
+
|
|
+ g_object_unref (bus);
|
|
|
|
- gtk_widget_show_all (dialog);
|
|
- gtk_dialog_run (GTK_DIALOG(dialog));
|
|
+ M17N_FINI ();
|
|
}
|
|
|
|
int
|
|
--
|
|
1.7.7.6
|
|
|
|
|
|
From 11730d65d6d62711d7f8a2ce415d1229a86dd16e Mon Sep 17 00:00:00 2001
|
|
From: Peng Huang <shawn.p.huang@gmail.com>
|
|
Date: Sun, 18 Sep 2011 22:08:00 -0400
|
|
Subject: [PATCH 03/10] Fix a crash and add some warning log message.
|
|
|
|
BUG=Crash in Chrome OS
|
|
TEST=Linux desktop
|
|
|
|
Review URL: http://codereview.appspot.com/5050041
|
|
---
|
|
src/engine.c | 19 ++++++++++++++++---
|
|
1 files changed, 16 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/engine.c b/src/engine.c
|
|
index dcff0c7..db14607 100644
|
|
--- a/src/engine.c
|
|
+++ b/src/engine.c
|
|
@@ -816,8 +816,15 @@ ibus_m17n_engine_update_lookup_table (IBusM17NEngine *m17n)
|
|
ibus_lookup_table_set_page_size (m17n->table, mtext_len (mt));
|
|
|
|
buf = ibus_m17n_mtext_to_ucs4 (mt, &nchars);
|
|
- for (i = 0; i < nchars; i++) {
|
|
- ibus_lookup_table_append_candidate (m17n->table, ibus_text_new_from_unichar (buf[i]));
|
|
+ g_warn_if_fail (buf != NULL);
|
|
+
|
|
+ for (i = 0; buf != NULL && i < nchars; i++) {
|
|
+ IBusText *text = ibus_text_new_from_unichar (buf[i]);
|
|
+ if (text == NULL) {
|
|
+ text = ibus_text_new_from_printf ("INVCODE=U+08X%", buf[i]);
|
|
+ g_warn_if_reached ();
|
|
+ }
|
|
+ ibus_lookup_table_append_candidate (m17n->table, text);
|
|
}
|
|
g_free (buf);
|
|
}
|
|
@@ -834,9 +841,15 @@ ibus_m17n_engine_update_lookup_table (IBusM17NEngine *m17n)
|
|
mtext = (MText *) mplist_value (p);
|
|
buf = ibus_m17n_mtext_to_utf8 (mtext);
|
|
if (buf) {
|
|
- ibus_lookup_table_append_candidate (m17n->table, ibus_text_new_from_string (buf));
|
|
+ ibus_lookup_table_append_candidate (m17n->table,
|
|
+ ibus_text_new_from_string (buf));
|
|
g_free (buf);
|
|
}
|
|
+ else {
|
|
+ ibus_lookup_table_append_candidate (m17n->table,
|
|
+ ibus_text_new_from_static_string ("NULL"));
|
|
+ g_warn_if_reached();
|
|
+ }
|
|
}
|
|
}
|
|
|
|
--
|
|
1.7.7.6
|
|
|
|
|
|
From f53d61029aac81559b82fa235216748e42e4850a Mon Sep 17 00:00:00 2001
|
|
From: Daiki Ueno <ueno@unixuser.org>
|
|
Date: Tue, 27 Dec 2011 09:48:04 +0900
|
|
Subject: [PATCH 04/10] Supply custom setup element in EngineDesc.
|
|
|
|
BUG=RHBZ#760427
|
|
TEST=manually
|
|
|
|
Review URL: http://codereview.appspot.com/5500079
|
|
---
|
|
src/m17nutil.c | 5 +++++
|
|
1 files changed, 5 insertions(+), 0 deletions(-)
|
|
|
|
diff --git a/src/m17nutil.c b/src/m17nutil.c
|
|
index 54561f2..bc9155a 100644
|
|
--- a/src/m17nutil.c
|
|
+++ b/src/m17nutil.c
|
|
@@ -114,6 +114,7 @@ ibus_m17n_engine_new (MSymbol lang,
|
|
gchar *engine_title;
|
|
gchar *engine_icon;
|
|
gchar *engine_desc;
|
|
+ gchar *engine_setup;
|
|
|
|
engine_name = g_strdup_printf ("m17n:%s:%s", msymbol_name (lang), msymbol_name (name));
|
|
|
|
@@ -121,6 +122,8 @@ ibus_m17n_engine_new (MSymbol lang,
|
|
engine_title = ibus_m17n_mtext_to_utf8 (title);
|
|
engine_icon = ibus_m17n_mtext_to_utf8 (icon);
|
|
engine_desc = ibus_m17n_mtext_to_utf8 (desc);
|
|
+ engine_setup = g_strdup_printf ("%s/ibus-setup-m17n --name %s",
|
|
+ LIBEXECDIR, engine_name);
|
|
|
|
#if IBUS_CHECK_VERSION(1,3,99)
|
|
engine = ibus_engine_desc_new_varargs ("name", engine_name,
|
|
@@ -131,6 +134,7 @@ ibus_m17n_engine_new (MSymbol lang,
|
|
"icon", engine_icon ? engine_icon : "",
|
|
"layout", "us",
|
|
"rank", config->rank,
|
|
+ "setup", engine_setup,
|
|
NULL);
|
|
#else
|
|
engine = ibus_engine_desc_new (engine_name,
|
|
@@ -149,6 +153,7 @@ ibus_m17n_engine_new (MSymbol lang,
|
|
g_free (engine_title);
|
|
g_free (engine_icon);
|
|
g_free (engine_desc);
|
|
+ g_free (engine_setup);
|
|
|
|
return engine;
|
|
}
|
|
--
|
|
1.7.7.6
|
|
|
|
|
|
From 6c517a7c18254297cee745f16b96deb1033c55c5 Mon Sep 17 00:00:00 2001
|
|
From: Peng Huang <shawn.p.huang@gmail.com>
|
|
Date: Fri, 6 Jan 2012 10:21:19 -0500
|
|
Subject: [PATCH 05/10] Fix a typo.
|
|
|
|
BUG=None
|
|
TEST=Manually
|
|
|
|
Review URL: http://codereview.appspot.com/5524043
|
|
---
|
|
src/engine.c | 2 +-
|
|
1 files changed, 1 insertions(+), 1 deletions(-)
|
|
|
|
diff --git a/src/engine.c b/src/engine.c
|
|
index db14607..c2b30e1 100644
|
|
--- a/src/engine.c
|
|
+++ b/src/engine.c
|
|
@@ -821,7 +821,7 @@ ibus_m17n_engine_update_lookup_table (IBusM17NEngine *m17n)
|
|
for (i = 0; buf != NULL && i < nchars; i++) {
|
|
IBusText *text = ibus_text_new_from_unichar (buf[i]);
|
|
if (text == NULL) {
|
|
- text = ibus_text_new_from_printf ("INVCODE=U+08X%", buf[i]);
|
|
+ text = ibus_text_new_from_printf ("INVCODE=U+%04"G_GINT32_FORMAT"X", buf[i]);
|
|
g_warn_if_reached ();
|
|
}
|
|
ibus_lookup_table_append_candidate (m17n->table, text);
|
|
--
|
|
1.7.7.6
|
|
|
|
|
|
From e2902f6c6efc5bf2b55019140ea8ed82fc977369 Mon Sep 17 00:00:00 2001
|
|
From: Daiki Ueno <ueno@unixuser.org>
|
|
Date: Tue, 14 Feb 2012 11:54:07 +0900
|
|
Subject: [PATCH 06/10] Require ibus-1.4 or later and use
|
|
ibus_config_get_values.
|
|
|
|
BUG=none
|
|
TEST=manually
|
|
|
|
Review URL: https://codereview.appspot.com/5654073
|
|
---
|
|
configure.ac | 11 +---
|
|
src/engine.c | 109 +++++++++++++++++-----------------
|
|
src/m17nutil.c | 98 ------------------------------
|
|
src/m17nutil.h | 16 -----
|
|
src/setup.c | 179 ++++++++++++++++++++++++++++++--------------------------
|
|
5 files changed, 150 insertions(+), 263 deletions(-)
|
|
|
|
diff --git a/configure.ac b/configure.ac
|
|
index 927d382..be9728d 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -52,7 +52,7 @@ AM_PROG_LIBTOOL
|
|
|
|
# check ibus
|
|
PKG_CHECK_MODULES(IBUS, [
|
|
- ibus-1.0 >= 1.3
|
|
+ ibus-1.0 >= 1.4
|
|
])
|
|
|
|
# check m17n
|
|
@@ -97,15 +97,6 @@ AC_REPLACE_FUNCS([minput_list])
|
|
CFLAGS="$save_CFLAGS"
|
|
LIBS="$save_LIBS"
|
|
|
|
-# check if ibus_engine_get_surrounding_text, which is available in ibus-1.3.99+ (git master)
|
|
-save_CFLAGS="$CFLAGS"
|
|
-save_LIBS="$LIBS"
|
|
-CFLAGS="$CFLAGS $IBUS_CFLAGS"
|
|
-LIBS="$LIBS $IBUS_LIBS"
|
|
-AC_CHECK_FUNCS([ibus_engine_get_surrounding_text])
|
|
-CFLAGS="$save_CFLAGS"
|
|
-LIBS="$save_LIBS"
|
|
-
|
|
# define GETTEXT_* variables
|
|
GETTEXT_PACKAGE=ibus-m17n
|
|
AC_SUBST(GETTEXT_PACKAGE)
|
|
diff --git a/src/engine.c b/src/engine.c
|
|
index c2b30e1..051b63c 100644
|
|
--- a/src/engine.c
|
|
+++ b/src/engine.c
|
|
@@ -43,11 +43,7 @@ static void ibus_m17n_engine_class_init (IBusM17NEngineClass *klass);
|
|
static void ibus_m17n_config_value_changed (IBusConfig *config,
|
|
const gchar *section,
|
|
const gchar *name,
|
|
-#if IBUS_CHECK_VERSION(1,3,99)
|
|
GVariant *value,
|
|
-#else
|
|
- GValue *value,
|
|
-#endif /* !IBUS_CHECK_VERSION(1,3,99) */
|
|
IBusM17NEngineClass *klass);
|
|
|
|
static GObject*
|
|
@@ -215,7 +211,7 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
|
|
IBusEngineClass *engine_class = IBUS_ENGINE_CLASS (klass);
|
|
gchar *engine_name, *lang = NULL, *name = NULL;
|
|
IBusM17NEngineConfig *engine_config;
|
|
- gchar *hex;
|
|
+ GVariant *values;
|
|
|
|
if (parent_class == NULL)
|
|
parent_class = (IBusEngineClass *) g_type_class_peek_parent (klass);
|
|
@@ -251,46 +247,61 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
|
|
g_free (lang);
|
|
g_free (name);
|
|
|
|
+ engine_config = ibus_m17n_get_engine_config (engine_name);
|
|
+ g_free (engine_name);
|
|
+
|
|
/* configurations are per class */
|
|
- klass->preedit_foreground = INVALID_COLOR;
|
|
- klass->preedit_background = INVALID_COLOR;
|
|
+ klass->preedit_foreground = engine_config->preedit_highlight ?
|
|
+ PREEDIT_FOREGROUND :
|
|
+ INVALID_COLOR;
|
|
+ klass->preedit_background = engine_config->preedit_highlight ?
|
|
+ PREEDIT_BACKGROUND :
|
|
+ INVALID_COLOR;
|
|
klass->preedit_underline = IBUS_ATTR_UNDERLINE_NONE;
|
|
klass->lookup_table_orientation = IBUS_ORIENTATION_SYSTEM;
|
|
|
|
- engine_config = ibus_m17n_get_engine_config (engine_name);
|
|
- g_free (engine_name);
|
|
+ ibus_m17n_engine_config_free (engine_config);
|
|
+
|
|
+ values = ibus_config_get_values (config,
|
|
+ klass->config_section);
|
|
+ if (values != NULL) {
|
|
+ GVariant *value;
|
|
+
|
|
+ value = g_variant_lookup_value (values,
|
|
+ "preedit_foreground",
|
|
+ G_VARIANT_TYPE_STRING);
|
|
+ if (value != NULL) {
|
|
+ const gchar *hex = g_variant_get_string (value, NULL);
|
|
+ klass->preedit_foreground = ibus_m17n_parse_color (hex);
|
|
+ }
|
|
+ g_variant_unref (value);
|
|
+
|
|
+ value = g_variant_lookup_value (values,
|
|
+ "preedit_background",
|
|
+ G_VARIANT_TYPE_STRING);
|
|
+ if (value != NULL) {
|
|
+ const gchar *hex = g_variant_get_string (value, NULL);
|
|
+ klass->preedit_background = ibus_m17n_parse_color (hex);
|
|
+ }
|
|
+ g_variant_unref (value);
|
|
|
|
- if (ibus_m17n_config_get_string (config,
|
|
- klass->config_section,
|
|
- "preedit_foreground",
|
|
- &hex)) {
|
|
- klass->preedit_foreground = ibus_m17n_parse_color (hex);
|
|
- g_free (hex);
|
|
- } else if (engine_config->preedit_highlight)
|
|
- klass->preedit_foreground = PREEDIT_FOREGROUND;
|
|
-
|
|
- if (ibus_m17n_config_get_string (config,
|
|
- klass->config_section,
|
|
- "preedit_background",
|
|
- &hex)) {
|
|
- klass->preedit_background = ibus_m17n_parse_color (hex);
|
|
- g_free (hex);
|
|
- } else if (engine_config->preedit_highlight)
|
|
- klass->preedit_background = PREEDIT_BACKGROUND;
|
|
-
|
|
- if (!ibus_m17n_config_get_int (config,
|
|
- klass->config_section,
|
|
- "preedit_underline",
|
|
- &klass->preedit_underline))
|
|
- klass->preedit_underline = IBUS_ATTR_UNDERLINE_NONE;
|
|
-
|
|
- if (!ibus_m17n_config_get_int (config,
|
|
- klass->config_section,
|
|
- "lookup_table_orientation",
|
|
- &klass->lookup_table_orientation))
|
|
- klass->lookup_table_orientation = IBUS_ORIENTATION_SYSTEM;
|
|
+ value = g_variant_lookup_value (values,
|
|
+ "preedit_underline",
|
|
+ G_VARIANT_TYPE_INT32);
|
|
+ if (value != NULL) {
|
|
+ klass->preedit_background = g_variant_get_int32 (value);
|
|
+ }
|
|
+ g_variant_unref (value);
|
|
|
|
- ibus_m17n_engine_config_free (engine_config);
|
|
+ value = g_variant_lookup_value (values,
|
|
+ "lookup_table_orientation",
|
|
+ G_VARIANT_TYPE_INT32);
|
|
+ if (value != NULL) {
|
|
+ klass->lookup_table_orientation = g_variant_get_int32 (value);
|
|
+ }
|
|
+ g_variant_unref (value);
|
|
+ g_variant_unref (values);
|
|
+ }
|
|
|
|
g_signal_connect (config, "value-changed",
|
|
G_CALLBACK(ibus_m17n_config_value_changed),
|
|
@@ -299,44 +310,32 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
|
|
klass->im = NULL;
|
|
}
|
|
|
|
-#if IBUS_CHECK_VERSION(1,3,99)
|
|
-#define _g_variant_get_string g_variant_get_string
|
|
-#define _g_variant_get_int32 g_variant_get_int32
|
|
-#else
|
|
-#define _g_variant_get_string(value, length) g_value_get_string(value)
|
|
-#define _g_variant_get_int32 g_value_get_int
|
|
-#endif /* !IBUS_CHECK_VERSION(1,3,99) */
|
|
-
|
|
static void
|
|
ibus_m17n_config_value_changed (IBusConfig *config,
|
|
const gchar *section,
|
|
const gchar *name,
|
|
-#if IBUS_CHECK_VERSION(1,3,99)
|
|
GVariant *value,
|
|
-#else
|
|
- GValue *value,
|
|
-#endif /* !IBUS_CHECK_VERSION(1,3,99) */
|
|
IBusM17NEngineClass *klass)
|
|
{
|
|
if (g_strcmp0 (section, klass->config_section) == 0) {
|
|
if (g_strcmp0 (name, "preedit_foreground") == 0) {
|
|
- const gchar *hex = _g_variant_get_string (value, NULL);
|
|
+ const gchar *hex = g_variant_get_string (value, NULL);
|
|
guint color;
|
|
color = ibus_m17n_parse_color (hex);
|
|
if (color != INVALID_COLOR) {
|
|
klass->preedit_foreground = color;
|
|
}
|
|
} else if (g_strcmp0 (name, "preedit_background") == 0) {
|
|
- const gchar *hex = _g_variant_get_string (value, NULL);
|
|
+ const gchar *hex = g_variant_get_string (value, NULL);
|
|
guint color;
|
|
color = ibus_m17n_parse_color (hex);
|
|
if (color != INVALID_COLOR) {
|
|
klass->preedit_background = color;
|
|
}
|
|
} else if (g_strcmp0 (name, "preedit_underline") == 0) {
|
|
- klass->preedit_underline = _g_variant_get_int32 (value);
|
|
+ klass->preedit_underline = g_variant_get_int32 (value);
|
|
} else if (g_strcmp0 (name, "lookup_table_orientation") == 0) {
|
|
- klass->lookup_table_orientation = _g_variant_get_int32 (value);
|
|
+ klass->lookup_table_orientation = g_variant_get_int32 (value);
|
|
}
|
|
}
|
|
}
|
|
diff --git a/src/m17nutil.c b/src/m17nutil.c
|
|
index bc9155a..9fa5517 100644
|
|
--- a/src/m17nutil.c
|
|
+++ b/src/m17nutil.c
|
|
@@ -373,101 +373,3 @@ ibus_m17n_get_component (void)
|
|
|
|
return component;
|
|
}
|
|
-
|
|
-void
|
|
-ibus_m17n_config_set_string (IBusConfig *config,
|
|
- const gchar *section,
|
|
- const gchar *name,
|
|
- const gchar *value)
|
|
-{
|
|
-#if IBUS_CHECK_VERSION(1,3,99)
|
|
- ibus_config_set_value (config, section, name, g_variant_new_string (value));
|
|
-#else
|
|
- GValue v = { 0 };
|
|
-
|
|
- g_value_init (&v, G_TYPE_STRING);
|
|
- g_value_set_string (&v, value);
|
|
- ibus_config_set_value (config, section, name, &v);
|
|
-#endif /* !IBUS_CHECK_VERSION(1,3,99) */
|
|
-}
|
|
-
|
|
-gboolean
|
|
-ibus_m17n_config_get_string (IBusConfig *config,
|
|
- const gchar *section,
|
|
- const gchar *name,
|
|
- gchar **result)
|
|
-{
|
|
-#if IBUS_CHECK_VERSION(1,3,99)
|
|
- GVariant *value = NULL;
|
|
-
|
|
- g_return_val_if_fail (result != NULL, FALSE);
|
|
-
|
|
- value = ibus_config_get_value (config, section, name);
|
|
- if (value) {
|
|
- *result = g_strdup (g_variant_get_string (value, NULL));
|
|
- g_variant_unref (value);
|
|
- return TRUE;
|
|
- }
|
|
- return FALSE;
|
|
-#else
|
|
- GValue value = { 0 };
|
|
-
|
|
- g_return_val_if_fail (result != NULL, FALSE);
|
|
-
|
|
- if (ibus_config_get_value (config, section, name, &value)) {
|
|
- *result = g_strdup (g_value_get_string (&value));
|
|
- g_value_unset (&value);
|
|
- return TRUE;
|
|
- }
|
|
- return FALSE;
|
|
-#endif /* !IBUS_CHECK_VERSION(1,3,99) */
|
|
-}
|
|
-
|
|
-void
|
|
-ibus_m17n_config_set_int (IBusConfig *config,
|
|
- const gchar *section,
|
|
- const gchar *name,
|
|
- gint value)
|
|
-{
|
|
-#if IBUS_CHECK_VERSION(1,3,99)
|
|
- ibus_config_set_value (config, section, name, g_variant_new_int32 (value));
|
|
-#else
|
|
- GValue v = { 0 };
|
|
-
|
|
- g_value_init (&v, G_TYPE_INT);
|
|
- g_value_set_int (&v, value);
|
|
- ibus_config_set_value (config, section, name, &v);
|
|
-#endif /* !IBUS_CHECK_VERSION(1,3,99) */
|
|
-}
|
|
-
|
|
-gboolean
|
|
-ibus_m17n_config_get_int (IBusConfig *config,
|
|
- const gchar *section,
|
|
- const gchar *name,
|
|
- gint *result)
|
|
-{
|
|
-#if IBUS_CHECK_VERSION(1,3,99)
|
|
- GVariant *value = NULL;
|
|
-
|
|
- g_return_val_if_fail (result != NULL, FALSE);
|
|
-
|
|
- value = ibus_config_get_value (config, section, name);
|
|
- if (value) {
|
|
- *result = g_variant_get_int32 (value);
|
|
- g_variant_unref (value);
|
|
- return TRUE;
|
|
- }
|
|
- return FALSE;
|
|
-#else
|
|
- GValue value = { 0 };
|
|
-
|
|
- g_return_val_if_fail (result != NULL, FALSE);
|
|
-
|
|
- if (ibus_config_get_value (config, section, name, &value)) {
|
|
- *result = g_value_get_int (&value);
|
|
- g_value_unset (&value);
|
|
- return TRUE;
|
|
- }
|
|
- return FALSE;
|
|
-#endif /* !IBUS_CHECK_VERSION(1,3,99) */
|
|
-}
|
|
diff --git a/src/m17nutil.h b/src/m17nutil.h
|
|
index 313e7bc..b21244c 100644
|
|
--- a/src/m17nutil.h
|
|
+++ b/src/m17nutil.h
|
|
@@ -31,20 +31,4 @@ guint ibus_m17n_parse_color (const gchar *hex);
|
|
IBusM17NEngineConfig
|
|
*ibus_m17n_get_engine_config (const gchar *engine_name);
|
|
void ibus_m17n_engine_config_free (IBusM17NEngineConfig *config);
|
|
-void ibus_m17n_config_set_string (IBusConfig *config,
|
|
- const gchar *section,
|
|
- const gchar *name,
|
|
- const gchar *value);
|
|
-gboolean ibus_m17n_config_get_string (IBusConfig *config,
|
|
- const gchar *section,
|
|
- const gchar *name,
|
|
- gchar **result);
|
|
-void ibus_m17n_config_set_int (IBusConfig *config,
|
|
- const gchar *section,
|
|
- const gchar *name,
|
|
- gint value);
|
|
-gboolean ibus_m17n_config_get_int (IBusConfig *config,
|
|
- const gchar *section,
|
|
- const gchar *name,
|
|
- gint *result);
|
|
#endif
|
|
diff --git a/src/setup.c b/src/setup.c
|
|
index 02db691..7b9609b 100644
|
|
--- a/src/setup.c
|
|
+++ b/src/setup.c
|
|
@@ -234,97 +234,107 @@ _gdk_color_from_uint (guint color,
|
|
}
|
|
|
|
static void
|
|
-setup_dialog_load_config (SetupDialog *dialog)
|
|
+load_color (GVariant *values,
|
|
+ GtkToggleButton *togglebutton,
|
|
+ GtkColorButton *colorbutton,
|
|
+ const gchar *name,
|
|
+ GdkColor *defval)
|
|
{
|
|
- gchar *color;
|
|
+ GVariant *value;
|
|
gboolean bvalue;
|
|
- gint ivalue;
|
|
GdkColor cvalue;
|
|
- GtkCellRenderer *renderer;
|
|
- gint index;
|
|
|
|
- /* General -> Pre-edit Appearance */
|
|
- /* foreground color of pre-edit buffer */
|
|
+ memcpy (&cvalue, defval, sizeof (GdkColor));
|
|
+
|
|
bvalue = FALSE;
|
|
- _gdk_color_from_uint (PREEDIT_FOREGROUND, &cvalue);
|
|
- if (ibus_m17n_config_get_string (dialog->config,
|
|
- dialog->section,
|
|
- "preedit_foreground",
|
|
- &color)) {
|
|
- if (g_strcmp0 (color, "none") != 0 && gdk_color_parse (color, &cvalue))
|
|
+ value = g_variant_lookup_value (values, name, G_VARIANT_TYPE_STRING);
|
|
+ if (value != NULL) {
|
|
+ const gchar *color = g_variant_get_string (value, NULL);
|
|
+ if (g_strcmp0 (color, "none") != 0 &&
|
|
+ gdk_color_parse (color, &cvalue))
|
|
bvalue = TRUE;
|
|
- g_free (color);
|
|
+ g_variant_unref (value);
|
|
}
|
|
|
|
- gtk_toggle_button_set_active
|
|
- (GTK_TOGGLE_BUTTON (dialog->checkbutton_foreground),
|
|
- bvalue);
|
|
+ gtk_toggle_button_set_active (togglebutton, bvalue);
|
|
+ gtk_widget_set_sensitive (GTK_WIDGET (colorbutton), bvalue);
|
|
+ gtk_color_button_set_color (GTK_COLOR_BUTTON (colorbutton), &cvalue);
|
|
+}
|
|
+
|
|
+static void
|
|
+load_choice (GVariant *values,
|
|
+ GtkComboBox *combo,
|
|
+ const gchar *name,
|
|
+ gint defval)
|
|
+{
|
|
+ GVariant *value;
|
|
+ gint ivalue, index;
|
|
+ GtkCellRenderer *renderer;
|
|
+
|
|
+ renderer = gtk_cell_renderer_text_new ();
|
|
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
|
|
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo),
|
|
+ renderer, "text", 0, NULL);
|
|
+
|
|
+ ivalue = defval;
|
|
+ value = g_variant_lookup_value (values, name, G_VARIANT_TYPE_INT32);
|
|
+ if (value != NULL) {
|
|
+ ivalue = g_variant_get_int32 (value);
|
|
+ g_variant_unref (value);
|
|
+ }
|
|
+
|
|
+ index = get_combo_box_index_by_value (GTK_COMBO_BOX (combo), ivalue);
|
|
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo), index);
|
|
+}
|
|
+
|
|
+static void
|
|
+setup_dialog_load_config (SetupDialog *dialog)
|
|
+{
|
|
+ GVariant *values;
|
|
+ GdkColor defcol;
|
|
+ GtkCellRenderer *renderer;
|
|
+
|
|
+ values = ibus_config_get_values (dialog->config, dialog->section);
|
|
+ /* ibus_config_get_values may return NULL on failure */
|
|
+ if (values == NULL) {
|
|
+ GVariantType *child_type = g_variant_type_new ("{sv}");
|
|
+ values = g_variant_new_array (child_type, NULL, 0);
|
|
+ g_variant_type_free (child_type);
|
|
+ }
|
|
+
|
|
+ /* General -> Pre-edit Appearance */
|
|
+ /* foreground color of pre-edit buffer */
|
|
+ _gdk_color_from_uint (PREEDIT_FOREGROUND, &defcol);
|
|
+ load_color (values,
|
|
+ GTK_TOGGLE_BUTTON (dialog->checkbutton_foreground),
|
|
+ GTK_COLOR_BUTTON (dialog->colorbutton_foreground),
|
|
+ "preedit_foreground",
|
|
+ &defcol);
|
|
g_signal_connect (dialog->checkbutton_foreground, "toggled",
|
|
G_CALLBACK (on_foreground_toggled), dialog);
|
|
- gtk_widget_set_sensitive (dialog->colorbutton_foreground, bvalue);
|
|
- gtk_color_button_set_color
|
|
- (GTK_COLOR_BUTTON (dialog->colorbutton_foreground),
|
|
- &cvalue);
|
|
|
|
/* background color of pre-edit buffer */
|
|
- bvalue = FALSE;
|
|
- _gdk_color_from_uint (PREEDIT_BACKGROUND, &cvalue);
|
|
- if (ibus_m17n_config_get_string (dialog->config,
|
|
- dialog->section,
|
|
- "preedit_background",
|
|
- &color)) {
|
|
- if (g_strcmp0 (color, "none") != 0 && gdk_color_parse (color, &cvalue))
|
|
- bvalue = TRUE;
|
|
- g_free (color);
|
|
- }
|
|
- gtk_toggle_button_set_active
|
|
- (GTK_TOGGLE_BUTTON (dialog->checkbutton_background),
|
|
- bvalue);
|
|
+ _gdk_color_from_uint (PREEDIT_BACKGROUND, &defcol);
|
|
+ load_color (values,
|
|
+ GTK_TOGGLE_BUTTON (dialog->checkbutton_background),
|
|
+ GTK_COLOR_BUTTON (dialog->colorbutton_background),
|
|
+ "preedit_background",
|
|
+ &defcol);
|
|
g_signal_connect (dialog->checkbutton_background, "toggled",
|
|
G_CALLBACK (on_background_toggled), dialog);
|
|
- gtk_widget_set_sensitive (dialog->colorbutton_background, bvalue);
|
|
- gtk_color_button_set_color
|
|
- (GTK_COLOR_BUTTON (dialog->colorbutton_background),
|
|
- &cvalue);
|
|
|
|
/* underline of pre-edit buffer */
|
|
- renderer = gtk_cell_renderer_text_new ();
|
|
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (dialog->combobox_underline),
|
|
- renderer, TRUE);
|
|
- gtk_cell_layout_set_attributes
|
|
- (GTK_CELL_LAYOUT (dialog->combobox_underline),
|
|
- renderer, "text", 0, NULL);
|
|
- if (!ibus_m17n_config_get_int (dialog->config,
|
|
- dialog->section,
|
|
- "preedit_underline",
|
|
- &ivalue))
|
|
- ivalue = IBUS_ATTR_UNDERLINE_NONE;
|
|
-
|
|
- index = get_combo_box_index_by_value
|
|
- (GTK_COMBO_BOX (dialog->combobox_underline),
|
|
- ivalue);
|
|
- gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combobox_underline),
|
|
- index);
|
|
+ load_choice (values,
|
|
+ GTK_COMBO_BOX (dialog->combobox_underline),
|
|
+ "preedit_underline",
|
|
+ IBUS_ATTR_UNDERLINE_NONE);
|
|
|
|
/* General -> Other */
|
|
/* lookup table orientation */
|
|
- renderer = gtk_cell_renderer_text_new ();
|
|
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (dialog->combobox_orientation),
|
|
- renderer, TRUE);
|
|
- gtk_cell_layout_set_attributes
|
|
- (GTK_CELL_LAYOUT (dialog->combobox_orientation),
|
|
- renderer, "text", 0, NULL);
|
|
- if (!ibus_m17n_config_get_int (dialog->config,
|
|
- dialog->section,
|
|
- "lookup_table_orientation",
|
|
- &ivalue))
|
|
- ivalue = IBUS_ORIENTATION_SYSTEM;
|
|
-
|
|
- index = get_combo_box_index_by_value
|
|
- (GTK_COMBO_BOX (dialog->combobox_orientation),
|
|
- ivalue);
|
|
- gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combobox_orientation),
|
|
- index);
|
|
+ load_choice (values,
|
|
+ GTK_COMBO_BOX (dialog->combobox_orientation),
|
|
+ "lookup_table_orientation",
|
|
+ IBUS_ORIENTATION_SYSTEM);
|
|
|
|
/* Advanced -> m17n-lib configuration */
|
|
dialog->store = gtk_list_store_new (NUM_COLS,
|
|
@@ -355,6 +365,8 @@ setup_dialog_load_config (SetupDialog *dialog)
|
|
|
|
g_signal_connect (dialog->treeview, "query-tooltip",
|
|
G_CALLBACK (on_query_tooltip), NULL);
|
|
+
|
|
+ g_variant_unref (values);
|
|
}
|
|
|
|
static gchar *
|
|
@@ -372,23 +384,20 @@ save_color (SetupDialog *dialog,
|
|
GtkColorButton *colorbutton,
|
|
const gchar *name)
|
|
{
|
|
+ GVariant *value;
|
|
+
|
|
if (gtk_toggle_button_get_active (togglebutton)) {
|
|
GdkColor color;
|
|
- gchar *svalue;
|
|
|
|
gtk_color_button_get_color (colorbutton, &color);
|
|
- svalue = _gdk_color_to_string (&color);
|
|
- ibus_m17n_config_set_string (dialog->config,
|
|
- dialog->section,
|
|
- name,
|
|
- svalue);
|
|
- g_free (svalue);
|
|
+ value = g_variant_new_string (_gdk_color_to_string (&color));
|
|
} else {
|
|
- ibus_m17n_config_set_string (dialog->config,
|
|
- dialog->section,
|
|
- name,
|
|
- "none");
|
|
+ value = g_variant_new_string ("none");
|
|
}
|
|
+ ibus_config_set_value (dialog->config,
|
|
+ dialog->section,
|
|
+ name,
|
|
+ value);
|
|
}
|
|
|
|
static void
|
|
@@ -399,12 +408,14 @@ save_choice (SetupDialog *dialog,
|
|
GtkTreeModel *model;
|
|
GtkTreeIter iter;
|
|
gint active;
|
|
+ GVariant *value;
|
|
|
|
model = gtk_combo_box_get_model (combo);
|
|
gtk_combo_box_get_active_iter (combo, &iter);
|
|
gtk_tree_model_get (model, &iter, COLUMN_VALUE, &active, -1);
|
|
|
|
- ibus_m17n_config_set_int (dialog->config, dialog->section, name, active);
|
|
+ value = g_variant_new_int32 (active);
|
|
+ ibus_config_set_value (dialog->config, dialog->section, name, value);
|
|
}
|
|
|
|
static gboolean
|
|
--
|
|
1.7.7.6
|
|
|
|
|
|
From 74f230fac8be43fa65380ff133ed4ef24bf55a57 Mon Sep 17 00:00:00 2001
|
|
From: Daiki Ueno <ueno@unixuser.org>
|
|
Date: Wed, 15 Feb 2012 09:50:59 +0900
|
|
Subject: [PATCH 07/10] Define "symbol" in each IBusEngineDesc.
|
|
|
|
BUG=none
|
|
TEST=manually on Fedora 16
|
|
|
|
Review URL: https://codereview.appspot.com/5647062
|
|
---
|
|
src/default.xml.in.in | 206 +++++++++++++++++++++++++++++++++++++++++++++++++
|
|
src/m17nutil.c | 23 +++---
|
|
src/m17nutil.h | 3 +
|
|
3 files changed, 219 insertions(+), 13 deletions(-)
|
|
|
|
diff --git a/src/default.xml.in.in b/src/default.xml.in.in
|
|
index dc93fd3..1248d48 100644
|
|
--- a/src/default.xml.in.in
|
|
+++ b/src/default.xml.in.in
|
|
@@ -10,6 +10,7 @@
|
|
<name>m17n:*</name>
|
|
<rank>0</rank>
|
|
<preedit-highlight>FALSE</preedit-highlight>
|
|
+ <symbol></symbol>
|
|
</engine>
|
|
<!-- Indic engines should be selected by default:
|
|
https://bugzilla.redhat.com/show_bug.cgi?id=640896 -->
|
|
@@ -194,4 +195,209 @@
|
|
<name>m17n:ja:anthy</name>
|
|
<preedit-highlight>TRUE</preedit-highlight>
|
|
</engine>
|
|
+ <!-- Set IME symbols. -->
|
|
+ <engine>
|
|
+ <name>m17n:as:*</name>
|
|
+ <symbol>অ</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:bn:*</name>
|
|
+ <symbol>বা</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:gu:*</name>
|
|
+ <symbol>ગુ</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:hi:*</name>
|
|
+ <symbol>हिं</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:kn:*</name>
|
|
+ <symbol>ಕ</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:ks:*</name>
|
|
+ <symbol>क</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:mai:*</name>
|
|
+ <symbol>मै</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:ml:*</name>
|
|
+ <symbol>മ</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:mr:*</name>
|
|
+ <symbol>म</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:ne:*</name>
|
|
+ <symbol>ने</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:or:*</name>
|
|
+ <symbol>ଓ</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:pa:*</name>
|
|
+ <symbol>ਪੰ</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:sa:*</name>
|
|
+ <symbol>सं</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:sd:*</name>
|
|
+ <symbol>सिं</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:si:*</name>
|
|
+ <symbol>සි</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:ta:*</name>
|
|
+ <symbol>த</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:te:*</name>
|
|
+ <symbol>తె</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:*:kbd</name>
|
|
+ <symbol></symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:*:pre</name>
|
|
+ <symbol></symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:*:post</name>
|
|
+ <symbol></symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:am:sera</name>
|
|
+ <symbol>አ</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:bo:*</name>
|
|
+ <symbol>ཀ</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:cr:*</name>
|
|
+ <symbol></symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:dv:*</name>
|
|
+ <symbol></symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:eo:*</name>
|
|
+ <symbol></symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:fa:*</name>
|
|
+ <symbol>ف</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:fr:*</name>
|
|
+ <symbol></symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:ii:*</name>
|
|
+ <symbol></symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:iu:*</name>
|
|
+ <symbol></symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:ja:anthy</name>
|
|
+ <symbol>あ</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:kk:*</name>
|
|
+ <symbol>قا</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:km:*</name>
|
|
+ <symbol>ក</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:lo:*</name>
|
|
+ <symbol>ກ</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:nsk:*</name>
|
|
+ <symbol></symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:oj:*</name>
|
|
+ <symbol></symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:ps:*</name>
|
|
+ <symbol></symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:ru:*</name>
|
|
+ <symbol>Я</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:sv:*</name>
|
|
+ <symbol></symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:syrc:*</name>
|
|
+ <symbol></symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:tai:*</name>
|
|
+ <symbol>꫞</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:th:*</name>
|
|
+ <symbol>ท</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:ur:*</name>
|
|
+ <symbol>خ</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:vi:han</name>
|
|
+ <symbol>越</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:vi:nom*</name>
|
|
+ <symbol>喃</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:vi:*</name>
|
|
+ <symbol>Ắ</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:yi:*</name>
|
|
+ <symbol></symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:zh:bopomofo</name>
|
|
+ <symbol>ㄅ</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:zh:cangjie</name>
|
|
+ <symbol>倉</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:zh:py*</name>
|
|
+ <symbol>拼</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:zh:quick</name>
|
|
+ <symbol>簡</symbol>
|
|
+ </engine>
|
|
+ <engine>
|
|
+ <name>m17n:zh:tonepy*</name>
|
|
+ <symbol>调</symbol>
|
|
+ </engine>
|
|
</engines>
|
|
diff --git a/src/m17nutil.c b/src/m17nutil.c
|
|
index 9fa5517..975214d 100644
|
|
--- a/src/m17nutil.c
|
|
+++ b/src/m17nutil.c
|
|
@@ -15,7 +15,8 @@ static MConverter *utf8_converter = NULL;
|
|
|
|
typedef enum {
|
|
ENGINE_CONFIG_RANK_MASK = 1 << 0,
|
|
- ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 1
|
|
+ ENGINE_CONFIG_SYMBOL_MASK = 1 << 1,
|
|
+ ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 2
|
|
} EngineConfigMask;
|
|
|
|
struct _EngineConfigNode {
|
|
@@ -125,7 +126,6 @@ ibus_m17n_engine_new (MSymbol lang,
|
|
engine_setup = g_strdup_printf ("%s/ibus-setup-m17n --name %s",
|
|
LIBEXECDIR, engine_name);
|
|
|
|
-#if IBUS_CHECK_VERSION(1,3,99)
|
|
engine = ibus_engine_desc_new_varargs ("name", engine_name,
|
|
"longname", engine_longname,
|
|
"description", engine_desc ? engine_desc : "",
|
|
@@ -134,19 +134,9 @@ ibus_m17n_engine_new (MSymbol lang,
|
|
"icon", engine_icon ? engine_icon : "",
|
|
"layout", "us",
|
|
"rank", config->rank,
|
|
+ "symbol", config->symbol ? config->symbol : "",
|
|
"setup", engine_setup,
|
|
NULL);
|
|
-#else
|
|
- engine = ibus_engine_desc_new (engine_name,
|
|
- engine_longname,
|
|
- engine_desc ? engine_desc : "",
|
|
- msymbol_name (lang),
|
|
- "GPL",
|
|
- "",
|
|
- engine_icon ? engine_icon : "",
|
|
- "us");
|
|
- engine->rank = config->rank;
|
|
-#endif /* !IBUS_CHECK_VERSION(1,3,99) */
|
|
|
|
g_free (engine_name);
|
|
g_free (engine_longname);
|
|
@@ -276,6 +266,8 @@ ibus_m17n_get_engine_config (const gchar *engine_name)
|
|
if (g_pattern_match_simple (cnode->name, engine_name)) {
|
|
if (cnode->mask & ENGINE_CONFIG_RANK_MASK)
|
|
config->rank = cnode->config.rank;
|
|
+ if (cnode->mask & ENGINE_CONFIG_SYMBOL_MASK)
|
|
+ config->symbol = cnode->config.symbol;
|
|
if (cnode->mask & ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK)
|
|
config->preedit_highlight = cnode->config.preedit_highlight;
|
|
}
|
|
@@ -308,6 +300,11 @@ ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
|
|
cnode->mask |= ENGINE_CONFIG_RANK_MASK;
|
|
continue;
|
|
}
|
|
+ if (g_strcmp0 (sub_node->name , "symbol") == 0) {
|
|
+ cnode->config.symbol = g_strdup (sub_node->text);
|
|
+ cnode->mask |= ENGINE_CONFIG_SYMBOL_MASK;
|
|
+ continue;
|
|
+ }
|
|
if (g_strcmp0 (sub_node->name , "preedit-highlight") == 0) {
|
|
if (g_ascii_strcasecmp ("TRUE", sub_node->text) == 0)
|
|
cnode->config.preedit_highlight = TRUE;
|
|
diff --git a/src/m17nutil.h b/src/m17nutil.h
|
|
index b21244c..c77b6eb 100644
|
|
--- a/src/m17nutil.h
|
|
+++ b/src/m17nutil.h
|
|
@@ -14,6 +14,9 @@ struct _IBusM17NEngineConfig {
|
|
/* engine rank */
|
|
gint rank;
|
|
|
|
+ /* symbol */
|
|
+ gchar *symbol;
|
|
+
|
|
/* whether to highlight preedit */
|
|
gboolean preedit_highlight;
|
|
};
|
|
--
|
|
1.7.7.6
|
|
|
|
|
|
From 3a94b20091d898345440cd5b734528ea35927c7e Mon Sep 17 00:00:00 2001
|
|
From: Daiki Ueno <ueno@unixuser.org>
|
|
Date: Tue, 6 Mar 2012 10:02:18 +0900
|
|
Subject: [PATCH 08/10] Silence warnings when engine is skipped.
|
|
|
|
Also, fix some mistakes.
|
|
|
|
BUG=none
|
|
TEST=manually with Fedora's default.xml
|
|
|
|
Review URL: https://codereview.appspot.com/5730054
|
|
---
|
|
src/Makefile.am | 12 ++++++------
|
|
src/engine.c | 16 +++++-----------
|
|
src/m17nutil.c | 6 ++++--
|
|
src/main.c | 5 +++--
|
|
src/setup.c | 2 ++
|
|
5 files changed, 20 insertions(+), 21 deletions(-)
|
|
|
|
diff --git a/src/Makefile.am b/src/Makefile.am
|
|
index e354149..39d6523 100644
|
|
--- a/src/Makefile.am
|
|
+++ b/src/Makefile.am
|
|
@@ -1,6 +1,6 @@
|
|
# vim:set noet ts=4:
|
|
#
|
|
-# ibus-anthy - The Anthy engine for IBus
|
|
+# ibus-m17n - The m17n engine for IBus
|
|
#
|
|
# Copyright (c) 2007-2008 Huang Peng <shawn.p.huang@gmail.com>
|
|
#
|
|
@@ -52,13 +52,13 @@ test_m17n_LDADD = \
|
|
|
|
libexec_PROGRAMS = ibus-engine-m17n
|
|
|
|
-noinst_LIBRARIES = libm17ncommon.a
|
|
+noinst_LTLIBRARIES = libm17ncommon.la
|
|
|
|
-libm17ncommon_a_SOURCES = \
|
|
+libm17ncommon_la_SOURCES = \
|
|
m17nutil.c \
|
|
m17nutil.h \
|
|
$(NULL)
|
|
-libm17ncommon_a_LIBADD = $(LIBOBJS)
|
|
+libm17ncommon_la_LIBADD = $(LTLIBOBJS)
|
|
|
|
ibus_engine_m17n_SOURCES = \
|
|
main.c \
|
|
@@ -66,7 +66,7 @@ ibus_engine_m17n_SOURCES = \
|
|
engine.h \
|
|
$(NULL)
|
|
ibus_engine_m17n_LDADD = \
|
|
- libm17ncommon.a \
|
|
+ libm17ncommon.la \
|
|
@IBUS_LIBS@ \
|
|
@M17N_LIBS@ \
|
|
$(NULL)
|
|
@@ -82,7 +82,7 @@ ibus_setup_m17n_CFLAGS = \
|
|
$(AM_CFLAGS) \
|
|
$(NULL)
|
|
ibus_setup_m17n_LDADD = \
|
|
- libm17ncommon.a \
|
|
+ libm17ncommon.la \
|
|
@IBUS_LIBS@ \
|
|
@M17N_LIBS@ \
|
|
@GTK_LIBS@ \
|
|
diff --git a/src/engine.c b/src/engine.c
|
|
index 051b63c..9dc61d0 100644
|
|
--- a/src/engine.c
|
|
+++ b/src/engine.c
|
|
@@ -273,8 +273,8 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
|
|
if (value != NULL) {
|
|
const gchar *hex = g_variant_get_string (value, NULL);
|
|
klass->preedit_foreground = ibus_m17n_parse_color (hex);
|
|
+ g_variant_unref (value);
|
|
}
|
|
- g_variant_unref (value);
|
|
|
|
value = g_variant_lookup_value (values,
|
|
"preedit_background",
|
|
@@ -282,24 +282,24 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
|
|
if (value != NULL) {
|
|
const gchar *hex = g_variant_get_string (value, NULL);
|
|
klass->preedit_background = ibus_m17n_parse_color (hex);
|
|
+ g_variant_unref (value);
|
|
}
|
|
- g_variant_unref (value);
|
|
|
|
value = g_variant_lookup_value (values,
|
|
"preedit_underline",
|
|
G_VARIANT_TYPE_INT32);
|
|
if (value != NULL) {
|
|
klass->preedit_background = g_variant_get_int32 (value);
|
|
+ g_variant_unref (value);
|
|
}
|
|
- g_variant_unref (value);
|
|
|
|
value = g_variant_lookup_value (values,
|
|
"lookup_table_orientation",
|
|
G_VARIANT_TYPE_INT32);
|
|
if (value != NULL) {
|
|
klass->lookup_table_orientation = g_variant_get_int32 (value);
|
|
+ g_variant_unref (value);
|
|
}
|
|
- g_variant_unref (value);
|
|
g_variant_unref (values);
|
|
}
|
|
|
|
@@ -525,7 +525,7 @@ ibus_m17n_engine_commit_string (IBusM17NEngine *m17n,
|
|
|
|
Since IBus engines are supposed to be cross-platform, the code
|
|
should go into IBus core, instead of ibus-m17n. */
|
|
-MSymbol
|
|
+static MSymbol
|
|
ibus_m17n_key_event_to_symbol (guint keycode,
|
|
guint keyval,
|
|
guint modifiers)
|
|
@@ -699,11 +699,9 @@ ibus_m17n_engine_enable (IBusEngine *engine)
|
|
|
|
parent_class->enable (engine);
|
|
|
|
-#ifdef HAVE_IBUS_ENGINE_GET_SURROUNDING_TEXT
|
|
/* Issue a dummy ibus_engine_get_surrounding_text() call to tell
|
|
input context that we will use surrounding-text. */
|
|
ibus_engine_get_surrounding_text (engine, NULL, NULL, NULL);
|
|
-#endif /* HAVE_IBUS_ENGINE_GET_SURROUNDING_TEXT */
|
|
}
|
|
|
|
static void
|
|
@@ -930,9 +928,6 @@ ibus_m17n_engine_callback (MInputContext *context,
|
|
}
|
|
else if (command == Minput_reset) {
|
|
}
|
|
- /* ibus_engine_get_surrounding_text is only available in the current
|
|
- git master (1.3.99+) */
|
|
-#ifdef HAVE_IBUS_ENGINE_GET_SURROUNDING_TEXT
|
|
else if (command == Minput_get_surrounding_text &&
|
|
(((IBusEngine *) m17n)->client_capabilities &
|
|
IBUS_CAP_SURROUNDING_TEXT) != 0) {
|
|
@@ -970,7 +965,6 @@ ibus_m17n_engine_callback (MInputContext *context,
|
|
mplist_set (m17n->context->plist, Mtext, surround);
|
|
m17n_object_unref (surround);
|
|
}
|
|
-#endif /* !HAVE_IBUS_ENGINE_GET_SURROUNDING_TEXT */
|
|
else if (command == Minput_delete_surrounding_text &&
|
|
(((IBusEngine *) m17n)->client_capabilities &
|
|
IBUS_CAP_SURROUNDING_TEXT) != 0) {
|
|
diff --git a/src/m17nutil.c b/src/m17nutil.c
|
|
index 975214d..1c2b251 100644
|
|
--- a/src/m17nutil.c
|
|
+++ b/src/m17nutil.c
|
|
@@ -188,8 +188,10 @@ ibus_m17n_list_engines (void)
|
|
continue;
|
|
}
|
|
if (config->rank < 0) {
|
|
- g_warning ("skipped %s since its rank is lower than 0",
|
|
- engine_name);
|
|
+ g_log ("ibus-m17n",
|
|
+ G_LOG_LEVEL_MESSAGE,
|
|
+ "skipped %s since its rank is lower than 0",
|
|
+ engine_name);
|
|
g_free (engine_name);
|
|
continue;
|
|
}
|
|
diff --git a/src/main.c b/src/main.c
|
|
index f03e504..0a51491 100644
|
|
--- a/src/main.c
|
|
+++ b/src/main.c
|
|
@@ -115,12 +115,13 @@ main (gint argc, gchar **argv)
|
|
|
|
if (!g_option_context_parse (context, &argc, &argv, &error)) {
|
|
g_print ("Option parsing failed: %s\n", error->message);
|
|
- exit (-1);
|
|
+ g_error_free (error);
|
|
+ exit (EXIT_FAILURE);
|
|
}
|
|
|
|
if (xml) {
|
|
print_engines_xml ();
|
|
- exit (0);
|
|
+ exit (EXIT_SUCCESS);
|
|
}
|
|
|
|
start_component ();
|
|
diff --git a/src/setup.c b/src/setup.c
|
|
index 7b9609b..cc5cb09 100644
|
|
--- a/src/setup.c
|
|
+++ b/src/setup.c
|
|
@@ -527,6 +527,8 @@ setup_dialog_new (IBusConfig *config,
|
|
if (gtk_builder_add_from_file (builder,
|
|
SETUPDIR "/ibus-m17n-preferences.ui",
|
|
&error) == 0) {
|
|
+ g_warning ("can't read ibus-m17n-preferences.ui: %s",
|
|
+ error->message);
|
|
g_error_free (error);
|
|
g_return_val_if_reached (NULL);
|
|
}
|
|
--
|
|
1.7.7.6
|
|
|
|
|
|
From b5493a0267283c63f1bf74f697afd8d9a3290ebc Mon Sep 17 00:00:00 2001
|
|
From: Daiki Ueno <ueno@unixuser.org>
|
|
Date: Tue, 27 Mar 2012 15:28:01 +0900
|
|
Subject: [PATCH 09/10] Fix handling unknown keyval.
|
|
|
|
BUG=none
|
|
TEST=manually
|
|
|
|
Review URL: https://codereview.appspot.com/5929043
|
|
---
|
|
src/engine.c | 7 ++++---
|
|
1 files changed, 4 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/engine.c b/src/engine.c
|
|
index 9dc61d0..4c7411c 100644
|
|
--- a/src/engine.c
|
|
+++ b/src/engine.c
|
|
@@ -567,12 +567,13 @@ ibus_m17n_key_event_to_symbol (guint keycode,
|
|
g_string_append_c (keysym, c);
|
|
}
|
|
else {
|
|
- mask |= modifiers & (IBUS_CONTROL_MASK | IBUS_SHIFT_MASK);
|
|
- g_string_append (keysym, ibus_keyval_name (keyval));
|
|
- if (keysym->len == 0) {
|
|
+ const gchar *name = ibus_keyval_name (keyval);
|
|
+ if (name == NULL) {
|
|
g_string_free (keysym, TRUE);
|
|
return Mnil;
|
|
}
|
|
+ mask |= modifiers & (IBUS_CONTROL_MASK | IBUS_SHIFT_MASK);
|
|
+ g_string_append (keysym, name);
|
|
}
|
|
|
|
mask |= modifiers & (IBUS_MOD1_MASK |
|
|
--
|
|
1.7.7.6
|
|
|
|
|
|
From 4928f9b8634de05aed125d825471211a0a2c8a07 Mon Sep 17 00:00:00 2001
|
|
From: Daiki Ueno <ueno@unixuser.org>
|
|
Date: Wed, 28 Mar 2012 09:50:12 +0900
|
|
Subject: [PATCH 10/10] Add longname to engine config.
|
|
|
|
BUG=none
|
|
TEST=manually
|
|
|
|
Review URL: https://codereview.appspot.com/5927046
|
|
---
|
|
src/default.xml.in.in | 5 +++++
|
|
src/m17nutil.c | 12 ++++++++++--
|
|
src/m17nutil.h | 3 +++
|
|
3 files changed, 18 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/default.xml.in.in b/src/default.xml.in.in
|
|
index 1248d48..9f5a01e 100644
|
|
--- a/src/default.xml.in.in
|
|
+++ b/src/default.xml.in.in
|
|
@@ -389,6 +389,11 @@
|
|
<symbol>倉</symbol>
|
|
</engine>
|
|
<engine>
|
|
+ <name>m17n:zh:pinyin</name>
|
|
+ <symbol>PY</symbol>
|
|
+ <longname>hanyu pinyin (m17n)</longname>
|
|
+ </engine>
|
|
+ <engine>
|
|
<name>m17n:zh:py*</name>
|
|
<symbol>拼</symbol>
|
|
</engine>
|
|
diff --git a/src/m17nutil.c b/src/m17nutil.c
|
|
index 1c2b251..51026b2 100644
|
|
--- a/src/m17nutil.c
|
|
+++ b/src/m17nutil.c
|
|
@@ -16,7 +16,8 @@ static MConverter *utf8_converter = NULL;
|
|
typedef enum {
|
|
ENGINE_CONFIG_RANK_MASK = 1 << 0,
|
|
ENGINE_CONFIG_SYMBOL_MASK = 1 << 1,
|
|
- ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 2
|
|
+ ENGINE_CONFIG_LONGNAME_MASK = 1 << 2,
|
|
+ ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 3
|
|
} EngineConfigMask;
|
|
|
|
struct _EngineConfigNode {
|
|
@@ -127,7 +128,7 @@ ibus_m17n_engine_new (MSymbol lang,
|
|
LIBEXECDIR, engine_name);
|
|
|
|
engine = ibus_engine_desc_new_varargs ("name", engine_name,
|
|
- "longname", engine_longname,
|
|
+ "longname", config->longname ? config->longname : engine_longname,
|
|
"description", engine_desc ? engine_desc : "",
|
|
"language", msymbol_name (lang),
|
|
"license", "GPL",
|
|
@@ -270,6 +271,8 @@ ibus_m17n_get_engine_config (const gchar *engine_name)
|
|
config->rank = cnode->config.rank;
|
|
if (cnode->mask & ENGINE_CONFIG_SYMBOL_MASK)
|
|
config->symbol = cnode->config.symbol;
|
|
+ if (cnode->mask & ENGINE_CONFIG_LONGNAME_MASK)
|
|
+ config->longname = cnode->config.longname;
|
|
if (cnode->mask & ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK)
|
|
config->preedit_highlight = cnode->config.preedit_highlight;
|
|
}
|
|
@@ -307,6 +310,11 @@ ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
|
|
cnode->mask |= ENGINE_CONFIG_SYMBOL_MASK;
|
|
continue;
|
|
}
|
|
+ if (g_strcmp0 (sub_node->name , "longname") == 0) {
|
|
+ cnode->config.longname = g_strdup (sub_node->text);
|
|
+ cnode->mask |= ENGINE_CONFIG_LONGNAME_MASK;
|
|
+ continue;
|
|
+ }
|
|
if (g_strcmp0 (sub_node->name , "preedit-highlight") == 0) {
|
|
if (g_ascii_strcasecmp ("TRUE", sub_node->text) == 0)
|
|
cnode->config.preedit_highlight = TRUE;
|
|
diff --git a/src/m17nutil.h b/src/m17nutil.h
|
|
index c77b6eb..d790cf8 100644
|
|
--- a/src/m17nutil.h
|
|
+++ b/src/m17nutil.h
|
|
@@ -17,6 +17,9 @@ struct _IBusM17NEngineConfig {
|
|
/* symbol */
|
|
gchar *symbol;
|
|
|
|
+ /* overridding longname shown on panel */
|
|
+ gchar *longname;
|
|
+
|
|
/* whether to highlight preedit */
|
|
gboolean preedit_highlight;
|
|
};
|
|
--
|
|
1.7.7.6
|
|
|