[Fedora-i18n-bugs] [Bug 736992] New: too many xkb-(null) in the list, iok crashed and segfaults occurred while selecting xkb-Hindi Wx keyboard.
by Red Hat Bugzilla
Please do not reply directly to this email. All additional
comments should be made in the comments box of this bug.
Summary: too many xkb-(null) in the list, iok crashed and segfaults occurred while selecting xkb-Hindi Wx keyboard.
https://bugzilla.redhat.com/show_bug.cgi?id=736992
Summary: too many xkb-(null) in the list, iok crashed and
segfaults occurred while selecting xkb-Hindi Wx
keyboard.
Product: Red Hat Enterprise Linux 6
Version: 6.2
Platform: x86_64
OS/Version: Linux
Status: NEW
Severity: medium
Priority: unspecified
Component: iok
AssignedTo: pnemade(a)redhat.com
ReportedBy: lijli(a)redhat.com
QAContact: qe-i18n-bugs(a)redhat.com
CC: tagoh(a)redhat.com, eng-i18n-bugs(a)redhat.com,
pnemade(a)redhat.com, i18n-bugs(a)lists.fedoraproject.org
Depends on: 734372
Classification: Red Hat
Story Points: ---
Clone Of: 734372
Type: ---
Description of problem:
too many xkb-(null) appears in the language list.
iok crashed and segfaults occurred while selecting xkb-Hindi Wx keyboard.
Version-Release number of selected component (if applicable):
xkeyboard-config-2.3-1.el6
iok-1.3.10-3.el6.x86_64
How reproducible:
always
Steps to Reproduce:
1.run iok -a
2.click on the language list, select xkb-Hindi Wx keymap
Actual results:
too many xkb-(null) appears, iok crashed and segfaults occurred while selecting
xkb-Hindi Wx keyboard.
Expected results:
xkb-xx should be unique, iok works fine and no segfaults.
Additional info:
Please refer to the attached screenshot.
+++ This bug was initially created as a clone of Bug #734372 +++
Description of problem:
too many xkb-(null) appears in the language list.
Version-Release number of selected component (if applicable):
iok-1.3.12-3.fc16.x86_64
How reproducible:
always
Steps to Reproduce:
1.run iok
2.click on the language list
3.
Actual results:
too many xkb-(null) appears.
Expected results:
should be unique.
Additional info:
--- Additional comment from updates(a)fedoraproject.org on 2011-08-31 08:24:13
EDT ---
iok-1.3.12-4.fc16 has been submitted as an update for Fedora 16.
https://admin.fedoraproject.org/updates/iok-1.3.12-4.fc16
--- Additional comment from updates(a)fedoraproject.org on 2011-08-31 17:45:13
EDT ---
Package iok-1.3.12-4.fc16:
* should fix your issue,
* was pushed to the Fedora 16 testing repository,
* should be available at your local mirror within two days.
Update it with:
# su -c 'yum update --enablerepo=updates-testing iok-1.3.12-4.fc16'
as soon as you are able to.
Please go to the following url:
https://admin.fedoraproject.org/updates/iok-1.3.12-4.fc16
then log in and leave karma (feedback).
--
Configure bugmail: https://bugzilla.redhat.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
12 years, 8 months
[Fedora-i18n-bugs] [ibus-m17n/f15] Update to 1.3.3-3.
by Daiki Ueno
commit 410549be6e59d2e5df5e2bb88a94ed65608ec077
Author: Daiki Ueno <ueno(a)unixuser.org>
Date: Fri Sep 9 14:59:27 2011 +0900
Update to 1.3.3-3.
.gitignore | 1 +
ibus-m17n-HEAD.patch | 281 -----------
ibus-m17n-default-xml-override.patch | 621 +++++++++++++++++++++++++
ibus-m17n-iok.patch | 62 ++--
ibus-m17n-setup-refactor.patch | 843 +++++++++++++++++++++++++++++++++
ibus-m17n-virtkbd.patch | 849 ++++++++++++++++++++++++++++++++++
ibus-m17n-xkb-options.patch | 465 ++++---------------
ibus-m17n-xx-icon-symbol.patch | 324 ++++++++++++--
ibus-m17n.spec | 69 +++-
series | 4 -
sources | 2 +-
11 files changed, 2780 insertions(+), 741 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index f71607a..59fba23 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@ ibus-m17n-1.3.0.tar.gz
/ibus-m17n-1.3.0.tar.gz
/ibus-m17n-1.3.1.tar.gz
/ibus-m17n-1.3.2.tar.gz
+/ibus-m17n-1.3.3.tar.gz
diff --git a/ibus-m17n-default-xml-override.patch b/ibus-m17n-default-xml-override.patch
new file mode 100644
index 0000000..21f2be2
--- /dev/null
+++ b/ibus-m17n-default-xml-override.patch
@@ -0,0 +1,621 @@
+From e37bcc53f1d145e10974fb0bb91802d735921fcd Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <ueno(a)unixuser.org>
+Date: Wed, 31 Aug 2011 11:44:46 +0900
+Subject: [PATCH 1/6] 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.
+---
+ src/Makefile.am | 3 +-
+ src/default.xml.in.in | 221 +++++++++++++++++++------------------------------
+ src/engine.c | 2 +
+ src/m17nutil.c | 68 +++++++---------
+ src/m17nutil.h | 1 +
+ src/test.c | 66 +++++++++++++++
+ 6 files changed, 186 insertions(+), 175 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..b06f71d 100644
+--- a/src/m17nutil.c
++++ b/src/m17nutil.c
+@@ -13,12 +13,18 @@ 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 +263,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 +301,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 +310,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 +339,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 +347,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 +467,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.6.1
+
diff --git a/ibus-m17n-iok.patch b/ibus-m17n-iok.patch
index e73124f..b885aae 100644
--- a/ibus-m17n-iok.patch
+++ b/ibus-m17n-iok.patch
@@ -1,25 +1,33 @@
-Patch to support iok (Indic Onscreen Keyboard).
-Index: ibus-m17n-1.3.2/src/engine.c
-===================================================================
---- ibus-m17n-1.3.2.orig/src/engine.c
-+++ ibus-m17n-1.3.2/src/engine.c
-@@ -23,6 +23,7 @@ struct _IBusM17NEngine {
+From 240931f8433ffa9de0c78a862e0d5e0aad93953d Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <ueno(a)unixuser.org>
+Date: Fri, 2 Sep 2011 11:27:02 +0900
+Subject: [PATCH 6/6] Apply iok patch from fedora.
+
+---
+ src/engine.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 44 insertions(+), 0 deletions(-)
+
+diff --git a/src/engine.c b/src/engine.c
+index 1e6bd1b..f23d982 100644
+--- a/src/engine.c
++++ b/src/engine.c
+@@ -26,6 +26,7 @@ struct _IBusM17NEngine {
IBusProperty *setup_prop;
#endif /* HAVE_SETUP */
- IBusPropList *prop_list;
+ IBusProperty *virtkbd_prop;
+ IBusProperty *show_iok_prop;
+ IBusPropList *prop_list;
};
- struct _IBusM17NEngineClass {
-@@ -34,6 +35,7 @@ struct _IBusM17NEngineClass {
- guint preedit_background;
- gint preedit_underline;
+@@ -40,6 +41,7 @@ struct _IBusM17NEngineClass {
gint lookup_table_orientation;
+ gchar *virtual_keyboard;
+ gboolean virtual_keyboard_enabled;
+ gboolean use_iok;
MInputMethod *im;
};
-@@ -248,6 +250,9 @@ ibus_m17n_engine_class_init (IBusM17NEng
+@@ -254,6 +256,9 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
}
engine_name = g_strdup_printf ("m17n:%s:%s", lang, name);
klass->config_section = g_strdup_printf ("engine/M17N/%s/%s", lang, name);
@@ -29,17 +37,9 @@ Index: ibus-m17n-1.3.2/src/engine.c
g_free (lang);
g_free (name);
-@@ -344,6 +349,7 @@ ibus_m17n_engine_init (IBusM17NEngine *m
- {
- IBusText* label;
- IBusText* tooltip;
-+ IBusM17NEngineClass *klass = (IBusM17NEngineClass *) G_OBJECT_GET_CLASS (m17n);
-
- m17n->prop_list = ibus_prop_list_new ();
- g_object_ref_sink (m17n->prop_list);
-@@ -376,6 +382,23 @@ ibus_m17n_engine_init (IBusM17NEngine *m
- ibus_prop_list_append (m17n->prop_list, m17n->setup_prop);
- #endif /* HAVE_SETUP */
+@@ -412,6 +417,22 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
+ klass->virtual_keyboard != NULL)
+ ibus_property_set_visible (m17n->virtkbd_prop, TRUE);
+ label = ibus_text_new_from_string ("iok");
+ m17n->show_iok_prop = ibus_property_new ("iok",
@@ -52,18 +52,17 @@ Index: ibus-m17n-1.3.2/src/engine.c
+ 0,
+ NULL);
+ g_object_ref_sink (m17n->show_iok_prop);
++ ibus_prop_list_append (m17n->prop_list, m17n->show_iok_prop);
+
-+ if (klass->use_iok)
++ if (klass->use_iok && !klass->virtual_keyboard_enabled)
+ ibus_property_set_visible (m17n->show_iok_prop, TRUE);
+
-+ ibus_prop_list_append (m17n->prop_list, m17n->show_iok_prop);
-+
m17n->table = ibus_lookup_table_new (9, 0, TRUE, TRUE);
g_object_ref_sink (m17n->table);
m17n->context = NULL;
-@@ -461,6 +484,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine
+@@ -502,6 +523,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine *m17n)
+ m17n->virtkbd_prop = NULL;
}
- #endif /* HAVE_SETUP */
+ if (m17n->show_iok_prop) {
+ g_object_unref (m17n->show_iok_prop);
@@ -73,9 +72,9 @@ Index: ibus-m17n-1.3.2/src/engine.c
if (m17n->table) {
g_object_unref (m17n->table);
m17n->table = NULL;
-@@ -778,6 +806,24 @@ ibus_m17n_engine_property_activate (IBus
+@@ -842,6 +868,24 @@ ibus_m17n_engine_property_activate (IBusEngine *engine,
}
- #endif /* HAVE_SETUP */
+ #endif /* HAVE_EEKBOARD */
+ if (g_strcmp0 (prop_name, "iok") == 0) {
+ const gchar *engine_name;
@@ -98,3 +97,6 @@ Index: ibus-m17n-1.3.2/src/engine.c
parent_class->property_activate (engine, prop_name, prop_state);
}
+--
+1.7.6.1
+
diff --git a/ibus-m17n-setup-refactor.patch b/ibus-m17n-setup-refactor.patch
new file mode 100644
index 0000000..ccd1346
--- /dev/null
+++ b/ibus-m17n-setup-refactor.patch
@@ -0,0 +1,843 @@
+From bd48b1f5c71ab849e1d2c78fd069a92d37426dc3 Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <ueno(a)unixuser.org>
+Date: Thu, 1 Sep 2011 18:48:41 +0900
+Subject: [PATCH 2/6] Refactor setup.c.
+
+---
+ src/ibus-m17n-preferences.ui | 3 +-
+ src/setup.c | 663 +++++++++++++++++++++++-------------------
+ 2 files changed, 362 insertions(+), 304 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..30386df 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;
++ gchar *lang;
++ gchar *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);
+ }
+ }
+
+@@ -163,95 +161,238 @@ 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;
++ gtk_list_store_set (dialog->store, &iter,
++ COLUMN_VALUE, new_text,
++ -1);
++ gtk_tree_path_free (path);
++}
+
+- p = mplist_next (mplist_next (mplist_next (mplist_value (plist))));
+- if (!p)
+- goto fail;
++static void
++toggle_colorbutton_sensitive (GtkToggleButton *togglebutton,
++ GtkWidget *colorbutton)
++{
++ if (gtk_toggle_button_get_active (togglebutton))
++ gtk_widget_set_sensitive (colorbutton, TRUE);
++ else
++ gtk_widget_set_sensitive (colorbutton, FALSE);
++}
+
+- value = parse_value (p, new_text);
+- if (!value)
+- goto fail;
++static void
++on_foreground_toggled (GtkToggleButton *togglebutton,
++ gpointer user_data)
++{
++ SetupDialog *dialog = user_data;
++ toggle_colorbutton_sensitive (togglebutton, dialog->colorbutton_foreground);
++}
+
+- if (minput_config_variable (context->language, context->name,
+- msymbol (key), value) != 0)
+- goto fail;
++static void
++on_background_toggled (GtkToggleButton *togglebutton,
++ gpointer user_data)
++{
++ SetupDialog *dialog = user_data;
++ toggle_colorbutton_sensitive (togglebutton, dialog->colorbutton_background);
++}
+
+- if (minput_save_config () != 1)
+- goto fail;
++static gint
++get_combo_box_index_by_value (GtkComboBox *combobox, gint value)
++{
++ GtkTreeModel *model;
++ GtkTreeIter iter;
++ gint index;
+
+- gtk_list_store_set (context->store, &iter,
+- COLUMN_VALUE, new_text,
+- -1);
++ index = 0;
++ model = gtk_combo_box_get_model (combobox);
++ if (!gtk_tree_model_get_iter_first (model, &iter))
++ return -1;
+
+- fail:
+- gtk_tree_path_free (path);
++ do {
++ gint _value;
++ gtk_tree_model_get (model, &iter, COLUMN_VALUE, &_value, -1);
++ if (_value == value)
++ return index;
++ index++;
++ } while (gtk_tree_model_iter_next (model, &iter));
++ return -1;
+ }
+
+ static void
+-color_to_gdk (guint color, GdkColor *color_gdk)
++_gdk_color_from_uint (guint color, GdkColor *color_gdk)
+ {
+- memset (color_gdk, 0, sizeof *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
+-set_color (ConfigContext *context, const gchar *name, GdkColor *color)
++setup_dialog_load_config (SetupDialog *dialog)
+ {
+- gchar buf[8];
++ gchar *color;
++ gboolean bvalue;
++ gint ivalue;
++ GdkColor cvalue;
++ GtkCellRenderer *renderer;
++ gint index;
+
+- 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);
++ /* General -> Pre-edit Appearance */
++ /* foreground color of pre-edit buffer */
++ 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))
++ bvalue = TRUE;
++ g_free (color);
++ }
++
++ 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(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);
++ 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);
++
++ /* General -> Other */
++ 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);
++
++ /* Advanced -> m17n-lib configuration */
++ dialog->store = gtk_list_store_new (NUM_COLS,
++ G_TYPE_STRING,
++ G_TYPE_STRING,
++ G_TYPE_STRING);
++ insert_m17n_items (dialog->store,
++ msymbol (dialog->lang),
++ msymbol (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 (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), dialog);
++
++ g_signal_connect (dialog->treeview, "query-tooltip",
++ G_CALLBACK(on_query_tooltip), NULL);
+ }
+
+-static void
+-on_foreground_color_set (GtkColorButton *widget,
+- gpointer user_data)
++static gchar *
++_gdk_color_to_string (GdkColor *color)
+ {
+- ConfigContext *context = user_data;
+- GdkColor color;
+-
+- gtk_color_button_get_color (GTK_COLOR_BUTTON(widget), &color);
+- set_color (context, "preedit_foreground", &color);
++ g_strdup_printf ("#%02X%02X%02X",
++ (color->red & 0xFF00) >> 8,
++ (color->green & 0xFF00) >> 8,
++ (color->blue & 0xFF00) >> 8);
+ }
+
+ static void
+-on_background_color_set (GtkColorButton *widget,
+- gpointer user_data)
++save_color (SetupDialog *dialog,
++ GtkToggleButton *togglebutton,
++ GtkColorButton *colorbutton,
++ const gchar *name)
+ {
+- ConfigContext *context = user_data;
+- GdkColor color;
+-
+- gtk_color_button_get_color (GTK_COLOR_BUTTON(widget), &color);
+- set_color (context, "preedit_background", &color);
++ 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
+-on_underline_changed (GtkComboBox *combo,
+- gpointer user_data)
++save_choice (SetupDialog *dialog,
++ GtkComboBox *combo,
++ const gchar *name)
+ {
+- ConfigContext *context = user_data;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gint active;
+@@ -260,123 +401,164 @@ on_underline_changed (GtkComboBox *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);
++ ibus_m17n_config_set_int (dialog->config, dialog->section, name, active);
+ }
+
+-static void
+-on_orientation_changed (GtkComboBox *combo,
+- gpointer user_data)
++static gboolean
++save_m17n_options (SetupDialog *dialog)
+ {
+- ConfigContext *context = user_data;
+- GtkTreeModel *model;
++ GtkTreeModel *model = GTK_TREE_MODEL (dialog->store);
+ GtkTreeIter iter;
+- gint active;
++ MPlist *plist, *p, *mvalue = NULL;
++ MSymbol lang, name;
++ gchar *key = NULL, *value = NULL;
++ gboolean retval = TRUE;
+
+- 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);
++ if (!gtk_tree_model_get_iter_first (model, &iter))
++ return;
+
+- ibus_m17n_config_set_int (config,
+- context->section,
+- "lookup_table_orientation",
+- active);
+-}
++ lang = msymbol (dialog->lang);
++ name = msymbol (dialog->name);
+
+-static void
+-toggle_color (ConfigContext *context,
+- GtkToggleButton *togglebutton,
+- GtkWidget *colorbutton,
+- const gchar *name)
+-{
+- GdkColor color;
++ do {
++ gtk_tree_model_get (model, &iter,
++ COLUMN_KEY, &key,
++ COLUMN_VALUE, &value,
++ -1);
+
+- 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 {
+- gtk_widget_set_sensitive (colorbutton, FALSE);
+- gtk_color_button_get_color (GTK_COLOR_BUTTON(colorbutton), &color);
+- set_color (context, name, NULL);
+- }
++ plist = minput_get_variable (lang, 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 (lang, 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
+-on_foreground_toggled (GtkToggleButton *togglebutton,
+- gpointer user_data)
++setup_dialog_save_config (SetupDialog *dialog)
+ {
+- ConfigContext *context = user_data;
+-
+- toggle_color (context,
+- togglebutton,
+- context->colorbutton_foreground,
+- "preedit_foreground");
++ 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 void
+-on_background_toggled (GtkToggleButton *togglebutton,
+- gpointer user_data)
++static SetupDialog *
++setup_dialog_new (IBusConfig *config,
++ const gchar *lang,
++ const gchar *name)
+ {
+- ConfigContext *context = user_data;
++ GtkBuilder *builder;
++ SetupDialog *dialog;
++ GObject *object;
++ GError *error;
++
++ dialog = g_slice_new0 (SetupDialog);
++ dialog->config = g_object_ref_sink (config);
++ dialog->lang = g_strdup (lang);
++ dialog->name = g_strdup (name);
++ dialog->section = g_strdup_printf ("engine/M17N/%s/%s", lang, name);
++
++ builder = gtk_builder_new ();
++ gtk_builder_set_translation_domain (builder, "ibus-m17n");
++
++ error = NULL;
++ gtk_builder_add_from_file (builder,
++ SETUPDIR "/ibus-m17n-preferences.ui",
++ &error);
++ g_assert_no_error (error);
++
++ 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);
+
+- toggle_color (context,
+- togglebutton,
+- context->colorbutton_background,
+- "preedit_background");
++ return dialog;
+ }
+
+-static gint
+-get_combo_box_index_by_value (GtkComboBox *combobox, gint value)
++static void
++setup_dialog_free (SetupDialog *dialog)
+ {
+- GtkTreeModel *model;
+- GtkTreeIter iter;
+- gint index;
++ gtk_widget_destroy (dialog->dialog);
+
+- index = 0;
+- model = gtk_combo_box_get_model (combobox);
+- if (!gtk_tree_model_get_iter_first (model, &iter))
+- return -1;
++ g_free (dialog->lang);
++ g_free (dialog->name);
+
+- do {
+- gint _value;
+- gtk_tree_model_get (model, &iter, COLUMN_VALUE, &_value, -1);
+- if (_value == value)
+- return index;
+- index++;
+- } while (gtk_tree_model_iter_next (model, &iter));
+- return -1;
++ g_free (dialog->section);
++ g_object_unref (dialog->store);
++ g_slice_free (SetupDialog, dialog);
+ }
+
+ static void
+ start (const gchar *engine_name)
+ {
+ IBusBus *bus;
+- gchar **strv, *lang, *name;
+- GtkBuilder *builder;
+- GtkWidget *dialog;
+- GtkWidget *combobox_underline, *combobox_orientation;
+- GtkWidget *checkbutton_foreground, *checkbutton_background;
+- GtkWidget *treeview;
+- GtkListStore *store;
++ IBusConfig *config;
++ gchar **strv, *lang, *name, *section;
++ SetupDialog *dialog;
+ 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;
+- gint index;
+
+ ibus_init ();
+-
+- bus = ibus_bus_new ();
+- //g_signal_connect (bus, "disconnected", G_CALLBACK (ibus_disconnected_cb), NULL);
+- ibus_m17n_init (bus);
++ ibus_m17n_init_common ();
+
+ strv = g_strsplit (engine_name, ":", 3);
+
+@@ -386,150 +568,25 @@ start (const gchar *engine_name)
+ 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,
+- "preedit_foreground",
+- &color)) {
+- if (g_strcmp0 (color, "none") != 0 &&
+- gdk_color_parse (color, &foreground))
+- is_foreground_set = TRUE;
+- g_free (color);
+- }
++ bus = ibus_bus_new ();
++ //g_signal_connect (bus, "disconnected", G_CALLBACK (ibus_disconnected_cb), NULL);
+
+- 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_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);
++ config = ibus_bus_get_config (bus);
++ dialog = setup_dialog_new (config, lang, name);
+
+-
+- /* 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,
+- "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);
+- 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_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);
++ g_strfreev (strv);
+
+- /* underline of pre-edit buffer */
+- renderer = gtk_cell_renderer_text_new ();
+- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT(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,
+- "preedit_underline",
+- &underline))
+- underline = IBUS_ATTR_UNDERLINE_NONE;
++ setup_dialog_load_config (dialog);
+
+- 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);
++ gtk_widget_show_all (dialog->dialog);
++ gtk_dialog_run (GTK_DIALOG(dialog->dialog));
+
+- /* General -> Other */
+- renderer = gtk_cell_renderer_text_new ();
+- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT(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,
+- "lookup_table_orientation",
+- &orientation))
+- orientation = 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);
++ setup_dialog_save_config (dialog);
++ setup_dialog_free (dialog);
+
+- /* 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;
+- renderer = gtk_cell_renderer_text_new ();
+- gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (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_object_unref (bus);
+
+- gtk_widget_show_all (dialog);
+- gtk_dialog_run (GTK_DIALOG(dialog));
++ M17N_FINI ();
+ }
+
+ int
+--
+1.7.6.1
+
diff --git a/ibus-m17n-virtkbd.patch b/ibus-m17n-virtkbd.patch
new file mode 100644
index 0000000..ad70c1c
--- /dev/null
+++ b/ibus-m17n-virtkbd.patch
@@ -0,0 +1,849 @@
+From 5ec645b395e81cd804f50e5bcd6c21e92d257fbe Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <ueno(a)unixuser.org>
+Date: Wed, 31 Aug 2011 18:28:48 +0900
+Subject: [PATCH 5/6] Support virtual keyboard.
+
+---
+ configure.ac | 17 +++
+ src/Makefile.am | 7 ++
+ src/default.xml.in.in | 111 ++++++++++++++++++++
+ src/engine.c | 66 ++++++++++++
+ src/ibus-m17n-preferences.ui | 16 +++
+ src/m17nutil.c | 59 +++++++++++-
+ src/m17nutil.h | 11 ++
+ src/setup.c | 26 +++++
+ src/virtkbd.c | 233 ++++++++++++++++++++++++++++++++++++++++++
+ src/virtkbd.h | 31 ++++++
+ 10 files changed, 576 insertions(+), 1 deletions(-)
+ create mode 100644 src/virtkbd.c
+ create mode 100644 src/virtkbd.h
+
+diff --git a/configure.ac b/configure.ac
+index 23102c4..13e42f8 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -88,6 +88,23 @@ fi
+
+ AM_CONDITIONAL([HAVE_GTK],[test x$with_gtk != xno])
+
++dnl check eekboard for virtual keyboard
++AC_MSG_CHECKING([whether you enable eekboard])
++AC_ARG_ENABLE(eekboard,
++ AS_HELP_STRING([--enable-eekboard=no/yes],
++ [Enable eekboard default=yes]),
++ enable_eekboard=$enableval,
++ enable_eekboard=yes)
++
++if test x$enable_eekboard = xyes; then
++ PKG_CHECK_MODULES([EEKBOARD], [eekboard-0.90], , enable_xtest=no)
++ if test x$enable_eekboard = xyes; then
++ AC_DEFINE([HAVE_EEKBOARD], [1], [Define if eekboard is found])
++ fi
++fi
++AM_CONDITIONAL(ENABLE_EEKBOARD, [test x$enable_eekboard = xyes])
++AC_MSG_RESULT($enable_eekboard)
++
+ # check if minput_list, which is available in m17n-lib 1.6.2+ (CVS)
+ save_CFLAGS="$CFLAGS"
+ save_LIBS="$LIBS"
+diff --git a/src/Makefile.am b/src/Makefile.am
+index e354149..eac6629 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -64,11 +64,18 @@ ibus_engine_m17n_SOURCES = \
+ main.c \
+ engine.c \
+ engine.h \
++ virtkbd.c \
++ virtkbd.h \
++ $(NULL)
++ibus_engine_m17n_CFLAGS = \
++ @EEKBOARD_CFLAGS@ \
++ $(AM_CFLAGS) \
+ $(NULL)
+ ibus_engine_m17n_LDADD = \
+ libm17ncommon.a \
+ @IBUS_LIBS@ \
+ @M17N_LIBS@ \
++ @EEKBOARD_LIBS@ \
+ $(NULL)
+
+ if HAVE_GTK
+diff --git a/src/default.xml.in.in b/src/default.xml.in.in
+index 8192878..47053ae 100644
+--- a/src/default.xml.in.in
++++ b/src/default.xml.in.in
+@@ -12,6 +12,7 @@
+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ @IBUS_HOTKEYS_XML@
++ <virtual-keyboard>us</virtual-keyboard>
+ </engine>
+ <!-- Indic engines should be selected by default:
+ https://bugzilla.redhat.com/show_bug.cgi?id=640896 -->
+@@ -410,4 +411,114 @@
+ <name>m17n:zh:tonepy*</name>
+ <symbol>调</symbol>
+ </engine>
++
++ <!-- Virtual keyboard. -->
++ <engine>
++ <name>m17n:ar:kbd</name>
++ <virtual-keyboard>ar,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:be:kbd</name>
++ <virtual-keyboard>be,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:fa:kbd</name>
++ <virtual-keyboard>fa,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:he:kbd</name>
++ <virtual-keyboard>he,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:kk:kbd</name>
++ <virtual-keyboard>kk,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:ks:kbd</name>
++ <virtual-keyboard>ks,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:my:kbd</name>
++ <virtual-keyboard>my,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:ru:kbd</name>
++ <virtual-keyboard>ru,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:ua:kbd</name>
++ <virtual-keyboard>ua,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:ug:kbd</name>
++ <virtual-keyboard>ug,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:be:kbd</name>
++ <virtual-keyboard>be,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:th:*</name>
++ <virtual-keyboard>th,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:zh:bopomofo</name>
++ <virtual-keyboard>zh-bopomofo,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:as:inscript</name>
++ <virtual-keyboard>as-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:bn:inscript</name>
++ <virtual-keyboard>bn-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:gu:inscript</name>
++ <virtual-keyboard>gu-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:hi:inscript</name>
++ <virtual-keyboard>hi-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:kn:inscript</name>
++ <virtual-keyboard>kn-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:ks:inscript</name>
++ <virtual-keyboard>kn-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:mai:inscript</name>
++ <virtual-keyboard>mai-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:ml:inscript</name>
++ <virtual-keyboard>ml-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:mr:inscript</name>
++ <virtual-keyboard>mr-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:or:inscript</name>
++ <virtual-keyboard>or-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:pa:inscript</name>
++ <virtual-keyboard>pa-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:sd:inscript</name>
++ <virtual-keyboard>sd-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:ta:inscript</name>
++ <virtual-keyboard>ta-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:te:inscript</name>
++ <virtual-keyboard>te-inscript,us</virtual-keyboard>
++ </engine>
+ </engines>
+diff --git a/src/engine.c b/src/engine.c
+index dcff0c7..1e6bd1b 100644
+--- a/src/engine.c
++++ b/src/engine.c
+@@ -7,6 +7,7 @@
+ #include <m17n.h>
+ #include <string.h>
+ #include "m17nutil.h"
++#include "virtkbd.h"
+ #include "engine.h"
+
+ typedef struct _IBusM17NEngine IBusM17NEngine;
+@@ -18,10 +19,13 @@ struct _IBusM17NEngine {
+ /* members */
+ MInputContext *context;
+ IBusLookupTable *table;
++ IBusM17NVirtualKeyboard *virtkbd;
++
+ IBusProperty *status_prop;
+ #ifdef HAVE_SETUP
+ IBusProperty *setup_prop;
+ #endif /* HAVE_SETUP */
++ IBusProperty *virtkbd_prop;
+ IBusPropList *prop_list;
+ };
+
+@@ -34,6 +38,8 @@ struct _IBusM17NEngineClass {
+ guint preedit_background;
+ gint preedit_underline;
+ gint lookup_table_orientation;
++ gchar *virtual_keyboard;
++ gboolean virtual_keyboard_enabled;
+
+ MInputMethod *im;
+ };
+@@ -256,6 +262,7 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
+ klass->preedit_background = INVALID_COLOR;
+ klass->preedit_underline = IBUS_ATTR_UNDERLINE_NONE;
+ klass->lookup_table_orientation = IBUS_ORIENTATION_SYSTEM;
++ klass->virtual_keyboard_enabled = FALSE;
+
+ engine_config = ibus_m17n_get_engine_config (engine_name);
+ g_free (engine_name);
+@@ -290,6 +297,14 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
+ &klass->lookup_table_orientation))
+ klass->lookup_table_orientation = IBUS_ORIENTATION_SYSTEM;
+
++ if (!ibus_m17n_config_get_boolean (config,
++ klass->config_section,
++ "virtual_keyboard_enabled",
++ &klass->virtual_keyboard_enabled))
++ klass->virtual_keyboard_enabled = FALSE;
++
++ klass->virtual_keyboard = engine_config->virtual_keyboard;
++
+ ibus_m17n_engine_config_free (engine_config);
+
+ g_signal_connect (config, "value-changed",
+@@ -346,6 +361,7 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
+ {
+ IBusText* label;
+ IBusText* tooltip;
++ IBusM17NEngineClass *klass = (IBusM17NEngineClass *) G_OBJECT_GET_CLASS (m17n);
+
+ m17n->prop_list = ibus_prop_list_new ();
+ g_object_ref_sink (m17n->prop_list);
+@@ -378,6 +394,24 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
+ ibus_prop_list_append (m17n->prop_list, m17n->setup_prop);
+ #endif /* HAVE_SETUP */
+
++ label = ibus_text_new_from_string ("On-screen Keyboard");
++ tooltip = ibus_text_new_from_string ("Show on-screen keyboard");
++ m17n->virtkbd_prop = ibus_property_new ("virtual-keyboard",
++ PROP_TYPE_NORMAL,
++ label,
++ "input-keyboard",
++ tooltip,
++ TRUE,
++ FALSE,
++ PROP_STATE_UNCHECKED,
++ NULL);
++ g_object_ref_sink (m17n->virtkbd_prop);
++ ibus_prop_list_append (m17n->prop_list, m17n->virtkbd_prop);
++
++ if (klass->virtual_keyboard_enabled &&
++ klass->virtual_keyboard != NULL)
++ ibus_property_set_visible (m17n->virtkbd_prop, TRUE);
++
+ m17n->table = ibus_lookup_table_new (9, 0, TRUE, TRUE);
+ g_object_ref_sink (m17n->table);
+ m17n->context = NULL;
+@@ -463,6 +497,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine *m17n)
+ }
+ #endif /* HAVE_SETUP */
+
++ if (m17n->virtkbd_prop) {
++ g_object_unref (m17n->virtkbd_prop);
++ m17n->virtkbd_prop = NULL;
++ }
++
+ if (m17n->table) {
+ g_object_unref (m17n->table);
+ m17n->table = NULL;
+@@ -473,6 +512,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine *m17n)
+ m17n->context = NULL;
+ }
+
++ if (m17n->virtkbd) {
++ g_object_unref (m17n->virtkbd);
++ m17n->virtkbd = NULL;
++ }
++
+ IBUS_OBJECT_CLASS (parent_class)->destroy ((IBusObject *)m17n);
+ }
+
+@@ -705,6 +749,9 @@ ibus_m17n_engine_enable (IBusEngine *engine)
+ input context that we will use surrounding-text. */
+ ibus_engine_get_surrounding_text (engine, NULL, NULL, NULL);
+ #endif /* HAVE_IBUS_ENGINE_GET_SURROUNDING_TEXT */
++
++ if (m17n->virtkbd)
++ ibus_m17n_virtual_keyboard_enable (m17n->virtkbd);
+ }
+
+ static void
+@@ -714,6 +761,9 @@ ibus_m17n_engine_disable (IBusEngine *engine)
+
+ ibus_m17n_engine_focus_out (engine);
+ parent_class->disable (engine);
++
++ if (m17n->virtkbd)
++ ibus_m17n_virtual_keyboard_disable (m17n->virtkbd);
+ }
+
+ static void
+@@ -776,6 +826,22 @@ ibus_m17n_engine_property_activate (IBusEngine *engine,
+ }
+ #endif /* HAVE_SETUP */
+
++#ifdef HAVE_EEKBOARD
++ if (g_strcmp0 (prop_name, "virtual-keyboard") == 0) {
++ /* virtual keyboard is not initialized until a user activates
++ the "virtual-keyboard" prop for the first time */
++ if (m17n->virtkbd == NULL) {
++ IBusM17NEngineClass *klass =
++ (IBusM17NEngineClass *) G_OBJECT_GET_CLASS (m17n);
++
++ m17n->virtkbd =
++ ibus_m17n_virtual_keyboard_new ((IBusEngine *)m17n,
++ klass->virtual_keyboard);
++ }
++ ibus_m17n_virtual_keyboard_toggle_display (m17n->virtkbd);
++ }
++#endif /* HAVE_EEKBOARD */
++
+ parent_class->property_activate (engine, prop_name, prop_state);
+ }
+
+diff --git a/src/ibus-m17n-preferences.ui b/src/ibus-m17n-preferences.ui
+index a46ab49..bca034d 100644
+--- a/src/ibus-m17n-preferences.ui
++++ b/src/ibus-m17n-preferences.ui
+@@ -192,6 +192,7 @@
+ <child>
+ <object class="GtkTable" id="table2">
+ <property name="visible">True</property>
++ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <child>
+ <object class="GtkLabel" id="label9">
+@@ -210,6 +211,21 @@
+ <property name="right_attach">2</property>
+ </packing>
+ </child>
++ <child>
++ <object class="GtkCheckButton" id="checkbutton_virtkbd">
++ <property name="label" translatable="yes">Enable Virtual Keyboard</property>
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="receives_default">False</property>
++ <property name="draw_indicator">True</property>
++ </object>
++ <packing>
++ <property name="left_attach">0</property>
++ <property name="right_attach">2</property>
++ <property name="top_attach">1</property>
++ <property name="bottom_attach">2</property>
++ </packing>
++ </child>
+ </object>
+ </child>
+ </object>
+diff --git a/src/m17nutil.c b/src/m17nutil.c
+index 94a6891..2143e54 100644
+--- a/src/m17nutil.c
++++ b/src/m17nutil.c
+@@ -18,7 +18,8 @@ typedef enum {
+ ENGINE_CONFIG_LAYOUT_MASK = 1 << 1,
+ ENGINE_CONFIG_HOTKEYS_MASK = 1 << 2,
+ ENGINE_CONFIG_SYMBOL_MASK = 1 << 3,
+- ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 4
++ ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 4,
++ ENGINE_CONFIG_VIRTUAL_KEYBOARD_MASK = 1 << 5
+ } EngineConfigMask;
+
+ struct _EngineConfigNode {
+@@ -285,6 +286,8 @@ ibus_m17n_get_engine_config (const gchar *engine_name)
+ config->symbol = cnode->config.symbol;
+ if (cnode->mask & ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK)
+ config->preedit_highlight = cnode->config.preedit_highlight;
++ if (cnode->mask & ENGINE_CONFIG_VIRTUAL_KEYBOARD_MASK)
++ config->virtual_keyboard = cnode->config.virtual_keyboard;
+ }
+ }
+ return config;
+@@ -340,6 +343,11 @@ ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
+ cnode->mask |= ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK;
+ continue;
+ }
++ if (g_strcmp0 (sub_node->name , "virtual-keyboard") == 0) {
++ cnode->config.virtual_keyboard = g_strdup (sub_node->text);
++ cnode->mask |= ENGINE_CONFIG_VIRTUAL_KEYBOARD_MASK;
++ continue;
++ }
+ g_warning ("<engine> element contains invalid element <%s>",
+ sub_node->name);
+ }
+@@ -494,3 +502,52 @@ ibus_m17n_config_get_int (IBusConfig *config,
+ return FALSE;
+ #endif /* !IBUS_CHECK_VERSION(1,3,99) */
+ }
++
++void
++ibus_m17n_config_set_boolean (IBusConfig *config,
++ const gchar *section,
++ const gchar *name,
++ gboolean value)
++{
++#if IBUS_CHECK_VERSION(1,3,99)
++ ibus_config_set_value (config, section, name, g_variant_new_boolean (value));
++#else
++ GValue v = { 0 };
++
++ g_value_init (&v, G_TYPE_BOOLEAN);
++ g_value_set_boolean (&v, value);
++ ibus_config_set_value (config, section, name, &v);
++#endif /* !IBUS_CHECK_VERSION(1,3,99) */
++}
++
++gboolean
++ibus_m17n_config_get_boolean (IBusConfig *config,
++ const gchar *section,
++ const gchar *name,
++ gboolean *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_boolean (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_boolean (&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 21b1bb9..9c3fca8 100644
+--- a/src/m17nutil.h
++++ b/src/m17nutil.h
+@@ -25,6 +25,9 @@ struct _IBusM17NEngineConfig {
+
+ /* whether to highlight preedit */
+ gboolean preedit_highlight;
++
++ /* virtual keyboard type */
++ gchar *virtual_keyboard;
+ };
+
+ typedef struct _IBusM17NEngineConfig IBusM17NEngineConfig;
+@@ -56,4 +59,12 @@ gboolean ibus_m17n_config_get_int (IBusConfig *config,
+ const gchar *section,
+ const gchar *name,
+ gint *result);
++void ibus_m17n_config_set_boolean (IBusConfig *config,
++ const gchar *section,
++ const gchar *name,
++ gboolean value);
++gboolean ibus_m17n_config_get_boolean (IBusConfig *config,
++ const gchar *section,
++ const gchar *name,
++ gboolean *result);
+ #endif
+diff --git a/src/setup.c b/src/setup.c
+index 30386df..1c534d6 100644
+--- a/src/setup.c
++++ b/src/setup.c
+@@ -25,6 +25,7 @@ struct _SetupDialog {
+ GtkWidget *colorbutton_foreground;
+ GtkWidget *checkbutton_background;
+ GtkWidget *colorbutton_background;
++ GtkWidget *checkbutton_virtkbd;
+ GtkWidget *treeview;
+ GtkListStore *store;
+
+@@ -322,6 +323,15 @@ setup_dialog_load_config (SetupDialog *dialog)
+ gtk_combo_box_set_active (GTK_COMBO_BOX(dialog->combobox_orientation),
+ index);
+
++ if (!ibus_m17n_config_get_boolean (dialog->config,
++ dialog->section,
++ "virtual_keyboard_enabled",
++ &bvalue))
++ bvalue = FALSE;
++
++ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(dialog->checkbutton_virtkbd),
++ bvalue);
++
+ /* Advanced -> m17n-lib configuration */
+ dialog->store = gtk_list_store_new (NUM_COLS,
+ G_TYPE_STRING,
+@@ -404,6 +414,17 @@ save_choice (SetupDialog *dialog,
+ ibus_m17n_config_set_int (dialog->config, dialog->section, name, active);
+ }
+
++static void
++save_toggle (SetupDialog *dialog,
++ GtkToggleButton *togglebutton,
++ const gchar *name)
++{
++ ibus_m17n_config_set_boolean (dialog->config,
++ dialog->section,
++ name,
++ gtk_toggle_button_get_active (togglebutton));
++}
++
+ static gboolean
+ save_m17n_options (SetupDialog *dialog)
+ {
+@@ -486,6 +507,9 @@ setup_dialog_save_config (SetupDialog *dialog)
+ save_choice (dialog,
+ GTK_COMBO_BOX(dialog->combobox_orientation),
+ "lookup_table_orientation");
++ save_toggle (dialog,
++ GTK_TOGGLE_BUTTON(dialog->checkbutton_virtkbd),
++ "virtual_keyboard_enabled");
+ save_m17n_options (dialog);
+ }
+
+@@ -528,6 +552,8 @@ setup_dialog_new (IBusConfig *config,
+ 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, "checkbutton_virtkbd");
++ dialog->checkbutton_virtkbd = GTK_WIDGET(object);
+ object = gtk_builder_get_object (builder, "treeview_mim_config");
+ dialog->treeview = GTK_WIDGET(object);
+
+diff --git a/src/virtkbd.c b/src/virtkbd.c
+new file mode 100644
+index 0000000..9baf971
+--- /dev/null
++++ b/src/virtkbd.c
+@@ -0,0 +1,233 @@
++/* vim:set et sts=4: */
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++
++#ifdef HAVE_EEKBOARD
++#include <eekboard/eekboard-client.h>
++#endif /* HAVE_EEKBOARD */
++
++#include "virtkbd.h"
++
++struct _IBusM17NVirtualKeyboard {
++ GObject parent;
++ IBusEngine *engine;
++ gchar *keyboard_type;
++ GSList *keyboards;
++
++#ifdef HAVE_EEKBOARD
++ EekboardClient *client;
++ EekboardContext *context;
++#endif /* HAVE_EEKBOARD */
++};
++
++struct _IBusM17NVirtualKeyboardClass {
++ GObjectClass parent_class;
++};
++
++typedef struct _IBusM17NVirtualKeyboardClass IBusM17NVirtualKeyboardClass;
++
++#ifdef HAVE_EEKBOARD
++#define _EEK_INIT() eek_init ()
++#else
++#define _EEK_INIT()
++#endif /* HAVE_EEKBOARD */
++
++G_DEFINE_TYPE_WITH_CODE (IBusM17NVirtualKeyboard, ibus_m17n_virtual_keyboard,
++ G_TYPE_OBJECT, _EEK_INIT());
++
++static void
++ibus_m17n_virtual_keyboard_dispose (GObject *object)
++{
++ IBusM17NVirtualKeyboard *virtkbd = IBUS_M17N_VIRTUAL_KEYBOARD (object);
++
++ if (virtkbd->engine) {
++ g_object_unref (virtkbd->engine);
++ virtkbd->engine = NULL;
++ }
++ if (virtkbd->keyboards) {
++ GSList *next = virtkbd->keyboards->next;
++ /* virtkbd->keyboards is a ring; break it before free */
++ virtkbd->keyboards->next = NULL;
++ g_slist_free (next);
++ }
++
++#ifdef HAVE_EEKBOARD
++ if (virtkbd->context) {
++ g_object_unref (virtkbd->context);
++ virtkbd->context = NULL;
++ }
++ if (virtkbd->client) {
++ g_object_unref (virtkbd->client);
++ virtkbd->client = NULL;
++ }
++#endif /* HAVE_EEKBOARD */
++
++ G_OBJECT_CLASS (ibus_m17n_virtual_keyboard_parent_class)->dispose (object);
++}
++
++static void
++ibus_m17n_virtual_keyboard_finalize (GObject *object)
++{
++ IBusM17NVirtualKeyboard *virtkbd = IBUS_M17N_VIRTUAL_KEYBOARD (object);
++
++ g_free (virtkbd->keyboard_type);
++
++ G_OBJECT_CLASS (ibus_m17n_virtual_keyboard_parent_class)->finalize (object);
++}
++
++static void
++ibus_m17n_virtual_keyboard_class_init (IBusM17NVirtualKeyboardClass *klass)
++{
++ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
++ gobject_class->dispose = ibus_m17n_virtual_keyboard_dispose;
++ gobject_class->finalize = ibus_m17n_virtual_keyboard_finalize;
++}
++
++static void
++ibus_m17n_virtual_keyboard_init (IBusM17NVirtualKeyboard *self)
++{
++}
++
++#ifdef HAVE_EEKBOARD
++static void
++destroyed_cb (EekboardClient *client,
++ IBusM17NVirtualKeyboard *virtkbd)
++{
++ if (virtkbd->context) {
++ g_object_unref (virtkbd->context);
++ virtkbd->context = NULL;
++ }
++ if (virtkbd->client) {
++ g_object_unref (virtkbd->client);
++ virtkbd->client = NULL;
++ }
++}
++
++static void
++key_pressed_cb (EekboardContext *context,
++ gchar *keyname,
++ EekSymbol *symbol,
++ guint modifiers,
++ IBusM17NVirtualKeyboard *virtkbd)
++{
++ if (EEK_IS_TEXT (symbol)) {
++ const gchar *string;
++ IBusText *text;
++
++ string = eek_text_get_text (EEK_TEXT (symbol));
++ text = ibus_text_new_from_static_string (string);
++ ibus_engine_commit_text (virtkbd->engine, text);
++ } else if (EEK_IS_KEYSYM (symbol)) {
++ guint keyval = eek_keysym_get_xkeysym (EEK_KEYSYM (symbol));
++ ibus_engine_forward_key_event (virtkbd->engine,
++ keyval,
++ 0,
++ modifiers);
++ ibus_engine_forward_key_event (virtkbd->engine,
++ keyval,
++ 0,
++ modifiers | IBUS_RELEASE_MASK);
++ } else if (g_strcmp0 (eek_symbol_get_name (symbol),
++ "cycle-keyboard") == 0) {
++ virtkbd->keyboards = g_slist_next (virtkbd->keyboards);
++ eekboard_context_set_keyboard (virtkbd->context,
++ GPOINTER_TO_UINT (virtkbd->keyboards->data),
++ NULL);
++ }
++}
++
++static void
++init_client (IBusM17NVirtualKeyboard *virtkbd)
++{
++ GDBusConnection *connection;
++ GError *error;
++ gchar **strv, **p;
++
++ error = NULL;
++ connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
++ if (connection == NULL) {
++ g_printerr ("Can't connect to the session bus: %s\n",
++ error->message);
++ return;
++ }
++
++ virtkbd->client = eekboard_client_new (connection, NULL);
++ g_object_unref (connection);
++ g_signal_connect (virtkbd->client, "destroyed",
++ G_CALLBACK (destroyed_cb), virtkbd);
++
++ virtkbd->context = eekboard_client_create_context (virtkbd->client,
++ "ibus-m17n",
++ NULL);
++ g_signal_connect (virtkbd->context, "key-pressed",
++ G_CALLBACK (key_pressed_cb), virtkbd);
++
++ strv = g_strsplit (virtkbd->keyboard_type, ",", -1);
++ for (p = strv; *p; p++) {
++ guint keyboard;
++
++ keyboard = eekboard_context_add_keyboard (virtkbd->context,
++ g_strstrip (*p),
++ NULL);
++ virtkbd->keyboards = g_slist_prepend (virtkbd->keyboards,
++ GUINT_TO_POINTER (keyboard));
++ }
++ virtkbd->keyboards = g_slist_reverse (virtkbd->keyboards);
++ g_strfreev (strv);
++
++ /* make a cycle */
++ g_slist_last (virtkbd->keyboards)->next = virtkbd->keyboards;
++
++ eekboard_context_set_keyboard (virtkbd->context,
++ GPOINTER_TO_UINT (virtkbd->keyboards->data),
++ NULL);
++}
++#endif /* HAVE_EEKBOARD */
++
++void
++ibus_m17n_virtual_keyboard_toggle_display (IBusM17NVirtualKeyboard *virtkbd)
++{
++#ifdef HAVE_EEKBOARD
++ if (virtkbd->client == NULL)
++ ibus_m17n_virtual_keyboard_enable (virtkbd);
++
++ if (virtkbd->client != NULL) {
++ if (eekboard_context_is_visible (virtkbd->context))
++ eekboard_context_hide_keyboard (virtkbd->context, NULL);
++ else
++ eekboard_context_show_keyboard (virtkbd->context, NULL);
++ }
++#endif /* HAVE_EEKBOARD */
++}
++
++void
++ibus_m17n_virtual_keyboard_enable (IBusM17NVirtualKeyboard *virtkbd)
++{
++#ifdef HAVE_EEKBOARD
++ if (virtkbd->client == NULL)
++ init_client (virtkbd);
++
++ if (virtkbd->client != NULL)
++ eekboard_client_push_context (virtkbd->client, virtkbd->context, NULL);
++#endif /* HAVE_EEKBOARD */
++}
++
++void
++ibus_m17n_virtual_keyboard_disable (IBusM17NVirtualKeyboard *virtkbd)
++{
++#ifdef HAVE_EEKBOARD
++ if (virtkbd->client != NULL)
++ eekboard_client_pop_context (virtkbd->client, NULL);
++#endif /* HAVE_EEKBOARD */
++}
++
++IBusM17NVirtualKeyboard *
++ibus_m17n_virtual_keyboard_new (IBusEngine *engine,
++ const gchar *keyboard_type)
++{
++ IBusM17NVirtualKeyboard *virtkbd = g_object_new (IBUS_M17N_TYPE_VIRTUAL_KEYBOARD, NULL);
++ virtkbd->engine = g_object_ref (engine);
++ virtkbd->keyboard_type = g_strdup (keyboard_type);
++ return virtkbd;
++}
+diff --git a/src/virtkbd.h b/src/virtkbd.h
+new file mode 100644
+index 0000000..c28953a
+--- /dev/null
++++ b/src/virtkbd.h
+@@ -0,0 +1,31 @@
++#ifndef __VIRTKBD_H__
++#define __VIRTKBD_H__ 1
++
++#include <ibus.h>
++
++G_BEGIN_DECLS
++
++#define IBUS_M17N_TYPE_VIRTUAL_KEYBOARD (ibus_m17n_virtual_keyboard_get_type())
++#define IBUS_M17N_VIRTUAL_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), IBUS_M17N_TYPE_VIRTUAL_KEYBOARD, IBusM17NVirtualKeyboard))
++#define IBUS_M17N_VIRTUAL_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), IBUS_M17N_TYPE_VIRTUAL_KEYBOARD, IBusM17NVirtualKeyboardClass))
++#define IBUS_M17N_IS_VIRTUAL_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), IBUS_M17N_TYPE_VIRTUAL_KEYBOARD))
++#define IBUS_M17N_IS_VIRTUAL_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), IBUS_M17N_TYPE_VIRTUAL_KEYBOARD))
++#define IBUS_M17N_VIRTUAL_KEYBOARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), IBUS_M17N_TYPE_VIRTUAL_KEYBOARD, IBusM17NVirtualKeyboardClass))
++
++typedef struct _IBusM17NVirtualKeyboard IBusM17NVirtualKeyboard;
++
++GType ibus_m17n_virtual_keyboard_get_type
++ (void);
++IBusM17NVirtualKeyboard *ibus_m17n_virtual_keyboard_new
++ (IBusEngine *engine,
++ const gchar *keyboard_type);
++void ibus_m17n_virtual_keyboard_toggle_display
++ (IBusM17NVirtualKeyboard *virtkbd);
++void ibus_m17n_virtual_keyboard_enable
++ (IBusM17NVirtualKeyboard *virtkbd);
++void ibus_m17n_virtual_keyboard_disable
++ (IBusM17NVirtualKeyboard *virtkbd);
++
++G_END_DECLS
++
++#endif /* __VIRTKBD_H__ */
+--
+1.7.6.1
+
diff --git a/ibus-m17n-xkb-options.patch b/ibus-m17n-xkb-options.patch
index 551f1c8..ab09cf0 100644
--- a/ibus-m17n-xkb-options.patch
+++ b/ibus-m17n-xkb-options.patch
@@ -1,386 +1,93 @@
-Patch to set certain XKB options when an m17n IME is set.
-Index: ibus-m17n-1.3.2/configure.ac
-===================================================================
---- ibus-m17n-1.3.2.orig/configure.ac
-+++ ibus-m17n-1.3.2/configure.ac
-@@ -106,6 +106,14 @@ AC_CHECK_FUNCS([ibus_engine_get_surround
- CFLAGS="$save_CFLAGS"
- LIBS="$save_LIBS"
-
-+# check libxklavier
-+have_libxklavier=no
-+PKG_CHECK_MODULES([LIBXKLAVIER], [libxklavier gdk-3.0 x11],
-+ have_libxklavier=yes)
-+if test x$have_libxklavier != xno; then
-+ AC_DEFINE([HAVE_LIBXKLAVIER], [1], [Define if libxklavier is found])
-+fi
-+
- # define GETTEXT_* variables
- GETTEXT_PACKAGE=ibus-m17n
- AC_SUBST(GETTEXT_PACKAGE)
-Index: ibus-m17n-1.3.2/src/Makefile.am
-===================================================================
---- ibus-m17n-1.3.2.orig/src/Makefile.am
-+++ ibus-m17n-1.3.2/src/Makefile.am
-@@ -66,10 +66,15 @@ ibus_engine_m17n_SOURCES = \
- engine.c \
- engine.h \
- $(NULL)
-+ibus_engine_m17n_CFLAGS = \
-+ @LIBXKLAVIER_CFLAGS@ \
-+ $(AM_CFLAGS) \
-+ $(NULL)
- ibus_engine_m17n_LDADD = \
- libm17ncommon.a \
- @IBUS_LIBS@ \
- @M17N_LIBS@ \
-+ @LIBXKLAVIER_LIBS@ \
- $(NULL)
-
- if HAVE_GTK
-Index: ibus-m17n-1.3.2/src/default.xml.in.in
-===================================================================
---- ibus-m17n-1.3.2.orig/src/default.xml.in.in
-+++ ibus-m17n-1.3.2/src/default.xml.in.in
-@@ -12,19 +12,22 @@
- <preedit-highlight>FALSE</preedit-highlight>
- </engine>
- <engine>
-- <name>m17n:bn:inscript</name>
-+ <name>m17n:bn:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <xkb-options>lv3:ralt_switch</xkb-options>
- </engine>
- <engine>
-- <name>m17n:gu:inscript</name>
-+ <name>m17n:gu:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <xkb-options>lv3:ralt_switch</xkb-options>
- </engine>
- <engine>
-- <name>m17n:hi:inscript</name>
-+ <name>m17n:hi:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <xkb-options>lv3:ralt_switch</xkb-options>
- </engine>
- <engine>
- <name>m17n:kn:kgp</name>
-@@ -37,19 +40,22 @@
- <preedit-highlight>FALSE</preedit-highlight>
- </engine>
- <engine>
-- <name>m17n:mai:inscript</name>
-+ <name>m17n:mai:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <xkb-options>lv3:ralt_switch</xkb-options>
- </engine>
- <engine>
-- <name>m17n:ml:inscript</name>
-+ <name>m17n:ml:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <xkb-options>lv3:ralt_switch</xkb-options>
- </engine>
- <engine>
-- <name>m17n:mr:inscript</name>
-+ <name>m17n:mr:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <xkb-options>lv3:ralt_switch</xkb-options>
- </engine>
- <engine>
- <name>m17n:ne:rom</name>
-@@ -57,14 +63,16 @@
- <preedit-highlight>FALSE</preedit-highlight>
- </engine>
- <engine>
-- <name>m17n:or:inscript</name>
-+ <name>m17n:or:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <xkb-options>lv3:ralt_switch</xkb-options>
- </engine>
- <engine>
-- <name>m17n:pa:inscript</name>
-+ <name>m17n:pa:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <xkb-options>lv3:ralt_switch</xkb-options>
- </engine>
- <engine>
- <name>m17n:sa:harvard-kyoto</name>
-@@ -72,14 +80,16 @@
- <preedit-highlight>FALSE</preedit-highlight>
- </engine>
- <engine>
-- <name>m17n:sd:inscript</name>
-+ <name>m17n:sd:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <xkb-options>lv3:ralt_switch</xkb-options>
- </engine>
- <engine>
- <name>m17n:si:wijesekera</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <xkb-options>lv3:ralt_switch</xkb-options>
- </engine>
- <engine>
- <name>m17n:ta:tamil99</name>
-@@ -87,9 +97,10 @@
- <preedit-highlight>FALSE</preedit-highlight>
- </engine>
- <engine>
-- <name>m17n:te:inscript</name>
-+ <name>m17n:te:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <xkb-options>lv3:ralt_switch</xkb-options>
- </engine>
- <!-- Samanala should have lower rank than other Sinhala
- engines since it is the only non-keyboard input method in
-@@ -226,6 +237,7 @@
- <name>m17n:si:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <xkb-options>lv3:ralt_switch</xkb-options>
- </engine>
- <engine>
- <name>m17n:ta:*</name>
-Index: ibus-m17n-1.3.2/src/engine.c
-===================================================================
---- ibus-m17n-1.3.2.orig/src/engine.c
-+++ ibus-m17n-1.3.2/src/engine.c
-@@ -6,6 +6,10 @@
- #include <ibus.h>
- #include <m17n.h>
- #include <string.h>
-+#ifdef HAVE_LIBXKLAVIER
-+#include <gdk/gdkx.h>
-+#include <libxklavier/xklavier.h>
-+#endif /* HAVE_LIBXKLAVIER */
- #include "m17nutil.h"
- #include "engine.h"
-
-@@ -38,6 +42,10 @@ struct _IBusM17NEngineClass {
- gboolean use_iok;
-
- MInputMethod *im;
-+
-+#if HAVE_LIBXKLAVIER
-+ XklConfigRec *xkl_config_rec;
-+#endif /* HAVE_LIBXKLAVIER */
- };
-
- /* functions prototype */
-@@ -105,12 +113,90 @@ static IBusEngineClass *parent_class = N
-
- static IBusConfig *config = NULL;
-
-+#if HAVE_LIBXKLAVIER
-+static XklEngine *xkl_engine = NULL;
-+static XklConfigRec *xkl_system_config_rec = NULL;
-+
-+static gboolean
-+parse_xkb_options (XklConfigRec *config_rec, const gchar *xkb_options)
-+{
-+ gchar **strv;
-+
-+ strv = g_strsplit (xkb_options, ",", -1);
-+ if (g_strv_length (strv) < 1) {
-+ g_strfreev (strv);
-+ return FALSE;
-+ }
-+
-+ g_strfreev (config_rec->options);
-+ config_rec->options = strv;
-+
-+ return TRUE;
-+}
-+
-+static GdkFilterReturn
-+filter_xkl_event (GdkXEvent *xev,
-+ GdkEvent *event,
-+ gpointer user_data)
-+{
-+ XEvent *xevent = (XEvent *)xev;
-+
-+ xkl_engine_filter_events (xkl_engine, xevent);
-+ return GDK_FILTER_CONTINUE;
-+}
-+
-+static void
-+on_xkl_config_changed (XklEngine *xklengine,
-+ gpointer user_data)
-+{
-+ IBusM17NEngineClass *klass = user_data;
-+ XklConfigRec *config_rec;
-+
-+ config_rec = xkl_config_rec_new ();
-+ if (!xkl_config_rec_get_from_server (config_rec, xkl_engine)) {
-+ g_object_unref (config_rec);
-+ g_warning ("Can't get default keyboard config from the server");
-+ } else if (klass->xkl_config_rec &&
-+ !xkl_config_rec_equals (config_rec, klass->xkl_config_rec)) {
-+ if (xkl_system_config_rec)
-+ g_object_unref (xkl_system_config_rec);
-+ xkl_system_config_rec = config_rec;
-+ }
-+}
-+#endif /* HAVE_LIBXKLAVIER */
-+
- void
- ibus_m17n_init (IBusBus *bus)
- {
-+#if HAVE_LIBXKLAVIER
-+ if (gdk_init_check (NULL, NULL)) {
-+ GdkDisplay *display = gdk_display_get_default ();
-+ g_assert (display);
-+
-+ xkl_engine = xkl_engine_get_instance (GDK_DISPLAY_XDISPLAY (display));
-+ xkl_system_config_rec = xkl_config_rec_new ();
-+ if (!xkl_config_rec_get_from_server (xkl_system_config_rec,
-+ xkl_engine)) {
-+ g_object_unref (xkl_system_config_rec);
-+ xkl_system_config_rec = NULL;
-+
-+ g_warning ("Can't get default keyboard config from the server");
-+ } else {
-+ gdk_window_add_filter (NULL,
-+ (GdkFilterFunc) filter_xkl_event,
-+ NULL);
-+ gdk_window_add_filter (gdk_get_default_root_window (),
-+ (GdkFilterFunc) filter_xkl_event,
-+ NULL);
-+ xkl_engine_start_listen (xkl_engine, XKLL_TRACK_KEYBOARD_STATE);
-+ }
-+ }
-+#endif /* HAVE_LIBXKLAVIER */
-+
- config = ibus_bus_get_config (bus);
- if (config)
- g_object_ref_sink (config);
-+
- ibus_m17n_init_common ();
- }
-
-@@ -299,6 +385,25 @@ ibus_m17n_engine_class_init (IBusM17NEng
- G_CALLBACK(ibus_m17n_config_value_changed),
- klass);
-
-+#if HAVE_LIBXKLAVIER
-+ if (engine_config->xkb_options) {
-+ klass->xkl_config_rec = xkl_config_rec_new ();
-+ if (!xkl_config_rec_get_from_server (klass->xkl_config_rec,
-+ xkl_engine)) {
-+ g_object_unref (klass->xkl_config_rec);
-+ g_warning ("Can't get default keyboard config from the server");
-+ } else if (!parse_xkb_options (klass->xkl_config_rec,
-+ engine_config->xkb_options)) {
-+ g_object_unref (klass->xkl_config_rec);
-+ g_warning ("Can't parse xkb options %s",
-+ engine_config->xkb_options);
-+ }
-+ }
-+
-+ g_signal_connect (xkl_engine, "X-config-changed",
-+ G_CALLBACK(on_xkl_config_changed), klass);
-+#endif /* HAVE_LIBXKLAVIER */
-+
- klass->im = NULL;
- }
-
-@@ -412,6 +517,9 @@ ibus_m17n_engine_constructor (GType
- IBusM17NEngine *m17n;
- GObjectClass *object_class;
- IBusM17NEngineClass *klass;
-+#if HAVE_LIBXKLAVIER
-+ GdkDisplay *display;
-+#endif /* HAVE_LIBXKLAVIER */
-
- m17n = (IBusM17NEngine *) G_OBJECT_CLASS (parent_class)->constructor (type,
- n_construct_params,
-@@ -499,6 +607,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine
- m17n->context = NULL;
- }
-
-+#if HAVE_LIBXKLAVIER
-+ if (xkl_system_config_rec)
-+ xkl_config_rec_activate (xkl_system_config_rec, xkl_engine);
-+#endif /* HAVE_LIBXKLAVIER */
-+
- IBUS_OBJECT_CLASS (parent_class)->destroy ((IBusObject *)m17n);
- }
-
-@@ -735,6 +848,19 @@ ibus_m17n_engine_enable (IBusEngine *eng
- ibus_engine_get_surrounding_text (engine, &text, &cursor_pos);
- g_object_unref (text);
- #endif /* HAVE_IBUS_ENGINE_GET_SURROUNDING_TEXT */
-+
-+#if HAVE_LIBXKLAVIER
-+ GObjectClass *object_class;
-+ IBusM17NEngineClass *klass;
-+
-+ object_class = G_OBJECT_GET_CLASS (m17n);
-+ klass = (IBusM17NEngineClass *) object_class;
-+
-+ if (klass->xkl_config_rec) {
-+ if (!xkl_config_rec_activate (klass->xkl_config_rec, xkl_engine))
-+ g_warning ("Can't set the XKB layout");
-+ }
-+#endif /* HAVE_LIBXKLAVIER */
- }
-
- static void
-@@ -744,6 +870,17 @@ ibus_m17n_engine_disable (IBusEngine *en
-
- ibus_m17n_engine_focus_out (engine);
- parent_class->disable (engine);
-+
-+#if HAVE_LIBXKLAVIER
-+ GObjectClass *object_class;
-+ IBusM17NEngineClass *klass;
-+
-+ object_class = G_OBJECT_GET_CLASS (m17n);
-+ klass = (IBusM17NEngineClass *) object_class;
-+
-+ if (xkl_system_config_rec)
-+ xkl_config_rec_activate (xkl_system_config_rec, xkl_engine);
-+#endif /* HAVE_LIBXKLAVIER */
- }
-
- static void
-Index: ibus-m17n-1.3.2/src/m17nutil.c
-===================================================================
---- ibus-m17n-1.3.2.orig/src/m17nutil.c
-+++ ibus-m17n-1.3.2/src/m17nutil.c
-@@ -290,6 +290,11 @@ ibus_m17n_engine_config_parse_xml_node (
- sub_node->name, sub_node->text);
+From 0cc2abaab50e6668e525da093ef12ed0277d5c21 Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <ueno(a)unixuser.org>
+Date: Mon, 8 Aug 2011 09:59:28 +0900
+Subject: [PATCH 3/6] Set XKB layout option via default.xml.
+
+---
+ src/default.xml.in.in | 9 +++++++++
+ src/m17nutil.c | 13 +++++++++++--
+ src/m17nutil.h | 3 +++
+ 3 files changed, 23 insertions(+), 2 deletions(-)
+
+diff --git a/src/default.xml.in.in b/src/default.xml.in.in
+index dc93fd3..785ab05 100644
+--- a/src/default.xml.in.in
++++ b/src/default.xml.in.in
+@@ -157,6 +157,15 @@
+ <name>m17n:si:samanala</name>
+ <rank>0</rank>
+ </engine>
++ <!-- Some Indic engines expect AltGr is automatically mapped -->
++ <engine>
++ <name>m17n:*:inscript</name>
++ <layout>default[lv3:ralt_switch]</layout>
++ </engine>
++ <engine>
++ <name>m17n:si:*</name>
++ <layout>default[lv3:ralt_switch]</layout>
++ </engine>
+ <!-- Some CJK engines use preedit. -->
+ <engine>
+ <name>m17n:zh:cangjie</name>
+diff --git a/src/m17nutil.c b/src/m17nutil.c
+index b06f71d..201c8b4 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_LAYOUT_MASK = 1 << 1,
++ ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 2
+ } EngineConfigMask;
+
+ struct _EngineConfigNode {
+@@ -130,7 +131,7 @@ ibus_m17n_engine_new (MSymbol lang,
+ "language", msymbol_name (lang),
+ "license", "GPL",
+ "icon", engine_icon ? engine_icon : "",
+- "layout", "us",
++ "layout", config->layout ? config->layout : "us",
+ "rank", config->rank,
+ NULL);
+ #else
+@@ -272,6 +273,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_LAYOUT_MASK)
++ config->layout = cnode->config.layout;
+ if (cnode->mask & ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK)
+ config->preedit_highlight = cnode->config.preedit_highlight;
+ }
+@@ -304,6 +307,12 @@ ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
+ cnode->mask |= ENGINE_CONFIG_RANK_MASK;
continue;
}
-+ if (g_strcmp0 (sub_node->name, "xkb-options") == 0) {
-+ g_free (cnode->config.xkb_options);
-+ cnode->config.xkb_options = g_strdup (sub_node->text);
++ if (g_strcmp0 (sub_node->name , "layout") == 0) {
++ g_free (cnode->config.layout);
++ cnode->config.layout = g_strdup (sub_node->text);
++ cnode->mask |= ENGINE_CONFIG_LAYOUT_MASK;
+ continue;
+ }
- g_warning ("<engine> element contains invalid element <%s>",
- sub_node->name);
- }
-Index: ibus-m17n-1.3.2/src/m17nutil.h
-===================================================================
---- ibus-m17n-1.3.2.orig/src/m17nutil.h
-+++ ibus-m17n-1.3.2/src/m17nutil.h
-@@ -16,6 +16,9 @@ struct _IBusM17NEngineConfig {
-
+ 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 313e7bc..c7b283e 100644
+--- a/src/m17nutil.h
++++ b/src/m17nutil.h
+@@ -14,6 +14,9 @@ struct _IBusM17NEngineConfig {
+ /* engine rank */
+ gint rank;
+
++ /* keyboard layout */
++ gchar *layout;
++
/* whether to highlight preedit */
gboolean preedit_highlight;
-+
-+ /* keyboard options to which the engine switches when enabled */
-+ char *xkb_options;
};
-
- typedef struct _IBusM17NEngineConfig IBusM17NEngineConfig;
+--
+1.7.6.1
+
diff --git a/ibus-m17n-xx-icon-symbol.patch b/ibus-m17n-xx-icon-symbol.patch
index 43dac05..42e70fd 100644
--- a/ibus-m17n-xx-icon-symbol.patch
+++ b/ibus-m17n-xx-icon-symbol.patch
@@ -1,23 +1,45 @@
-Patch to embed hotkeys and symbol property in component XML.
-Index: ibus-m17n-1.3.2/configure.ac
-===================================================================
---- ibus-m17n-1.3.2.orig/configure.ac
-+++ ibus-m17n-1.3.2/configure.ac
-@@ -122,6 +122,10 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GET
+From 4cad5fe6e36be9cbfe0d50f683b489e9202c7d53 Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <ueno(a)unixuser.org>
+Date: Wed, 31 Aug 2011 11:44:46 +0900
+Subject: [PATCH 4/6] Supply hotkeys and symbol in engine desc.
+
+---
+ configure.ac | 3 +
+ m4/.gitignore | 2 +
+ m4/ibus.m4 | 52 ++++++++++++
+ src/default.xml.in.in | 207 +++++++++++++++++++++++++++++++++++++++++++++++++
+ src/m17nutil.c | 20 +++++-
+ src/m17nutil.h | 6 ++
+ 6 files changed, 289 insertions(+), 1 deletions(-)
+ create mode 100644 m4/ibus.m4
+
+diff --git a/configure.ac b/configure.ac
+index 927d382..23102c4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -114,6 +114,9 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Define to the read-only
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION(0.16.1)
+# hotkeys in component xml
+IBUS_WITH_HOTKEYS
-+IBUS_SET_SYMBOL([?])
+
# OUTPUT files
AC_CONFIG_FILES([ po/Makefile.in
-Index: ibus-m17n-1.3.2/m4/ibus.m4
-===================================================================
+diff --git a/m4/.gitignore b/m4/.gitignore
+index 0f4126c..e28d185 100644
+#--- a/m4/.gitignore
+#+++ b/m4/.gitignore
+@@ -1 +1,3 @@
+ *.m4
++!ibus.m4
++
+diff --git a/m4/ibus.m4 b/m4/ibus.m4
+new file mode 100644
+index 0000000..f8f074a
--- /dev/null
-+++ ibus-m17n-1.3.2/m4/ibus.m4
++++ b/m4/ibus.m4
@@ -0,0 +1,52 @@
+# IBUS_WITH_HOTKEYS([DEFAULT])
+AC_DEFUN([IBUS_WITH_HOTKEYS], [
@@ -71,53 +93,288 @@ Index: ibus-m17n-1.3.2/m4/ibus.m4
+ fi
+ AC_SUBST(IBUS_SYMBOL_XML)
+])
-Index: ibus-m17n-1.3.2/src/default.xml.in.in
-===================================================================
---- ibus-m17n-1.3.2.orig/src/default.xml.in.in
-+++ ibus-m17n-1.3.2/src/default.xml.in.in
-@@ -254,5 +254,7 @@
+diff --git a/src/default.xml.in.in b/src/default.xml.in.in
+index 785ab05..8192878 100644
+--- a/src/default.xml.in.in
++++ b/src/default.xml.in.in
+@@ -10,6 +10,8 @@
<name>m17n:*</name>
<rank>0</rank>
<preedit-highlight>FALSE</preedit-highlight>
++ <symbol></symbol>
+ @IBUS_HOTKEYS_XML@
-+ @IBUS_SYMBOL_XML@
</engine>
+ <!-- Indic engines should be selected by default:
+ https://bugzilla.redhat.com/show_bug.cgi?id=640896 -->
+@@ -203,4 +205,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>
-Index: ibus-m17n-1.3.2/src/m17nutil.c
-===================================================================
---- ibus-m17n-1.3.2.orig/src/m17nutil.c
-+++ ibus-m17n-1.3.2/src/m17nutil.c
-@@ -122,6 +122,8 @@ ibus_m17n_engine_new (MSymbol lang,
+diff --git a/src/m17nutil.c b/src/m17nutil.c
+index 201c8b4..94a6891 100644
+--- a/src/m17nutil.c
++++ b/src/m17nutil.c
+@@ -16,7 +16,9 @@ static MConverter *utf8_converter = NULL;
+ typedef enum {
+ ENGINE_CONFIG_RANK_MASK = 1 << 0,
+ ENGINE_CONFIG_LAYOUT_MASK = 1 << 1,
+- ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 2
++ ENGINE_CONFIG_HOTKEYS_MASK = 1 << 2,
++ ENGINE_CONFIG_SYMBOL_MASK = 1 << 3,
++ ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 4
+ } EngineConfigMask;
+
+ struct _EngineConfigNode {
+@@ -133,6 +135,8 @@ ibus_m17n_engine_new (MSymbol lang,
"icon", engine_icon ? engine_icon : "",
- "layout", "us",
+ "layout", config->layout ? config->layout : "us",
"rank", config->rank,
+ "hotkeys", config->hotkeys ? config->hotkeys : "",
+ "symbol", config->symbol ? config->symbol : "",
NULL);
#else
engine = ibus_engine_desc_new (engine_name,
-@@ -282,6 +284,14 @@ ibus_m17n_engine_config_parse_xml_node (
- cnode->config.rank = atoi (sub_node->text);
+@@ -275,6 +279,10 @@ ibus_m17n_get_engine_config (const gchar *engine_name)
+ config->rank = cnode->config.rank;
+ if (cnode->mask & ENGINE_CONFIG_LAYOUT_MASK)
+ config->layout = cnode->config.layout;
++ if (cnode->mask & ENGINE_CONFIG_HOTKEYS_MASK)
++ config->hotkeys = cnode->config.hotkeys;
++ 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;
+ }
+@@ -313,6 +321,16 @@ ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
+ cnode->mask |= ENGINE_CONFIG_LAYOUT_MASK;
continue;
}
+ if (g_strcmp0 (sub_node->name , "hotkeys") == 0) {
+ cnode->config.hotkeys = g_strdup (sub_node->text);
++ cnode->mask |= ENGINE_CONFIG_HOTKEYS_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;
-Index: ibus-m17n-1.3.2/src/m17nutil.h
-===================================================================
---- ibus-m17n-1.3.2.orig/src/m17nutil.h
-+++ ibus-m17n-1.3.2/src/m17nutil.h
-@@ -14,6 +14,12 @@ struct _IBusM17NEngineConfig {
- /* engine rank */
- gint rank;
+diff --git a/src/m17nutil.h b/src/m17nutil.h
+index c7b283e..21b1bb9 100644
+--- a/src/m17nutil.h
++++ b/src/m17nutil.h
+@@ -17,6 +17,12 @@ struct _IBusM17NEngineConfig {
+ /* keyboard layout */
+ gchar *layout;
+ /* hotkeys */
+ gchar *hotkeys;
@@ -127,4 +384,7 @@ Index: ibus-m17n-1.3.2/src/m17nutil.h
+
/* whether to highlight preedit */
gboolean preedit_highlight;
-
+ };
+--
+1.7.6.1
+
diff --git a/ibus-m17n.spec b/ibus-m17n.spec
index aa1103c..1afff8d 100644
--- a/ibus-m17n.spec
+++ b/ibus-m17n.spec
@@ -1,4 +1,10 @@
+%if (0%{?fedora} > 14)
+%global require_ibus_version 1.3.99.20110817
+%global require_eekboard_version 1.0.3
+%else
%global require_ibus_version 1.3.0
+%global require_eekboard_version 0.0.6
+%endif
%global have_bridge_hotkey 0
%if (0%{?fedora} > 14)
@@ -11,21 +17,26 @@
%global _with_hotkeys --with-hotkeys
%endif
+%if (0%{?fedora} > 16)
+%global _enable_eekboard --enable-eekboard
+%endif
+
Name: ibus-m17n
-Version: 1.3.2
-Release: 7%{?dist}
+Version: 1.3.3
+Release: 3%{?dist}
Summary: The M17N engine for IBus platform
License: GPLv2+
Group: System Environment/Libraries
URL: http://code.google.com/p/ibus/
Source0: http://ibus.googlecode.com/files/%{name}-%{version}.tar.gz
-# dummy source to keep quilt series file
-Source1: series
-Patch0: ibus-m17n-HEAD.patch
-Patch1: ibus-m17n-iok.patch
-Patch2: ibus-m17n-xkb-options.patch
-Patch3: ibus-m17n-xx-icon-symbol.patch
+#Patch0: ibus-m17n-HEAD.patch
+Patch1: ibus-m17n-default-xml-override.patch
+Patch2: ibus-m17n-setup-refactor.patch
+Patch3: ibus-m17n-xkb-options.patch
+Patch4: ibus-m17n-xx-icon-symbol.patch
+Patch5: ibus-m17n-virtkbd.patch
+Patch6: ibus-m17n-iok.patch
# The following BR is for autogen and not necessary when packging
# released tarballs.
@@ -41,10 +52,12 @@ BuildRequires: gtk2-devel
%endif
BuildRequires: libxklavier-devel
BuildRequires: ibus-devel >= %{require_ibus_version}
+BuildRequires: eekboard-devel >= %{require_eekboard_version}
Requires: ibus >= %{require_ibus_version}
Requires: m17n-lib
-Requires: iok > 1.3.1
+Requires: eekboard >= %{require_eekboard_version}
+Requires: iok
%description
M17N engine for IBus input platform. It allows input of many languages using
@@ -52,14 +65,19 @@ the input table maps from m17n-db.
%prep
%setup -q
-%patch0 -p1 -b .HEAD
-%patch1 -p1 -b .iok
-%patch2 -p1 -b .xkb-options
-%patch3 -p1 -b .xx-icon-symbol
+#patch0 -p1 -b .HEAD
+%patch1 -p1 -b .default-xml-override
+%patch2 -p1 -b .setup-refactor
+%patch3 -p1 -b .xkb-options
+# do not apply patch to m4/.gitignore
+sed -i 's!^[-+][-+][-+] .*/m4/\.gitignore!#\0!' %PATCH4
+%patch4 -p1 -b .xx-icon-symbol
+%patch5 -p1 -b .virtkbd
+%patch6 -p1 -b .iok
NOCONFIGURE=1 ./autogen.sh
%build
-%configure --disable-static %{?_with_gtk} %{?_with_hotkeys}
+%configure --disable-static %{?_with_gtk} %{?_with_hotkeys} %{?_enable_eekboard}
# make -C po update-gmo
make %{?_smp_mflags}
@@ -77,6 +95,29 @@ make DESTDIR=${RPM_BUILD_ROOT} install
%{_datadir}/ibus/component/*
%changelog
+* Fri Sep 9 2011 Takao Fujiwara <tfujiwar(a)redhat.com> - 1.3.3-3
+- Rebuild with the latest ibus 1.3.99.20110817-4 and eekboard 1.0.3
+
+* Fri Sep 2 2011 Daiki Ueno <dueno(a)redhat.com> - 1.3.3-2
+- Revive iok patch.
+
+* Thu Sep 1 2011 Daiki Ueno <dueno(a)redhat.com> - 1.3.3-1
+- New upstream release.
+- Add ibus-m17n-default-xml-override.patch.
+- Add ibus-m17n-virtkbd.patch, instead of ibus-m17n-iok.patch.
+
+* Tue Aug 9 2011 Daiki Ueno <dueno(a)redhat.com> - 1.3.2-10
+- Set symbol for m17n:ne:rom.
+
+* Mon Aug 8 2011 Daiki Ueno <dueno(a)redhat.com> - 1.3.2-9
+- Update ibus-m17n-xkb-options.patch.
+- Don't set XKB options directly from engine but via ibus-xkb
+
+* Fri Aug 5 2011 Daiki Ueno <dueno(a)redhat.com> - 1.3.2-8
+- Update ibus-m17n-xx-icon-symbol.patch.
+- Fix bug 727024 - ibus compose file needs a symbol tag for gnome-shell
+- Update ibus-m17n-xkb-options.patch.
+
* Thu Jul 7 2011 Daiki Ueno <dueno(a)redhat.com> - 1.3.2-7
- don't specify --with-hotkey.
diff --git a/sources b/sources
index c0a12ba..8af2da5 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-4c406147318f94e5e805c408c4be075e ibus-m17n-1.3.2.tar.gz
+8fa050df5b2d25095d0e2df51946b0de ibus-m17n-1.3.3.tar.gz
12 years, 8 months
[Fedora-i18n-bugs] [Bug 735316] New: [abrt] imsettings-1.2.3-1.fc15: tuple_info_free: Process /usr/libexec/imsettings-daemon was killed by signal 11 (SIGSEGV)
by Red Hat Bugzilla
Please do not reply directly to this email. All additional
comments should be made in the comments box of this bug.
Summary: [abrt] imsettings-1.2.3-1.fc15: tuple_info_free: Process /usr/libexec/imsettings-daemon was killed by signal 11 (SIGSEGV)
https://bugzilla.redhat.com/show_bug.cgi?id=735316
Summary: [abrt] imsettings-1.2.3-1.fc15: tuple_info_free:
Process /usr/libexec/imsettings-daemon was killed by
signal 11 (SIGSEGV)
Product: Fedora
Version: 15
Platform: i686
OS/Version: Unspecified
Status: NEW
Status Whiteboard: abrt_hash:4340a2f4ea3ac4baf67151ea8f82f37f5a632fbb
Severity: unspecified
Priority: unspecified
Component: imsettings
AssignedTo: tagoh(a)redhat.com
ReportedBy: blackmetalowiec(a)o2.pl
QAContact: extras-qa(a)fedoraproject.org
CC: tagoh(a)redhat.com, i18n-bugs(a)lists.fedoraproject.org
Classification: Fedora
Story Points: ---
Type: ---
abrt version: 2.0.3
architecture: i686
backtrace_rating: 4
cmdline: /usr/libexec/imsettings-daemon
comment: I can't remember
component: imsettings
crash_function: tuple_info_free
executable: /usr/libexec/imsettings-daemon
kernel: 2.6.38.8-32.fc15.i686.PAE
os_release: Fedora release 15 (Lovelock)
package: imsettings-1.2.3-1.fc15
reason: Process /usr/libexec/imsettings-daemon was killed by signal 11
(SIGSEGV)
time: Tue Jul 12 12:17:29 2011
uid: 500
username: kasia
var_log_messages: Jul 12 12:17:30 kasiakomp abrt[1469]: saved core dump of pid
1449 (/usr/libexec/imsettings-daemon) to
/var/spool/abrt/ccpp-2011-07-12-12:17:29-1449.new/coredump (17858560 bytes)
backtrace:
:warning: core file may not match specified executable file.
:[New LWP 1449]
:[New LWP 1463]
:[New LWP 1450]
:warning: File "/lib/libdbus-1.so.3.5.4" has a different build-id, file skipped
:warning: File "/lib/libudev.so.0.11.1" has a different build-id, file skipped
:Missing separate debuginfo for
:Try: yum --disablerepo='*' --enablerepo='*-debuginfo' install
/usr/lib/debug/.build-id/2c/a8544b0ff9269420c23a0ac22da52b7894148b
:warning: File "/lib/libdbus-1.so.3.5.4" has a different build-id, file skipped
:warning: File "/lib/libudev.so.0.11.1" has a different build-id, file skipped
:[Thread debugging using libthread_db enabled]
:warning: the debug information found in
"/usr/lib/debug//lib/libdbus-1.so.3.5.4.debug" does not match
"/lib/libdbus-1.so.3" (CRC mismatch).
:
:warning: the debug information found in
"/usr/lib/debug/lib/libdbus-1.so.3.5.4.debug" does not match
"/lib/libdbus-1.so.3" (CRC mismatch).
:
:warning: the debug information found in
"/usr/lib/debug//lib/libudev.so.0.11.1.debug" does not match
"/lib/libudev.so.0" (CRC mismatch).
:
:warning: the debug information found in
"/usr/lib/debug/lib/libudev.so.0.11.1.debug" does not match "/lib/libudev.so.0"
(CRC mismatch).
:
:Core was generated by `/usr/libexec/imsettings-daemon'.
:Program terminated with signal 11, Segmentation fault.
:#0 tuple_info_free (info=<optimized out>) at gvarianttypeinfo.c:345
:345 g_variant_type_info_unref (tuple_info->members[i].type_info);
:
:Thread 3 (Thread 0xb7702b70 (LWP 1450)):
:#0 0x0028f424 in __kernel_vsyscall ()
:No symbol table info available.
:#1 0x47760b9e in __GI___poll (fds=0xb6e02b90, nfds=3, timeout=-1) at
../sysdeps/unix/sysv/linux/poll.c:87
: resultvar = <optimized out>
: oldtype = -516
: result = <optimized out>
:#2 0x478ffaac in g_poll (fds=0xb6e02b90, nfds=3, timeout=-1) at gpoll.c:132
:No locals.
:#3 0x478f0c36 in g_main_context_poll (n_fds=3, fds=0x478275a0,
priority=<optimized out>, timeout=<optimized out>, context=0x81d4dd0) at
gmain.c:3405
: poll_func = 0x478ffa80 <g_poll>
:#4 g_main_context_iterate (context=0x81d4dd0, block=1200618112, dispatch=1,
self=0x81d4e60) at gmain.c:3087
: max_priority = 2147483647
: timeout = -1
: some_ready = <optimized out>
: nfds = 3
: allocated_nfds = <optimized out>
: fds = 0x478275a0
: __PRETTY_FUNCTION__ = "g_main_context_iterate"
:#5 0x478f1457 in g_main_loop_run (loop=0x81d4dc0) at gmain.c:3300
: self = 0x81d4e60
: __PRETTY_FUNCTION__ = "g_main_loop_run"
:#6 0x47f5d032 in gdbus_shared_thread_func (data=0x0) at gdbusprivate.c:276
:No locals.
:#7 0x47918535 in g_thread_create_proxy (data=0x81d4e60) at gthread.c:1955
: thread = 0x81d4e60
: __PRETTY_FUNCTION__ = "g_thread_create_proxy"
:#8 0x478249fe in start_thread (arg=0xb7702b70) at pthread_create.c:305
: __res = <optimized out>
: pd = 0xb7702b70
: now = <optimized out>
: unwind_buf = {cancel_jmp_buf = {{jmp_buf = {1199788020, 0, 4001536,
-1217387464, -2033960280, 1645281609}, mask_was_saved = 0}}, priv = {pad =
{0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
: not_first_call = <optimized out>
: pagesize_m1 = <optimized out>
: sp = <optimized out>
: freesize = <optimized out>
:#9 0x4776b24e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:133
:No locals.
:
:Thread 2 (Thread 0xb6ddfb70 (LWP 1463)):
:#0 0x0028f424 in __kernel_vsyscall ()
:No symbol table info available.
:#1 0x47760b9e in __GI___poll (fds=0xb6400ca0, nfds=1, timeout=-1) at
../sysdeps/unix/sysv/linux/poll.c:87
: resultvar = <optimized out>
: oldtype = -516
: result = <optimized out>
:#2 0x478ffaac in g_poll (fds=0xb6400ca0, nfds=1, timeout=-1) at gpoll.c:132
:No locals.
:#3 0x478f0c36 in g_main_context_poll (n_fds=1, fds=0x478275a0,
priority=<optimized out>, timeout=<optimized out>, context=0x81e7200) at
gmain.c:3405
: poll_func = 0x478ffa80 <g_poll>
:#4 g_main_context_iterate (context=0x81e7200, block=1200618112, dispatch=1,
self=0x81e82c8) at gmain.c:3087
: max_priority = 2147483647
: timeout = -1
: some_ready = <optimized out>
: nfds = 1
: allocated_nfds = <optimized out>
: fds = 0x478275a0
: __PRETTY_FUNCTION__ = "g_main_context_iterate"
:#5 0x478f1457 in g_main_loop_run (loop=0xb6400c90) at gmain.c:3300
: self = 0x81e82c8
: __PRETTY_FUNCTION__ = "g_main_loop_run"
:#6 0x0032f415 in dconf_context_thread (data=0x81e7200) at dconfcontext.c:11
: context = 0x81e7200
: loop = <optimized out>
: __PRETTY_FUNCTION__ = "dconf_context_thread"
:#7 0x47918535 in g_thread_create_proxy (data=0x81e82c8) at gthread.c:1955
: thread = 0x81e82c8
: __PRETTY_FUNCTION__ = "g_thread_create_proxy"
:#8 0x478249fe in start_thread (arg=0xb6ddfb70) at pthread_create.c:305
: __res = <optimized out>
: pd = 0xb6ddfb70
: now = <optimized out>
: unwind_buf = {cancel_jmp_buf = {{jmp_buf = {1199788020, 0, 4001536,
-1226968008, -580633941, 1645281609}, mask_was_saved = 0}}, priv = {pad = {0x0,
0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
: not_first_call = <optimized out>
: pagesize_m1 = <optimized out>
: sp = <optimized out>
: freesize = <optimized out>
:#9 0x4776b24e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:133
:No locals.
:
:Thread 1 (Thread 0xb7703720 (LWP 1449)):
:#0 tuple_info_free (info=<optimized out>) at gvarianttypeinfo.c:345
: i = <optimized out>
:#1 g_variant_type_info_unref (info=0x81e20c0) at gvarianttypeinfo.c:855
:No locals.
:#2 g_variant_type_info_unref (info=0x81e20c0) at gvarianttypeinfo.c:829
:No locals.
:#3 0x4792e232 in g_variant_unref (value=0xb6e01260) at gvariant-core.c:625
:No locals.
:#4 0x47f01fa2 in clear_op_res (simple=0x81e7138 [GSimpleAsyncResult]) at
gsimpleasyncresult.c:256
:No locals.
:#5 g_simple_async_result_finalize (object=0x81e7138 [GSimpleAsyncResult]) at
gsimpleasyncresult.c:274
: simple = 0x81e7138 [GSimpleAsyncResult]
:#6 0x47b8e5f5 in g_object_unref (_object=0x81e7138) at gobject.c:2734
: object = 0x81e7138 [GSimpleAsyncResult]
: old_ref = <optimized out>
: __PRETTY_FUNCTION__ = "g_object_unref"
:#7 0x47f4e711 in g_dbus_connection_call_done (source=0x81d0000
[GDBusConnection], result=0x81e7170, user_data=0xb6e01750) at
gdbusconnection.c:5025
: connection = 0x81d0000 [GDBusConnection]
: state = 0xb6e01750
: error = 0x0
: reply = 0xb6e03b80 [GDBusMessage]
: value = <optimized out>
:#8 0x47f02e33 in g_simple_async_result_complete (simple=0x81e7170
[GSimpleAsyncResult]) at gsimpleasyncresult.c:747
: current_source = <optimized out>
: current_context = <optimized out>
: __PRETTY_FUNCTION__ = "g_simple_async_result_complete"
:#9 0x47f02f5c in complete_in_idle_cb (data=0x81e7170) at
gsimpleasyncresult.c:757
: simple = 0x81e7170 [GSimpleAsyncResult]
:#10 0x478ec5d1 in g_idle_dispatch (source=0xb6e03f80, callback=0x47f02f40
<complete_in_idle_cb>, user_data=0x81e7170) at gmain.c:4558
:No locals.
:#11 0x478f05bf in g_main_dispatch (context=0xb6e00468) at gmain.c:2441
: dispatch = 0x478ec5b0 <g_idle_dispatch>
: was_in_call = 0
: user_data = 0x81e7170
: callback = 0x47f02f40 <complete_in_idle_cb>
: cb_funcs = 0x479c765c
: cb_data = 0xb6e03fb8
: current_source_link = {data = 0xb6e03f80, next = 0x0}
: need_destroy = <optimized out>
: source = 0xb6e03f80
: current = 0x81d5dc8
: i = <optimized out>
:#12 g_main_context_dispatch (context=0xb6e00468) at gmain.c:3014
:No locals.
:#13 0x478f0d30 in g_main_context_iterate (context=0xb6e00468,
block=1200618112, dispatch=1, self=0x81c6090) at gmain.c:3092
: max_priority = 0
: timeout = 0
: some_ready = 1
: nfds = <optimized out>
: allocated_nfds = <optimized out>
: fds = 0x478275a0
: __PRETTY_FUNCTION__ = "g_main_context_iterate"
:#14 0x478f1457 in g_main_loop_run (loop=0x81d5370) at gmain.c:3300
: self = 0x81c6090
: __PRETTY_FUNCTION__ = "g_main_loop_run"
:#15 0x0804b7d2 in main (argc=1, argv=0xbf9dcd14) at main.c:184
: err = 0x0
: arg_replace = 0
: arg_no_logfile = 0
: arg_xinputrcdir = 0x0
: arg_xinputdir = 0x0
: arg_homedir = 0x0
: arg_moduledir = 0x0
: loop = 0x81d5370
: ctx = <optimized out>
: entries = {{long_name = 0x8051c9c "replace", short_name = 0 '\000',
flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0xbf9dcc48, description =
0x8051b30 "Replace the instance of the imsettings daemon.", arg_description =
0x0}, {long_name = 0x8051383 "xinputrcdir", short_name = 0 '\000', flags = 1,
arg = G_OPTION_ARG_STRING, arg_data = 0xbf9dcc50, description = 0x8051b60 "Set
the system-wide xinputrc directory (for debugging purpose)", arg_description =
0x8051ca4 "DIR"}, {long_name = 0x80513a0 "xinputdir", short_name = 0 '\000',
flags = 1, arg = G_OPTION_ARG_STRING, arg_data = 0xbf9dcc54, description =
0x8051ba0 "Set the IM configuration directory (for debugging purpose)",
arg_description = 0x8051ca4 "DIR"}, {long_name = 0x8051368 "homedir",
short_name = 0 '\000', flags = 1, arg = G_OPTION_ARG_STRING, arg_data =
0xbf9dcc58, description = 0x8051bdc "Set a home directory (for debugging
purpose)", arg_description = 0x8051ca4 "DIR"}, {long_name = 0x80513c6
"moduledir", short_name = 0 '\000', flags = 1, arg = G_OPTION_ARG_STRING,
arg_data = 0xbf9dcc5c, description = 0x8051c0c "Set the imsettings module
directory (for debugging purpose)", arg_description = 0x8051ca4 "DIR"},
{long_name = 0x8051ca8 "no-logfile", short_name = 0 '\000', flags = 1, arg =
G_OPTION_ARG_NONE, arg_data = 0xbf9dcc4c, description = 0x8051cb3 "Do not
create a log file.", arg_description = 0x0}, {long_name = 0x0, short_name = 0
'\000', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0x0, description = 0x0,
arg_description = 0x0}}
: connection = 0x81d0000 [GDBusConnection]
:warning: File "/lib/libdbus-1.so.3.5.4" has a different build-id, file skipped
:warning: File "/lib/libudev.so.0.11.1" has a different build-id, file skipped
:From To Syms Read Shared Object Library
:0x48754d10 0x4875767c Yes /usr/lib/libnotify.so.4.0.0
:0x484819b0 0x4849788c Yes /usr/lib/libgdk_pixbuf-2.0.so.0.2300.3
:0x47c05720 0x47c224ec Yes /usr/lib/libpng12.so.0.44.0
:0x47844470 0x4785fb4c Yes /lib/libm-2.14.so
:0x47c2f610 0x47c33c1c Yes /usr/lib/libimsettings.so.5.1.0
:0x47ec2c50 0x47f7f40c Yes /lib/libgio-2.0.so.0.2800.8
:0x47e9ebd0 0x47e9fd4c Yes /lib/libgmodule-2.0.so.0.2800.8
:0x47b87fe0 0x47bbb72c Yes /lib/libgobject-2.0.so.0.2800.8
:0x47b67f30 0x47b6970c Yes /lib/libgthread-2.0.so.0.2800.8
:0x4788d880 0x4789139c Yes /lib/librt-2.14.so
:0x478c1770 0x4795f3dc Yes /lib/libglib-2.0.so.0.2800.8
:0x478225f0 0x4782dd3c Yes /lib/libpthread-2.14.so
:0x476a7d10 0x477c5b84 Yes /lib/libc-2.14.so
:0x47898670 0x478a5aac Yes /lib/libz.so.1.2.5
:0x47670850 0x47687aff Yes /lib/ld-2.14.so
:0x4783aa60 0x4783ba8c Yes /lib/libdl-2.14.so
:0x479ed5f0 0x479fd64c Yes /lib/libresolv-2.14.so
:0x479ce490 0x479dfd9c Yes /lib/libselinux.so.1
:0x004ef490 0x0050b18c Yes /usr/lib/gio/modules/libgvfsdbus.so
:0x47a14c60 0x47a2047c Yes /usr/lib/libgvfscommon.so.0.0.0
:0x47bd3040 0x47becc7c Yes /lib/libexpat.so.1.5.2
:0x47e576a0 0x47e86cfc Yes (*) /lib/libdbus-1.so.3
:0x487b03b0 0x487b9acc Yes (*) /lib/libudev.so.0
:0x4a5d5a20 0x4a5d642c Yes /lib/libutil-2.14.so
:0x4786ef30 0x47885c5c Yes /lib/libgcc_s-4.6.0-20110530.so.1
:0x00b2aa40 0x00b31f3c Yes /lib/libnss_files-2.14.so
:0x00427790 0x00427d6c Yes /usr/lib/imsettings/libimsettings-qt.so
:0x00882670 0x008829ac Yes
/usr/lib/imsettings/libimsettings-gsettings.so
:0x0032cdc0 0x00330a8c Yes /usr/lib/gio/modules/libdconfsettings.so
:(*): Shared library is missing debugging information.
:$1 = 0x0
:$2 = 0x0
:eax 0x0 0
:ecx 0x478193e8 1199674344
:edx 0xffffffff -1
:ebx 0x479c7328 1201435432
:esp 0xbf9dc8e0 0xbf9dc8e0
:ebp 0xb6e01260 0xb6e01260
:esi 0x81e20c0 136192192
:edi 0x1 1
:eip 0x47935209 0x47935209 <g_variant_type_info_unref+217>
:eflags 0x10202 [ IF RF ]
:cs 0x73 115
:ss 0x7b 123
:ds 0x7b 123
:es 0x7b 123
:fs 0x0 0
:gs 0x33 51
:Dump of assembler code for function g_variant_type_info_unref:
: 0x47935130 <+0>: lea -0x2c(%esp),%esp
: 0x47935134 <+4>: xor %edx,%edx
: 0x47935136 <+6>: mov %ebx,0x20(%esp)
: 0x4793513a <+10>: mov %esi,0x24(%esp)
: 0x4793513e <+14>: call 0x478c1ff9 <__i686.get_pc_thunk.bx>
: 0x47935143 <+19>: add $0x921e5,%ebx
: 0x47935149 <+25>: mov 0x30(%esp),%esi
: 0x4793514d <+29>: mov %edi,0x28(%esp)
: 0x47935151 <+33>: mov %esi,%eax
: 0x47935153 <+35>: call 0x47934830 <g_variant_type_info_check>
: 0x47935158 <+40>: cmpb $0x0,0x5(%esi)
: 0x4793515c <+44>: jne 0x47935170 <g_variant_type_info_unref+64>
: 0x4793515e <+46>: mov 0x20(%esp),%ebx
: 0x47935162 <+50>: mov 0x24(%esp),%esi
: 0x47935166 <+54>: mov 0x28(%esp),%edi
: 0x4793516a <+58>: lea 0x2c(%esp),%esp
: 0x4793516e <+62>: ret
: 0x4793516f <+63>: nop
: 0x47935170 <+64>: lea 0x978(%ebx),%edi
: 0x47935176 <+70>: mov %edi,(%esp)
: 0x47935179 <+73>: call 0x47918920 <g_static_rec_mutex_lock>
: 0x4793517e <+78>: lea 0xc(%esi),%eax
: 0x47935181 <+81>: movl $0xffffffff,0x4(%esp)
: 0x47935189 <+89>: mov %eax,(%esp)
: 0x4793518c <+92>: call 0x478c4820 <g_atomic_int_exchange_and_add>
: 0x47935191 <+97>: cmp $0x1,%eax
: 0x47935194 <+100>: je 0x479351a8 <g_variant_type_info_unref+120>
: 0x47935196 <+102>: mov %edi,(%esp)
: 0x47935199 <+105>: call 0x47918bd0 <g_static_rec_mutex_unlock>
: 0x4793519e <+110>: xchg %ax,%ax
: 0x479351a0 <+112>: jmp 0x4793515e <g_variant_type_info_unref+46>
: 0x479351a2 <+114>: lea 0x0(%esi),%esi
: 0x479351a8 <+120>: mov 0x8(%esi),%eax
: 0x479351ab <+123>: mov %eax,0x4(%esp)
: 0x479351af <+127>: mov 0x9a0(%ebx),%eax
: 0x479351b5 <+133>: mov %eax,(%esp)
: 0x479351b8 <+136>: call 0x478df320 <g_hash_table_remove>
: 0x479351bd <+141>: mov 0x9a0(%ebx),%eax
: 0x479351c3 <+147>: mov %eax,(%esp)
: 0x479351c6 <+150>: call 0x478df790 <g_hash_table_size>
: 0x479351cb <+155>: test %eax,%eax
: 0x479351cd <+157>: je 0x47935248 <g_variant_type_info_unref+280>
: 0x479351cf <+159>: mov %edi,(%esp)
: 0x479351d2 <+162>: call 0x47918bd0 <g_static_rec_mutex_unlock>
: 0x479351d7 <+167>: mov 0x8(%esi),%eax
: 0x479351da <+170>: mov %eax,(%esp)
: 0x479351dd <+173>: call 0x478f7610 <g_free>
: 0x479351e2 <+178>: movzbl 0x5(%esi),%eax
: 0x479351e6 <+182>: cmp $0x61,%al
: 0x479351e8 <+184>: je 0x47935265 <g_variant_type_info_unref+309>
: 0x479351ea <+186>: cmp $0x72,%al
: 0x479351ec <+188>: jne 0x47935285 <g_variant_type_info_unref+341>
: 0x479351f2 <+194>: mov 0x14(%esi),%edx
: 0x479351f5 <+197>: test %edx,%edx
: 0x479351f7 <+199>: je 0x4793521c <g_variant_type_info_unref+236>
: 0x479351f9 <+201>: xor %eax,%eax
: 0x479351fb <+203>: xor %edi,%edi
: 0x479351fd <+205>: lea 0x0(%esi),%esi
: 0x47935200 <+208>: shl $0x4,%eax
: 0x47935203 <+211>: add 0x10(%esi),%eax
: 0x47935206 <+214>: add $0x1,%edi
:=> 0x47935209 <+217>: mov (%eax),%eax
: 0x4793520b <+219>: mov %eax,(%esp)
: 0x4793520e <+222>: call 0x47935130 <g_variant_type_info_unref>
: 0x47935213 <+227>: mov 0x14(%esi),%edx
: 0x47935216 <+230>: mov %edi,%eax
: 0x47935218 <+232>: cmp %edx,%edi
: 0x4793521a <+234>: jb 0x47935200 <g_variant_type_info_unref+208>
: 0x4793521c <+236>: mov 0x10(%esi),%eax
: 0x4793521f <+239>: shl $0x4,%edx
: 0x47935222 <+242>: mov %eax,0x4(%esp)
: 0x47935226 <+246>: mov %edx,(%esp)
: 0x47935229 <+249>: call 0x4790dd30 <g_slice_free1>
: 0x4793522e <+254>: mov %esi,0x4(%esp)
: 0x47935232 <+258>: movl $0x18,(%esp)
: 0x47935239 <+265>: call 0x4790dd30 <g_slice_free1>
: 0x4793523e <+270>: jmp 0x4793515e <g_variant_type_info_unref+46>
: 0x47935243 <+275>: nop
: 0x47935244 <+276>: lea 0x0(%esi,%eiz,1),%esi
: 0x47935248 <+280>: mov 0x9a0(%ebx),%eax
: 0x4793524e <+286>: mov %eax,(%esp)
: 0x47935251 <+289>: call 0x478defe0 <g_hash_table_unref>
: 0x47935256 <+294>: movl $0x0,0x9a0(%ebx)
: 0x47935260 <+304>: jmp 0x479351cf <g_variant_type_info_unref+159>
: 0x47935265 <+309>: mov 0x10(%esi),%eax
: 0x47935268 <+312>: mov %eax,(%esp)
: 0x4793526b <+315>: call 0x47935130 <g_variant_type_info_unref>
: 0x47935270 <+320>: mov %esi,0x4(%esp)
: 0x47935274 <+324>: movl $0x14,(%esp)
: 0x4793527b <+331>: call 0x4790dd30 <g_slice_free1>
: 0x47935280 <+336>: jmp 0x4793515e <g_variant_type_info_unref+46>
: 0x47935285 <+341>: lea -0x20357(%ebx),%eax
: 0x4793528b <+347>: movl $0x0,0x10(%esp)
: 0x47935293 <+355>: mov %eax,0xc(%esp)
: 0x47935297 <+359>: movl $0x35a,0x8(%esp)
: 0x4793529f <+367>: lea -0x20618(%ebx),%eax
: 0x479352a5 <+373>: mov %eax,0x4(%esp)
: 0x479352a9 <+377>: lea -0x67f22(%ebx),%eax
: 0x479352af <+383>: mov %eax,(%esp)
: 0x479352b2 <+386>: call 0x47916540 <g_assertion_message>
:End of assembler dump.
build_ids:
:b8fc2aeaf3bce479350d4de85ec95d74134e7d5b
:914fd2466e1b2d836dbac2060eb5c6e6d1d77a7a
:10951571c8257004a4cdac2f102244215c63f724
:62520e3bf1b3629e9c995d9d67fed0c0c3dbbac5
:4a540e52a34ab8f065a7a507cdb096dc67acd5e7
:5169d0935b091a52a2479c1802664e69a98a0c7b
:47446a76cfc27f95befeb786e73facea72ae230a
:c833d1602084a2aefe852c6c9838a2beea3d2280
:28b8cc9cda751c67558ec59cc16019154ebf56ae
:826bb4d8376c62b913b61301b276adab50e11c5a
:ecd018f1db18560dab61289dac1c59fe608a4e09
:177452c458dbd4322d2fb524e0ede4fec9020580
:07fd351eaaba30fe082a836e29c03d5f11f45edd
:3dc6434da358998cc0bc04aa2f33babaeac6952c
:7cde8206ad97ddf378cc9e6843180535983b0efc
:2ca8544b0ff9269420c23a0ac22da52b7894148b
:6c62db659622616558823abb1c12f7c216fed997
:469a6d4a8287d37f2af53649eebc4244aabb547d
:e8f81aceb76fd850fb4f8d2dbc01e7a2adb92a3f
:4709482862f00637bedaf5eeda381d3c6ecf2996
:c46d3faa40190dfaf7bc73895f6ab6497be94cae
:34d715e2766f8694271730798a4b8e1605ec93ea
:d8902318e03685352246e563d070f6ca1c13bb14
:f5972ca949be5ea714d53769e532478f9d1b6f56
:e20241fcb0aadb243e777cd42cc5fe9d0f780174
:6fa6d3b5e7e182f4d32420e825d4fc4b7d9016d6
:1e774a4966c5e13ed89f9458fbdac798b3cfc0d5
:9befa83e0979d5be03e71fa994b88292e8cf5343
:d92505dc952684ed3f59942efcff925f1e738748
:3315c5df9ef78b4836cffd5bc39f02777547176c
:37b6ae12c782e78ad8450b2cc126c822a538f9df
dso_list:
:/usr/lib/gconv/gconv-modules.cache glibc-2.14-4.i686 (Fedora Project)
1309882607
:/lib/libm-2.14.so glibc-2.14-4.i686 (Fedora Project) 1309882607
:/usr/lib/gio/modules/libgvfsdbus.so gvfs-1.8.2-1.fc15.i686 (Fedora Project)
1308282944
:/lib/libnss_files-2.14.so glibc-2.14-4.i686 (Fedora Project) 1309882607
:/lib/libgthread-2.0.so.0.2800.8 glib2-2.28.8-1.fc15.i686 (Fedora Project)
1308281136
:/lib/libutil-2.14.so glibc-2.14-4.i686 (Fedora Project) 1309882607
:/lib/libdbus-1.so.3.5.4 dbus-libs-1:1.4.6-4.fc15.i686 (Fedora Project)
1308281091
:/usr/lib/imsettings/libimsettings-gsettings.so
imsettings-gnome-1.2.3-1.fc15.i686 (Fedora Project) 1308283591
:/usr/lib/libimsettings.so.5.1.0 imsettings-libs-1.2.3-1.fc15.i686 (Fedora
Project) 1308281293
:/usr/lib/imsettings/libimsettings-qt.so imsettings-qt-1.2.3-1.fc15.i686
(Fedora Project) 1308284346
:/lib/libpthread-2.14.so glibc-2.14-4.i686 (Fedora Project) 1309882607
:/lib/ld-2.14.so glibc-2.14-4.i686 (Fedora Project) 1309882607
:/usr/lib/libpng12.so.0.44.0 libpng-2:1.2.44-3.fc15.i686 (Fedora Project)
1308281089
:/lib/libselinux.so.1 libselinux-2.0.99-4.fc15.i686 (Fedora Project) 1308281134
:/lib/libgmodule-2.0.so.0.2800.8 glib2-2.28.8-1.fc15.i686 (Fedora Project)
1308281136
:/lib/libz.so.1.2.5 zlib-1.2.5-3.fc15.i686 (Fedora Project) 1308281088
:/lib/libudev.so.0.11.1 libudev-167-4.fc15.i686 (Fedora Project) 1308281111
:/lib/libgobject-2.0.so.0.2800.8 glib2-2.28.8-1.fc15.i686 (Fedora Project)
1308281136
:/lib/libgcc_s-4.6.0-20110530.so.1 libgcc-4.6.0-9.fc15.i686 (Fedora Project)
1308281064
:/usr/lib/libgvfscommon.so.0.0.0 gvfs-1.8.2-1.fc15.i686 (Fedora Project)
1308282944
:/lib/libc-2.14.so glibc-2.14-4.i686 (Fedora Project) 1309882607
:/lib/libgio-2.0.so.0.2800.8 glib2-2.28.8-1.fc15.i686 (Fedora Project)
1308281136
:/lib/libresolv-2.14.so glibc-2.14-4.i686 (Fedora Project) 1309882607
:/lib/libexpat.so.1.5.2 expat-2.0.1-11.fc15.i686 (Fedora Project) 1308281098
:/usr/lib/gio/modules/libdconfsettings.so dconf-0.7.5-1.i686 (Fedora Project)
1308282044
:/lib/librt-2.14.so glibc-2.14-4.i686 (Fedora Project) 1309882607
:/lib/libglib-2.0.so.0.2800.8 glib2-2.28.8-1.fc15.i686 (Fedora Project)
1308281136
:/usr/libexec/imsettings-daemon imsettings-1.2.3-1.fc15.i686 (Fedora Project)
1308283592
:/lib/libdl-2.14.so glibc-2.14-4.i686 (Fedora Project) 1309882607
:/usr/lib/libgdk_pixbuf-2.0.so.0.2300.3 gdk-pixbuf2-2.23.3-2.fc15.i686 (Fedora
Project) 1309157164
:/usr/lib/libnotify.so.4.0.0 libnotify-0.7.3-1.fc15.i686 (Fedora Project)
1308282897
environ:
:SHELL=/bin/bash
:DBUS_STARTER_ADDRESS=unix:abstract=/tmp/dbus-VX3mjdlfET,guid=79b56b49cd7b566d5eb3b76a00000022
:XDG_SESSION_COOKIE=366f4879f6c1c8187e77e4f400000012-1310465848.311148-1983316215
:XDG_RUNTIME_DIR=/run/user/kasia
:DISPLAY=:0
:DESKTOP_SESSION=gnome
:WINDOWPATH=1
:PATH=/usr/local/bin:/usr/bin:/bin
:USERNAME=kasia
:GDMSESSION=gnome
:XDG_SESSION_ID=1
:DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-VX3mjdlfET,guid=79b56b49cd7b566d5eb3b76a00000022
:XAUTHORITY=/var/run/gdm/auth-for-kasia-ZrwKbI/database
:USER=kasia
:DBUS_STARTER_BUS_TYPE=session
:PWD=/home/kasia
:GDM_LANG=pl_PL.utf8
:SHLVL=1
:LANG=pl_PL.utf8
:_=/usr/bin/dbus-launch
:LOGNAME=kasia
:HOME=/home/kasia
maps:
:0028f000-00290000 r-xp 00000000 00:00 0 [vdso]
:0032b000-00332000 r-xp 00000000 fd:00 1894115
/usr/lib/gio/modules/libdconfsettings.so
:00332000-00333000 rw-p 00007000 fd:00 1894115
/usr/lib/gio/modules/libdconfsettings.so
:00427000-00429000 r-xp 00000000 fd:00 2135981
/usr/lib/imsettings/libimsettings-qt.so
:00429000-0042a000 rw-p 00001000 fd:00 2135981
/usr/lib/imsettings/libimsettings-qt.so
:004e9000-00513000 r-xp 00000000 fd:00 1875519
/usr/lib/gio/modules/libgvfsdbus.so
:00513000-00514000 rw-p 0002a000 fd:00 1875519
/usr/lib/gio/modules/libgvfsdbus.so
:00882000-00883000 r-xp 00000000 fd:00 2139288
/usr/lib/imsettings/libimsettings-gsettings.so
:00883000-00884000 rw-p 00000000 fd:00 2139288
/usr/lib/imsettings/libimsettings-gsettings.so
:00b29000-00b34000 r-xp 00000000 fd:00 2368802 /lib/libnss_files-2.14.so
:00b34000-00b35000 r--p 0000a000 fd:00 2368802 /lib/libnss_files-2.14.so
:00b35000-00b36000 rw-p 0000b000 fd:00 2368802 /lib/libnss_files-2.14.so
:08048000-08053000 r-xp 00000000 fd:00 1857902
/usr/libexec/imsettings-daemon
:08053000-08055000 rw-p 0000b000 fd:00 1857902
/usr/libexec/imsettings-daemon
:081c6000-0820a000 rw-p 00000000 00:00 0 [heap]
:47670000-4768d000 r-xp 00000000 fd:00 2359448 /lib/ld-2.14.so
:4768d000-4768e000 r--p 0001d000 fd:00 2359448 /lib/ld-2.14.so
:4768e000-4768f000 rw-p 0001e000 fd:00 2359448 /lib/ld-2.14.so
:47691000-47816000 r-xp 00000000 fd:00 2368958 /lib/libc-2.14.so
:47816000-47818000 r--p 00184000 fd:00 2368958 /lib/libc-2.14.so
:47818000-47819000 rw-p 00186000 fd:00 2368958 /lib/libc-2.14.so
:47819000-4781c000 rw-p 00000000 00:00 0
:4781e000-47834000 r-xp 00000000 fd:00 2368959 /lib/libpthread-2.14.so
:47834000-47835000 r--p 00015000 fd:00 2368959 /lib/libpthread-2.14.so
:47835000-47836000 rw-p 00016000 fd:00 2368959 /lib/libpthread-2.14.so
:47836000-47838000 rw-p 00000000 00:00 0
:4783a000-4783d000 r-xp 00000000 fd:00 2368962 /lib/libdl-2.14.so
:4783d000-4783e000 r--p 00002000 fd:00 2368962 /lib/libdl-2.14.so
:4783e000-4783f000 rw-p 00003000 fd:00 2368962 /lib/libdl-2.14.so
:47841000-47869000 r-xp 00000000 fd:00 2371460 /lib/libm-2.14.so
:47869000-4786a000 r--p 00028000 fd:00 2371460 /lib/libm-2.14.so
:4786a000-4786b000 rw-p 00029000 fd:00 2371460 /lib/libm-2.14.so
:4786d000-47889000 r-xp 00000000 fd:00 2371462
/lib/libgcc_s-4.6.0-20110530.so.1
:47889000-4788a000 rw-p 0001b000 fd:00 2371462
/lib/libgcc_s-4.6.0-20110530.so.1
:4788c000-47893000 r-xp 00000000 fd:00 2368961 /lib/librt-2.14.so
:47893000-47894000 r--p 00006000 fd:00 2368961 /lib/librt-2.14.so
:47894000-47895000 rw-p 00007000 fd:00 2368961 /lib/librt-2.14.so
:47897000-478ac000 r-xp 00000000 fd:00 2371464 /lib/libz.so.1.2.5
:478ac000-478ad000 rw-p 00014000 fd:00 2371464 /lib/libz.so.1.2.5
:478af000-479c7000 r-xp 00000000 fd:00 2371482 /lib/libglib-2.0.so.0.2800.8
:479c7000-479c8000 rw-p 00118000 fd:00 2371482 /lib/libglib-2.0.so.0.2800.8
:479ca000-479e7000 r-xp 00000000 fd:00 2371459 /lib/libselinux.so.1
:479e7000-479e8000 r--p 0001c000 fd:00 2371459 /lib/libselinux.so.1
:479e8000-479e9000 rw-p 0001d000 fd:00 2371459 /lib/libselinux.so.1
:479eb000-47a01000 r-xp 00000000 fd:00 2371466 /lib/libresolv-2.14.so
:47a01000-47a02000 r--p 00016000 fd:00 2371466 /lib/libresolv-2.14.so
:47a02000-47a03000 rw-p 00017000 fd:00 2371466 /lib/libresolv-2.14.so
:47a03000-47a05000 rw-p 00000000 00:00 0
:47a0e000-47a24000 r-xp 00000000 fd:00 1857796
/usr/lib/libgvfscommon.so.0.0.0
:47a24000-47a25000 rw-p 00016000 fd:00 1857796
/usr/lib/libgvfscommon.so.0.0.0
:47b67000-47b6b000 r-xp 00000000 fd:00 2371483
/lib/libgthread-2.0.so.0.2800.8
:47b6b000-47b6c000 rw-p 00003000 fd:00 2371483
/lib/libgthread-2.0.so.0.2800.8
:47b81000-47bcd000 r-xp 00000000 fd:00 2371484
/lib/libgobject-2.0.so.0.2800.8
:47bcd000-47bcf000 rw-p 0004b000 fd:00 2371484
/lib/libgobject-2.0.so.0.2800.8
:47bd1000-47bf7000 r-xp 00000000 fd:00 2371465 /lib/libexpat.so.1.5.2
:47bf7000-47bf9000 rw-p 00026000 fd:00 2371465 /lib/libexpat.so.1.5.2
:47c02000-47c2a000 r-xp 00000000 fd:00 1864834 /usr/lib/libpng12.so.0.44.0
:47c2a000-47c2b000 rw-p 00027000 fd:00 1864834 /usr/lib/libpng12.so.0.44.0
:47c2d000-47c37000 r-xp 00000000 fd:00 1865404
/usr/lib/libimsettings.so.5.1.0
:47c37000-47c38000 rw-p 00009000 fd:00 1865404
/usr/lib/libimsettings.so.5.1.0
:47e53000-47e9a000 r-xp 00000000 fd:00 2371479 /lib/libdbus-1.so.3.5.4
:47e9a000-47e9b000 r--p 00047000 fd:00 2371479 /lib/libdbus-1.so.3.5.4
:47e9b000-47e9c000 rw-p 00048000 fd:00 2371479 /lib/libdbus-1.so.3.5.4
:47e9e000-47ea1000 r-xp 00000000 fd:00 2371485
/lib/libgmodule-2.0.so.0.2800.8
:47ea1000-47ea2000 rw-p 00002000 fd:00 2371485
/lib/libgmodule-2.0.so.0.2800.8
:47ea4000-47fce000 r-xp 00000000 fd:00 2371486 /lib/libgio-2.0.so.0.2800.8
:47fce000-47fd1000 rw-p 00129000 fd:00 2371486 /lib/libgio-2.0.so.0.2800.8
:47fd1000-47fd2000 rw-p 00000000 00:00 0
:4847d000-4849f000 r-xp 00000000 fd:00 1881641
/usr/lib/libgdk_pixbuf-2.0.so.0.2300.3
:4849f000-484a0000 rw-p 00021000 fd:00 1881641
/usr/lib/libgdk_pixbuf-2.0.so.0.2300.3
:48753000-48759000 r-xp 00000000 fd:00 1881741 /usr/lib/libnotify.so.4.0.0
:48759000-4875a000 rw-p 00005000 fd:00 1881741 /usr/lib/libnotify.so.4.0.0
:487ae000-487bd000 r-xp 00000000 fd:00 2371488 /lib/libudev.so.0.11.1
:487bd000-487be000 r--p 0000e000 fd:00 2371488 /lib/libudev.so.0.11.1
:487be000-487bf000 rw-p 0000f000 fd:00 2371488 /lib/libudev.so.0.11.1
:4a5d5000-4a5d7000 r-xp 00000000 fd:00 2371467 /lib/libutil-2.14.so
:4a5d7000-4a5d8000 r--p 00001000 fd:00 2371467 /lib/libutil-2.14.so
:4a5d8000-4a5d9000 rw-p 00002000 fd:00 2371467 /lib/libutil-2.14.so
:b6400000-b6421000 rw-p 00000000 00:00 0
:b6421000-b6500000 ---p 00000000 00:00 0
:b65df000-b65e0000 ---p 00000000 00:00 0
:b65e0000-b6de0000 rw-p 00000000 00:00 0
:b6de0000-b6de2000 r--p 00000000 fd:02 11536695
/home/kasia/.config/dconf/user
:b6de2000-b6de3000 r--s 00000000 fd:02 11536823 /home/kasia/.cache/dconf/user
:b6de3000-b6e00000 r--p 00000000 fd:00 2113827
/usr/share/glib-2.0/schemas/gschemas.compiled
:b6e00000-b6e21000 rw-p 00000000 00:00 0
:b6e21000-b6f00000 ---p 00000000 00:00 0
:b6f01000-b6f02000 rw-p 00000000 00:00 0
:b6f02000-b6f03000 ---p 00000000 00:00 0
:b6f03000-b7708000 rw-p 00000000 00:00 0
:b7708000-b7729000 r--s 00000000 fd:00 1848596 /usr/share/mime/mime.cache
:b7729000-b772a000 r--s 00000000 fd:02 11535055
/home/kasia/.local/share/mime/mime.cache
:b772a000-b7731000 r--s 00000000 fd:00 1853669
/usr/lib/gconv/gconv-modules.cache
:b7731000-b7732000 rw-p 00000000 00:00 0
:bf9bd000-bf9de000 rw-p 00000000 00:00 0 [stack]
--
Configure bugmail: https://bugzilla.redhat.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
12 years, 8 months