[Fedora-i18n-bugs] [ibus-m17n] Revive iok patch.
by Daiki Ueno
commit 74c5abeda032a692588cf41d53cbae408f48c989
Author: Daiki Ueno <ueno(a)unixuser.org>
Date: Fri Sep 2 12:02:57 2011 +0900
Revive iok patch.
ibus-m17n-default-xml-override.patch | 2 +-
ibus-m17n-iok.patch | 102 ++++
ibus-m17n-setup-refactor.patch | 843 ++++++++++++++++++++++++++++++++++
ibus-m17n-virtkbd.patch | 294 ++++++++++--
ibus-m17n-xkb-options.patch | 2 +-
ibus-m17n-xx-icon-symbol.patch | 6 +-
ibus-m17n.spec | 23 +-
7 files changed, 1212 insertions(+), 60 deletions(-)
---
diff --git a/ibus-m17n-default-xml-override.patch b/ibus-m17n-default-xml-override.patch
index 39d7935..21f2be2 100644
--- a/ibus-m17n-default-xml-override.patch
+++ b/ibus-m17n-default-xml-override.patch
@@ -1,7 +1,7 @@
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/5] Update the format of default.xml to allow override.
+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:
diff --git a/ibus-m17n-iok.patch b/ibus-m17n-iok.patch
new file mode 100644
index 0000000..b885aae
--- /dev/null
+++ b/ibus-m17n-iok.patch
@@ -0,0 +1,102 @@
+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 */
+ IBusProperty *virtkbd_prop;
++ IBusProperty *show_iok_prop;
+ IBusPropList *prop_list;
+ };
+
+@@ -40,6 +41,7 @@ struct _IBusM17NEngineClass {
+ gint lookup_table_orientation;
+ gchar *virtual_keyboard;
+ gboolean virtual_keyboard_enabled;
++ gboolean use_iok;
+
+ MInputMethod *im;
+ };
+@@ -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);
++ /* whether to use iok - maybe good to move this to default.xml */
++ klass->use_iok = g_strcmp0 (name, "inscript") == 0 ||
++ g_strcmp0 (name, "inscript2") == 0;
+ g_free (lang);
+ g_free (name);
+
+@@ -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",
++ PROP_TYPE_NORMAL,
++ label,
++ "/usr/share/pixmaps/iok.xpm",
++ label,
++ TRUE,
++ FALSE,
++ 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 && !klass->virtual_keyboard_enabled)
++ ibus_property_set_visible (m17n->show_iok_prop, TRUE);
++
+ m17n->table = ibus_lookup_table_new (9, 0, TRUE, TRUE);
+ g_object_ref_sink (m17n->table);
+ m17n->context = NULL;
+@@ -502,6 +523,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine *m17n)
+ m17n->virtkbd_prop = NULL;
+ }
+
++ if (m17n->show_iok_prop) {
++ g_object_unref (m17n->show_iok_prop);
++ m17n->show_iok_prop = NULL;
++ }
++
+ if (m17n->table) {
+ g_object_unref (m17n->table);
+ m17n->table = NULL;
+@@ -842,6 +868,24 @@ ibus_m17n_engine_property_activate (IBusEngine *engine,
+ }
+ #endif /* HAVE_EEKBOARD */
+
++ if (g_strcmp0 (prop_name, "iok") == 0) {
++ const gchar *engine_name;
++ gchar *lang = NULL, *name = NULL;
++
++ engine_name = ibus_engine_get_name ((IBusEngine *) m17n);
++ if (ibus_m17n_scan_engine_name (engine_name, &lang, &name)) {
++ gchar *iok;
++
++ iok = g_strdup_printf ("/usr/bin/iok -n %s", lang);
++ g_debug ("keymap name = %s,prop_name=%s, prop_state=%d",
++ engine_name, prop_name, prop_state);
++ g_spawn_command_line_async(iok, NULL);
++ g_free (iok);
++ }
++ g_free (lang);
++ g_free (name);
++ }
++
+ 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
index f26c9de..ad70c1c 100644
--- a/ibus-m17n-virtkbd.patch
+++ b/ibus-m17n-virtkbd.patch
@@ -1,18 +1,20 @@
-From 1bde900422ed9ed7f06962404d5e689b297ad0b2 Mon Sep 17 00:00:00 2001
+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/5] Support virtual keyboard.
+Subject: [PATCH 5/6] Support virtual keyboard.
---
- configure.ac | 17 ++++
- src/Makefile.am | 7 ++
- src/default.xml.in.in | 111 +++++++++++++++++++++++
- src/engine.c | 40 +++++++++
- src/m17nutil.c | 10 ++-
- src/m17nutil.h | 3 +
- src/virtkbd.c | 233 +++++++++++++++++++++++++++++++++++++++++++++++++
- src/virtkbd.h | 31 +++++++
- 8 files changed, 451 insertions(+), 1 deletions(-)
+ 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
@@ -195,7 +197,7 @@ index 8192878..47053ae 100644
+ </engine>
</engines>
diff --git a/src/engine.c b/src/engine.c
-index dcff0c7..c8378a3 100644
+index dcff0c7..1e6bd1b 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -7,6 +7,7 @@
@@ -220,24 +222,39 @@ index dcff0c7..c8378a3 100644
IBusPropList *prop_list;
};
-@@ -34,6 +38,7 @@ struct _IBusM17NEngineClass {
+@@ -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;
};
-@@ -290,6 +295,8 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
+@@ -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 +353,7 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
+@@ -346,6 +361,7 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
{
IBusText* label;
IBusText* tooltip;
@@ -245,39 +262,44 @@ index dcff0c7..c8378a3 100644
m17n->prop_list = ibus_prop_list_new ();
g_object_ref_sink (m17n->prop_list);
-@@ -378,6 +386,22 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
+@@ -378,6 +394,24 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
ibus_prop_list_append (m17n->prop_list, m17n->setup_prop);
#endif /* HAVE_SETUP */
-+ if (klass->virtual_keyboard != NULL) {
-+ 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,
-+ TRUE,
-+ PROP_STATE_UNCHECKED,
-+ NULL);
-+ g_object_ref_sink (m17n->virtkbd_prop);
-+ ibus_prop_list_append (m17n->prop_list, m17n->virtkbd_prop);
-+ }
++ 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;
-@@ -439,6 +463,8 @@ ibus_m17n_engine_constructor (GType type,
+@@ -463,6 +497,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine *m17n)
}
+ #endif /* HAVE_SETUP */
- m17n->context = minput_create_ic (klass->im, m17n);
-+ m17n->virtkbd = ibus_m17n_virtual_keyboard_new ((IBusEngine *)m17n,
-+ klass->virtual_keyboard);
-
- return (GObject *) m17n;
- }
-@@ -473,6 +499,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine *m17n)
++ 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;
}
@@ -289,38 +311,85 @@ index dcff0c7..c8378a3 100644
IBUS_OBJECT_CLASS (parent_class)->destroy ((IBusObject *)m17n);
}
-@@ -705,6 +736,8 @@ ibus_m17n_engine_enable (IBusEngine *engine)
+@@ -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 */
+
-+ ibus_m17n_virtual_keyboard_enable (m17n->virtkbd);
++ if (m17n->virtkbd)
++ ibus_m17n_virtual_keyboard_enable (m17n->virtkbd);
}
static void
-@@ -714,6 +747,8 @@ ibus_m17n_engine_disable (IBusEngine *engine)
+@@ -714,6 +761,9 @@ ibus_m17n_engine_disable (IBusEngine *engine)
ibus_m17n_engine_focus_out (engine);
parent_class->disable (engine);
+
-+ ibus_m17n_virtual_keyboard_disable (m17n->virtkbd);
++ if (m17n->virtkbd)
++ ibus_m17n_virtual_keyboard_disable (m17n->virtkbd);
}
static void
-@@ -776,6 +811,11 @@ ibus_m17n_engine_property_activate (IBusEngine *engine,
+@@ -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)
++ 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..a4e4b09 100644
+index 94a6891..2143e54 100644
--- a/src/m17nutil.c
+++ b/src/m17nutil.c
@@ -18,7 +18,8 @@ typedef enum {
@@ -354,8 +423,61 @@ index 94a6891..a4e4b09 100644
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..f138c8b 100644
+index 21b1bb9..9c3fca8 100644
--- a/src/m17nutil.h
+++ b/src/m17nutil.h
@@ -25,6 +25,9 @@ struct _IBusM17NEngineConfig {
@@ -368,6 +490,84 @@ index 21b1bb9..f138c8b 100644
};
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
diff --git a/ibus-m17n-xkb-options.patch b/ibus-m17n-xkb-options.patch
index 49d29e6..ab09cf0 100644
--- a/ibus-m17n-xkb-options.patch
+++ b/ibus-m17n-xkb-options.patch
@@ -1,7 +1,7 @@
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/5] Set XKB layout option via default.xml.
+Subject: [PATCH 3/6] Set XKB layout option via default.xml.
---
src/default.xml.in.in | 9 +++++++++
diff --git a/ibus-m17n-xx-icon-symbol.patch b/ibus-m17n-xx-icon-symbol.patch
index 31757ae..42e70fd 100644
--- a/ibus-m17n-xx-icon-symbol.patch
+++ b/ibus-m17n-xx-icon-symbol.patch
@@ -1,7 +1,7 @@
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/5] Supply hotkeys and symbol in engine desc.
+Subject: [PATCH 4/6] Supply hotkeys and symbol in engine desc.
---
configure.ac | 3 +
@@ -29,8 +29,8 @@ index 927d382..23102c4 100644
AC_CONFIG_FILES([ po/Makefile.in
diff --git a/m4/.gitignore b/m4/.gitignore
index 0f4126c..e28d185 100644
---- a/m4/.gitignore
-+++ b/m4/.gitignore
+#--- a/m4/.gitignore
+#+++ b/m4/.gitignore
@@ -1 +1,3 @@
*.m4
+!ibus.m4
diff --git a/ibus-m17n.spec b/ibus-m17n.spec
index d94def8..92f0516 100644
--- a/ibus-m17n.spec
+++ b/ibus-m17n.spec
@@ -17,7 +17,7 @@
Name: ibus-m17n
Version: 1.3.3
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: The M17N engine for IBus platform
License: GPLv2+
Group: System Environment/Libraries
@@ -26,9 +26,11 @@ Source0: http://ibus.googlecode.com/files/%{name}-%{version}.tar.gz
#Patch0: ibus-m17n-HEAD.patch
Patch1: ibus-m17n-default-xml-override.patch
-Patch2: ibus-m17n-xkb-options.patch
-Patch3: ibus-m17n-xx-icon-symbol.patch
-Patch4: ibus-m17n-virtkbd.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.
@@ -58,11 +60,13 @@ the input table maps from m17n-db.
%setup -q
#patch0 -p1 -b .HEAD
%patch1 -p1 -b .default-xml-override
-%patch2 -p1 -b .xkb-options
+%patch2 -p1 -b .setup-refactor
+%patch3 -p1 -b .xkb-options
# do not apply patch to m4/.gitignore
-sed -i 's!^[-+][-+][-+] .*/m4/\.gitignore!#\0!' %PATCH3
-%patch3 -p1 -b .xx-icon-symbol
-%patch4 -p1 -b .virtkbd
+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
@@ -84,6 +88,9 @@ make DESTDIR=${RPM_BUILD_ROOT} install
%{_datadir}/ibus/component/*
%changelog
+* 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.
12 years, 8 months
[Fedora-i18n-bugs] [ibus-m17n] Fix typo.
by Daiki Ueno
commit 52a761fa0973da9e1062ade71b53d3c5afc6ca0b
Author: Daiki Ueno <ueno(a)unixuser.org>
Date: Fri Sep 2 10:34:15 2011 +0900
Fix typo.
ibus-m17n.spec | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
---
diff --git a/ibus-m17n.spec b/ibus-m17n.spec
index ba40500..d94def8 100644
--- a/ibus-m17n.spec
+++ b/ibus-m17n.spec
@@ -12,7 +12,7 @@
%endif
%if (0%{?fedora} > 16)
-%global _enable_eekboard --enable_eekboard
+%global _enable_eekboard --enable-eekboard
%endif
Name: ibus-m17n
12 years, 8 months
[Fedora-i18n-bugs] [ibus-m17n] Rebase patches against ibus-m17n-1.3.3.
by Daiki Ueno
commit 71416071c5d2dbf397d1f01e1501dcea55ccd11c
Author: Daiki Ueno <ueno(a)unixuser.org>
Date: Fri Sep 2 10:25:37 2011 +0900
Rebase patches against ibus-m17n-1.3.3.
ibus-m17n-default-xml-override.patch | 20 +++++-----
ibus-m17n-virtkbd.patch | 66 ++++++++++++++++------------------
ibus-m17n-xkb-options.patch | 12 +++---
ibus-m17n-xx-icon-symbol.patch | 22 ++++++++----
ibus-m17n.spec | 2 +
5 files changed, 64 insertions(+), 58 deletions(-)
---
diff --git a/ibus-m17n-default-xml-override.patch b/ibus-m17n-default-xml-override.patch
index 744e6a4..39d7935 100644
--- a/ibus-m17n-default-xml-override.patch
+++ b/ibus-m17n-default-xml-override.patch
@@ -1,4 +1,4 @@
-From 736e3f89d3afe368bec030b1f01d36b417fcac5c Mon Sep 17 00:00:00 2001
+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/5] Update the format of default.xml to allow override.
@@ -389,7 +389,7 @@ index 5c5d67d..dc93fd3 100644
- </engine>
</engines>
diff --git a/src/engine.c b/src/engine.c
-index b68b13e..f1e3068 100644
+index cfb853c..dcff0c7 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -290,6 +290,8 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
@@ -402,10 +402,10 @@ index b68b13e..f1e3068 100644
G_CALLBACK(ibus_m17n_config_value_changed),
klass);
diff --git a/src/m17nutil.c b/src/m17nutil.c
-index 1150cc4..00b7194 100644
+index 42aa8f6..b06f71d 100644
--- a/src/m17nutil.c
+++ b/src/m17nutil.c
-@@ -9,12 +9,18 @@ static MConverter *utf8_converter = NULL;
+@@ -13,12 +13,18 @@ static MConverter *utf8_converter = NULL;
#define DEFAULT_XML (SETUPDIR "/default.xml")
@@ -426,7 +426,7 @@ index 1150cc4..00b7194 100644
static GSList *config_list = NULL;
-@@ -253,20 +259,31 @@ ibus_m17n_list_engines (void)
+@@ -257,20 +263,31 @@ ibus_m17n_list_engines (void)
IBusM17NEngineConfig *
ibus_m17n_get_engine_config (const gchar *engine_name)
{
@@ -464,7 +464,7 @@ index 1150cc4..00b7194 100644
{
GList *p;
-@@ -280,6 +297,7 @@ ibus_m17n_engine_config_parse_xml_node (IBusM17NEngineConfigNode *cnode,
+@@ -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);
@@ -472,7 +472,7 @@ index 1150cc4..00b7194 100644
continue;
}
if (g_strcmp0 (sub_node->name , "preedit-highlight") == 0) {
-@@ -288,6 +306,7 @@ ibus_m17n_engine_config_parse_xml_node (IBusM17NEngineConfigNode *cnode,
+@@ -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);
@@ -480,7 +480,7 @@ index 1150cc4..00b7194 100644
continue;
}
g_warning ("<engine> element contains invalid element <%s>",
-@@ -316,7 +335,7 @@ ibus_m17n_get_component (void)
+@@ -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;
@@ -489,7 +489,7 @@ index 1150cc4..00b7194 100644
if (g_strcmp0 (sub_node->name, "engine") != 0) {
g_warning ("<engines> element contains invalid element <%s>",
-@@ -324,9 +343,9 @@ ibus_m17n_get_component (void)
+@@ -328,9 +347,9 @@ ibus_m17n_get_component (void)
continue;
}
@@ -501,7 +501,7 @@ index 1150cc4..00b7194 100644
continue;
}
config_list = g_slist_prepend (config_list, cnode);
-@@ -444,30 +463,3 @@ ibus_m17n_config_get_int (IBusConfig *config,
+@@ -448,30 +467,3 @@ ibus_m17n_config_get_int (IBusConfig *config,
return FALSE;
#endif /* !IBUS_CHECK_VERSION(1,3,99) */
}
diff --git a/ibus-m17n-virtkbd.patch b/ibus-m17n-virtkbd.patch
index 32c9830..f26c9de 100644
--- a/ibus-m17n-virtkbd.patch
+++ b/ibus-m17n-virtkbd.patch
@@ -1,4 +1,4 @@
-From 03557655071092e8135a6fc5c5f8cc2b2f692a83 Mon Sep 17 00:00:00 2001
+From 1bde900422ed9ed7f06962404d5e689b297ad0b2 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/5] Support virtual keyboard.
@@ -6,18 +6,18 @@ Subject: [PATCH 5/5] Support virtual keyboard.
---
configure.ac | 17 ++++
src/Makefile.am | 7 ++
- src/default.xml.in.in | 111 ++++++++++++++++++++++++
- src/engine.c | 44 ++++++++++
+ src/default.xml.in.in | 111 +++++++++++++++++++++++
+ src/engine.c | 40 +++++++++
src/m17nutil.c | 10 ++-
src/m17nutil.h | 3 +
- src/virtkbd.c | 226 +++++++++++++++++++++++++++++++++++++++++++++++++
+ src/virtkbd.c | 233 +++++++++++++++++++++++++++++++++++++++++++++++++
src/virtkbd.h | 31 +++++++
- 8 files changed, 448 insertions(+), 1 deletions(-)
+ 8 files changed, 451 insertions(+), 1 deletions(-)
create mode 100644 src/virtkbd.c
create mode 100644 src/virtkbd.h
diff --git a/configure.ac b/configure.ac
-index 089aafb..ea1476c 100644
+index 23102c4..13e42f8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -88,6 +88,23 @@ fi
@@ -195,7 +195,7 @@ index 8192878..47053ae 100644
+ </engine>
</engines>
diff --git a/src/engine.c b/src/engine.c
-index f1e3068..cad01e5 100644
+index dcff0c7..c8378a3 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -7,6 +7,7 @@
@@ -228,18 +228,7 @@ index f1e3068..cad01e5 100644
MInputMethod *im;
};
-@@ -110,6 +115,10 @@ ibus_m17n_init (IBusBus *bus)
- if (config)
- g_object_ref_sink (config);
- ibus_m17n_init_common ();
-+
-+#ifdef HAVE_EEKBOARD
-+ eek_init ();
-+#endif /* HAVE_EEKBOARD */
- }
-
- static gboolean
-@@ -290,6 +299,8 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
+@@ -290,6 +295,8 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
&klass->lookup_table_orientation))
klass->lookup_table_orientation = IBUS_ORIENTATION_SYSTEM;
@@ -248,7 +237,7 @@ index f1e3068..cad01e5 100644
ibus_m17n_engine_config_free (engine_config);
g_signal_connect (config, "value-changed",
-@@ -346,6 +357,7 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
+@@ -346,6 +353,7 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
{
IBusText* label;
IBusText* tooltip;
@@ -256,7 +245,7 @@ index f1e3068..cad01e5 100644
m17n->prop_list = ibus_prop_list_new ();
g_object_ref_sink (m17n->prop_list);
-@@ -378,6 +390,22 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
+@@ -378,6 +386,22 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
ibus_prop_list_append (m17n->prop_list, m17n->setup_prop);
#endif /* HAVE_SETUP */
@@ -279,7 +268,7 @@ index f1e3068..cad01e5 100644
m17n->table = ibus_lookup_table_new (9, 0, TRUE, TRUE);
g_object_ref_sink (m17n->table);
m17n->context = NULL;
-@@ -439,6 +467,8 @@ ibus_m17n_engine_constructor (GType type,
+@@ -439,6 +463,8 @@ ibus_m17n_engine_constructor (GType type,
}
m17n->context = minput_create_ic (klass->im, m17n);
@@ -288,7 +277,7 @@ index f1e3068..cad01e5 100644
return (GObject *) m17n;
}
-@@ -473,6 +503,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine *m17n)
+@@ -473,6 +499,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine *m17n)
m17n->context = NULL;
}
@@ -300,16 +289,16 @@ index f1e3068..cad01e5 100644
IBUS_OBJECT_CLASS (parent_class)->destroy ((IBusObject *)m17n);
}
-@@ -709,6 +744,8 @@ ibus_m17n_engine_enable (IBusEngine *engine)
- ibus_engine_get_surrounding_text (engine, &text, &cursor_pos);
- g_object_unref (text);
+@@ -705,6 +736,8 @@ 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 */
+
+ ibus_m17n_virtual_keyboard_enable (m17n->virtkbd);
}
static void
-@@ -718,6 +755,8 @@ ibus_m17n_engine_disable (IBusEngine *engine)
+@@ -714,6 +747,8 @@ ibus_m17n_engine_disable (IBusEngine *engine)
ibus_m17n_engine_focus_out (engine);
parent_class->disable (engine);
@@ -318,7 +307,7 @@ index f1e3068..cad01e5 100644
}
static void
-@@ -780,6 +819,11 @@ ibus_m17n_engine_property_activate (IBusEngine *engine,
+@@ -776,6 +811,11 @@ ibus_m17n_engine_property_activate (IBusEngine *engine,
}
#endif /* HAVE_SETUP */
@@ -331,10 +320,10 @@ index f1e3068..cad01e5 100644
}
diff --git a/src/m17nutil.c b/src/m17nutil.c
-index 3e6b9f1..bf8bf84 100644
+index 94a6891..a4e4b09 100644
--- a/src/m17nutil.c
+++ b/src/m17nutil.c
-@@ -14,7 +14,8 @@ typedef enum {
+@@ -18,7 +18,8 @@ typedef enum {
ENGINE_CONFIG_LAYOUT_MASK = 1 << 1,
ENGINE_CONFIG_HOTKEYS_MASK = 1 << 2,
ENGINE_CONFIG_SYMBOL_MASK = 1 << 3,
@@ -344,7 +333,7 @@ index 3e6b9f1..bf8bf84 100644
} EngineConfigMask;
struct _EngineConfigNode {
-@@ -281,6 +282,8 @@ ibus_m17n_get_engine_config (const gchar *engine_name)
+@@ -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;
@@ -353,7 +342,7 @@ index 3e6b9f1..bf8bf84 100644
}
}
return config;
-@@ -336,6 +339,11 @@ ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
+@@ -340,6 +343,11 @@ ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
cnode->mask |= ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK;
continue;
}
@@ -381,10 +370,10 @@ index 21b1bb9..f138c8b 100644
typedef struct _IBusM17NEngineConfig IBusM17NEngineConfig;
diff --git a/src/virtkbd.c b/src/virtkbd.c
new file mode 100644
-index 0000000..92ae3a5
+index 0000000..9baf971
--- /dev/null
+++ b/src/virtkbd.c
-@@ -0,0 +1,226 @@
+@@ -0,0 +1,233 @@
+/* vim:set et sts=4: */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
@@ -414,7 +403,14 @@ index 0000000..92ae3a5
+
+typedef struct _IBusM17NVirtualKeyboardClass IBusM17NVirtualKeyboardClass;
+
-+G_DEFINE_TYPE (IBusM17NVirtualKeyboard, ibus_m17n_virtual_keyboard, G_TYPE_OBJECT);
++#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)
diff --git a/ibus-m17n-xkb-options.patch b/ibus-m17n-xkb-options.patch
index 2dc5c13..49d29e6 100644
--- a/ibus-m17n-xkb-options.patch
+++ b/ibus-m17n-xkb-options.patch
@@ -1,4 +1,4 @@
-From 98be0a7b90cd47cafabb715695d20b9bfc7dd1bb Mon Sep 17 00:00:00 2001
+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/5] Set XKB layout option via default.xml.
@@ -30,10 +30,10 @@ index dc93fd3..785ab05 100644
<engine>
<name>m17n:zh:cangjie</name>
diff --git a/src/m17nutil.c b/src/m17nutil.c
-index 00b7194..06e1b58 100644
+index b06f71d..201c8b4 100644
--- a/src/m17nutil.c
+++ b/src/m17nutil.c
-@@ -11,7 +11,8 @@ static MConverter *utf8_converter = NULL;
+@@ -15,7 +15,8 @@ static MConverter *utf8_converter = NULL;
typedef enum {
ENGINE_CONFIG_RANK_MASK = 1 << 0,
@@ -43,7 +43,7 @@ index 00b7194..06e1b58 100644
} EngineConfigMask;
struct _EngineConfigNode {
-@@ -126,7 +127,7 @@ ibus_m17n_engine_new (MSymbol lang,
+@@ -130,7 +131,7 @@ ibus_m17n_engine_new (MSymbol lang,
"language", msymbol_name (lang),
"license", "GPL",
"icon", engine_icon ? engine_icon : "",
@@ -52,7 +52,7 @@ index 00b7194..06e1b58 100644
"rank", config->rank,
NULL);
#else
-@@ -268,6 +269,8 @@ ibus_m17n_get_engine_config (const gchar *engine_name)
+@@ -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;
@@ -61,7 +61,7 @@ index 00b7194..06e1b58 100644
if (cnode->mask & ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK)
config->preedit_highlight = cnode->config.preedit_highlight;
}
-@@ -300,6 +303,12 @@ ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
+@@ -304,6 +307,12 @@ ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
cnode->mask |= ENGINE_CONFIG_RANK_MASK;
continue;
}
diff --git a/ibus-m17n-xx-icon-symbol.patch b/ibus-m17n-xx-icon-symbol.patch
index 2948e56..31757ae 100644
--- a/ibus-m17n-xx-icon-symbol.patch
+++ b/ibus-m17n-xx-icon-symbol.patch
@@ -1,4 +1,4 @@
-From 7a3f7a425977c685ad64a4ec44682926ef345ea1 Mon Sep 17 00:00:00 2001
+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/5] Supply hotkeys and symbol in engine desc.
@@ -14,7 +14,7 @@ Subject: [PATCH 4/5] Supply hotkeys and symbol in engine desc.
create mode 100644 m4/ibus.m4
diff --git a/configure.ac b/configure.ac
-index 4df68b6..089aafb 100644
+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
@@ -27,6 +27,14 @@ index 4df68b6..089aafb 100644
# OUTPUT files
AC_CONFIG_FILES([ po/Makefile.in
+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
@@ -309,10 +317,10 @@ index 785ab05..8192878 100644
+ </engine>
</engines>
diff --git a/src/m17nutil.c b/src/m17nutil.c
-index 06e1b58..3e6b9f1 100644
+index 201c8b4..94a6891 100644
--- a/src/m17nutil.c
+++ b/src/m17nutil.c
-@@ -12,7 +12,9 @@ static MConverter *utf8_converter = NULL;
+@@ -16,7 +16,9 @@ static MConverter *utf8_converter = NULL;
typedef enum {
ENGINE_CONFIG_RANK_MASK = 1 << 0,
ENGINE_CONFIG_LAYOUT_MASK = 1 << 1,
@@ -323,7 +331,7 @@ index 06e1b58..3e6b9f1 100644
} EngineConfigMask;
struct _EngineConfigNode {
-@@ -129,6 +131,8 @@ ibus_m17n_engine_new (MSymbol lang,
+@@ -133,6 +135,8 @@ ibus_m17n_engine_new (MSymbol lang,
"icon", engine_icon ? engine_icon : "",
"layout", config->layout ? config->layout : "us",
"rank", config->rank,
@@ -332,7 +340,7 @@ index 06e1b58..3e6b9f1 100644
NULL);
#else
engine = ibus_engine_desc_new (engine_name,
-@@ -271,6 +275,10 @@ ibus_m17n_get_engine_config (const gchar *engine_name)
+@@ -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;
@@ -343,7 +351,7 @@ index 06e1b58..3e6b9f1 100644
if (cnode->mask & ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK)
config->preedit_highlight = cnode->config.preedit_highlight;
}
-@@ -309,6 +317,16 @@ ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
+@@ -313,6 +321,16 @@ ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
cnode->mask |= ENGINE_CONFIG_LAYOUT_MASK;
continue;
}
diff --git a/ibus-m17n.spec b/ibus-m17n.spec
index 6888d4b..ba40500 100644
--- a/ibus-m17n.spec
+++ b/ibus-m17n.spec
@@ -59,6 +59,8 @@ the input table maps from m17n-db.
#patch0 -p1 -b .HEAD
%patch1 -p1 -b .default-xml-override
%patch2 -p1 -b .xkb-options
+# do not apply patch to m4/.gitignore
+sed -i 's!^[-+][-+][-+] .*/m4/\.gitignore!#\0!' %PATCH3
%patch3 -p1 -b .xx-icon-symbol
%patch4 -p1 -b .virtkbd
NOCONFIGURE=1 ./autogen.sh
12 years, 8 months
[Fedora-i18n-bugs] [Bug 734628] Some cities and countries are missing in PO file
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.
https://bugzilla.redhat.com/show_bug.cgi?id=734628
--- Comment #3 from Nils Philippsen <nphilipp(a)redhat.com> 2011-09-01 11:55:09 EDT ---
(In reply to comment #0)
> Description of problem:
> In time zone configuration;
> 'Ulaanbaatar' appears under Asia section, but no such string in PO file.
> There is no country 'Japan' under Asia, but 'Tokyo (translated in 東京)' exists
> directly under Asia.
I've checked things more thoroughly now and found that Ulaanbaatar is indeed
translated in the Japanese PO file:
nils@f16:~> msgunfmt /usr/share/locale/ja/LC_MESSAGES/system-config-date.mo |
grep -A1 Ulaanbaatar
msgid "Asia/Ulaanbaatar"
msgstr "アジア/ウランバートル"
Then, "Japan" isn't supposed to be under "Asia", the scheme is either
<continent>/<city> or <continent>/<region>/<city> (though the latter is only
used in America for Argentina, Indiana, Kentucky and North Dakota). So
"Asia/Tokyo" is quite correct.
I'll leave this bug open to track progress the few new time zones that came
about between the migration to transifex.net and now.
--
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] Fix the last commit.
by Daiki Ueno
commit bd7cc73712f08d4a4b341c51234c2c228e936784
Author: Daiki Ueno <ueno(a)unixuser.org>
Date: Thu Sep 1 19:45:49 2011 +0900
Fix the last commit.
ibus-m17n-HEAD.patch | 281 ----------------------------------------
ibus-m17n-xx-icon-symbol.patch | 8 -
2 files changed, 0 insertions(+), 289 deletions(-)
---
diff --git a/ibus-m17n-xx-icon-symbol.patch b/ibus-m17n-xx-icon-symbol.patch
index 37553c7..2948e56 100644
--- a/ibus-m17n-xx-icon-symbol.patch
+++ b/ibus-m17n-xx-icon-symbol.patch
@@ -27,14 +27,6 @@ index 4df68b6..089aafb 100644
# OUTPUT files
AC_CONFIG_FILES([ po/Makefile.in
-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
12 years, 8 months
[Fedora-i18n-bugs] [ibus-m17n] Remove ibus-m17n-HEAD.patch.
by Daiki Ueno
commit e1a8f5680b80a34c190b5e41906316a5efe46248
Author: Daiki Ueno <ueno(a)unixuser.org>
Date: Thu Sep 1 19:36:52 2011 +0900
Remove ibus-m17n-HEAD.patch.
ibus-m17n.spec | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
---
diff --git a/ibus-m17n.spec b/ibus-m17n.spec
index 11229ef..6888d4b 100644
--- a/ibus-m17n.spec
+++ b/ibus-m17n.spec
@@ -24,7 +24,7 @@ Group: System Environment/Libraries
URL: http://code.google.com/p/ibus/
Source0: http://ibus.googlecode.com/files/%{name}-%{version}.tar.gz
-Patch0: ibus-m17n-HEAD.patch
+#Patch0: ibus-m17n-HEAD.patch
Patch1: ibus-m17n-default-xml-override.patch
Patch2: ibus-m17n-xkb-options.patch
Patch3: ibus-m17n-xx-icon-symbol.patch
@@ -56,7 +56,7 @@ the input table maps from m17n-db.
%prep
%setup -q
-%patch0 -p1 -b .HEAD
+#patch0 -p1 -b .HEAD
%patch1 -p1 -b .default-xml-override
%patch2 -p1 -b .xkb-options
%patch3 -p1 -b .xx-icon-symbol
12 years, 8 months
[Fedora-i18n-bugs] [ibus-m17n] Update to 1.3.3-1.
by Daiki Ueno
commit 5dc11ac5c3902a60b00752d0492db1fcfe787e56
Author: Daiki Ueno <ueno(a)unixuser.org>
Date: Thu Sep 1 19:28:55 2011 +0900
Update to 1.3.3-1.
.gitignore | 1 +
ibus-m17n.spec | 7 ++++---
sources | 2 +-
3 files changed, 6 insertions(+), 4 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.spec b/ibus-m17n.spec
index 184e159..11229ef 100644
--- a/ibus-m17n.spec
+++ b/ibus-m17n.spec
@@ -16,8 +16,8 @@
%endif
Name: ibus-m17n
-Version: 1.3.2
-Release: 11%{?dist}
+Version: 1.3.3
+Release: 1%{?dist}
Summary: The M17N engine for IBus platform
License: GPLv2+
Group: System Environment/Libraries
@@ -82,7 +82,8 @@ make DESTDIR=${RPM_BUILD_ROOT} install
%{_datadir}/ibus/component/*
%changelog
-* Thu Sep 1 2011 Daiki Ueno <dueno(a)redhat.com> - 1.3.2-11
+* 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.
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] [eekboard/f16] Update to 1.0.3-1.
by Daiki Ueno
commit 2ca82a13de8ce296ac9d9eb16b5a7faaef9b07ea
Author: Daiki Ueno <ueno(a)unixuser.org>
Date: Thu Sep 1 19:20:19 2011 +0900
Update to 1.0.3-1.
.gitignore | 1 +
eekboard-python-binding-fix.patch | 39 -------------------------------------
eekboard.spec | 9 ++++---
sources | 2 +-
4 files changed, 7 insertions(+), 44 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 28d7e9f..f8483b8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@ eekboard-0.0.5.tar.gz
/eekboard-1.0.0.tar.gz
/eekboard-1.0.1.tar.gz
/eekboard-1.0.2.tar.gz
+/eekboard-1.0.3.tar.gz
diff --git a/eekboard.spec b/eekboard.spec
index cf7b5cd..8c676ee 100644
--- a/eekboard.spec
+++ b/eekboard.spec
@@ -1,13 +1,12 @@
Name: eekboard
-Version: 1.0.2
-Release: 3%{?dist}
+Version: 1.0.3
+Release: 1%{?dist}
Summary: An Easy-to-use Virtual Keyboard Toolkit
Group: Applications/System
License: GPLv3+
URL: http://fedorahosted.org/eekboard/
Source0: http://github.com/downloads/ueno/eekboard/eekboard-%{version}.tar.gz
-Patch0: eekboard-python-binding-fix.patch
BuildRequires: libfakekey-devel
# older libfakekey-devel has missing BR: libXtst-devel (#680878)
BuildRequires: libXtst-devel
@@ -65,7 +64,6 @@ This package contains the Python language binding of eekboard client library.
%prep
%setup -q
-%patch0 -p1 -b .python-binding-fix
%build
@@ -148,6 +146,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%changelog
+* Thu Sep 1 2011 Daiki Ueno <dueno(a)redhat.com> - 1.0.3-1
+- new upstream release
+
* Fri Aug 26 2011 Daiki Ueno <dueno(a)redhat.com> - 1.0.2-3
- install eekboard-autostart.desktop under %%doc/examples instead of
the autostart dir to avoid conflict with other at-spi based OSK
diff --git a/sources b/sources
index 13b9b82..5eab388 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-a6a9d08f478e0cea99e51c8c899bf25c eekboard-1.0.2.tar.gz
+313cf7f1ae633656503b9f86c2f7a431 eekboard-1.0.3.tar.gz
12 years, 8 months
[Fedora-i18n-bugs] [ibus-m17n] Update to 1.3.2-11.
by Daiki Ueno
commit 01b9e72fe7a2e31eb42a9169ae4414ac2c8d9ff0
Author: Daiki Ueno <ueno(a)unixuser.org>
Date: Thu Sep 1 19:18:22 2011 +0900
Update to 1.3.2-11.
ibus-m17n-default-xml-override.patch | 621 ++++++++++++++++++++++++++++++++
ibus-m17n-iok.patch | 100 ------
ibus-m17n-virtkbd.patch | 653 ++++++++++++++++++++++++++++++++++
ibus-m17n-xkb-options.patch | 186 ++++-------
ibus-m17n-xx-icon-symbol.patch | 495 +++++++-------------------
ibus-m17n.spec | 21 +-
6 files changed, 1484 insertions(+), 592 deletions(-)
---
diff --git a/ibus-m17n-default-xml-override.patch b/ibus-m17n-default-xml-override.patch
new file mode 100644
index 0000000..744e6a4
--- /dev/null
+++ b/ibus-m17n-default-xml-override.patch
@@ -0,0 +1,621 @@
+From 736e3f89d3afe368bec030b1f01d36b417fcac5c 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/5] 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 b68b13e..f1e3068 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 1150cc4..00b7194 100644
+--- a/src/m17nutil.c
++++ b/src/m17nutil.c
+@@ -9,12 +9,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;
+
+@@ -253,20 +259,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;
+
+@@ -280,6 +297,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) {
+@@ -288,6 +306,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>",
+@@ -316,7 +335,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>",
+@@ -324,9 +343,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);
+@@ -444,30 +463,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-virtkbd.patch b/ibus-m17n-virtkbd.patch
new file mode 100644
index 0000000..32c9830
--- /dev/null
+++ b/ibus-m17n-virtkbd.patch
@@ -0,0 +1,653 @@
+From 03557655071092e8135a6fc5c5f8cc2b2f692a83 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/5] Support virtual keyboard.
+
+---
+ configure.ac | 17 ++++
+ src/Makefile.am | 7 ++
+ src/default.xml.in.in | 111 ++++++++++++++++++++++++
+ src/engine.c | 44 ++++++++++
+ src/m17nutil.c | 10 ++-
+ src/m17nutil.h | 3 +
+ src/virtkbd.c | 226 +++++++++++++++++++++++++++++++++++++++++++++++++
+ src/virtkbd.h | 31 +++++++
+ 8 files changed, 448 insertions(+), 1 deletions(-)
+ create mode 100644 src/virtkbd.c
+ create mode 100644 src/virtkbd.h
+
+diff --git a/configure.ac b/configure.ac
+index 089aafb..ea1476c 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 f1e3068..cad01e5 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,7 @@ struct _IBusM17NEngineClass {
+ guint preedit_background;
+ gint preedit_underline;
+ gint lookup_table_orientation;
++ gchar *virtual_keyboard;
+
+ MInputMethod *im;
+ };
+@@ -110,6 +115,10 @@ ibus_m17n_init (IBusBus *bus)
+ if (config)
+ g_object_ref_sink (config);
+ ibus_m17n_init_common ();
++
++#ifdef HAVE_EEKBOARD
++ eek_init ();
++#endif /* HAVE_EEKBOARD */
+ }
+
+ static gboolean
+@@ -290,6 +299,8 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
+ &klass->lookup_table_orientation))
+ klass->lookup_table_orientation = IBUS_ORIENTATION_SYSTEM;
+
++ klass->virtual_keyboard = engine_config->virtual_keyboard;
++
+ ibus_m17n_engine_config_free (engine_config);
+
+ g_signal_connect (config, "value-changed",
+@@ -346,6 +357,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 +390,22 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
+ ibus_prop_list_append (m17n->prop_list, m17n->setup_prop);
+ #endif /* HAVE_SETUP */
+
++ if (klass->virtual_keyboard != NULL) {
++ 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,
++ TRUE,
++ PROP_STATE_UNCHECKED,
++ NULL);
++ g_object_ref_sink (m17n->virtkbd_prop);
++ ibus_prop_list_append (m17n->prop_list, m17n->virtkbd_prop);
++ }
++
+ m17n->table = ibus_lookup_table_new (9, 0, TRUE, TRUE);
+ g_object_ref_sink (m17n->table);
+ m17n->context = NULL;
+@@ -439,6 +467,8 @@ ibus_m17n_engine_constructor (GType type,
+ }
+
+ m17n->context = minput_create_ic (klass->im, m17n);
++ m17n->virtkbd = ibus_m17n_virtual_keyboard_new ((IBusEngine *)m17n,
++ klass->virtual_keyboard);
+
+ return (GObject *) m17n;
+ }
+@@ -473,6 +503,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);
+ }
+
+@@ -709,6 +744,8 @@ ibus_m17n_engine_enable (IBusEngine *engine)
+ ibus_engine_get_surrounding_text (engine, &text, &cursor_pos);
+ g_object_unref (text);
+ #endif /* HAVE_IBUS_ENGINE_GET_SURROUNDING_TEXT */
++
++ ibus_m17n_virtual_keyboard_enable (m17n->virtkbd);
+ }
+
+ static void
+@@ -718,6 +755,8 @@ ibus_m17n_engine_disable (IBusEngine *engine)
+
+ ibus_m17n_engine_focus_out (engine);
+ parent_class->disable (engine);
++
++ ibus_m17n_virtual_keyboard_disable (m17n->virtkbd);
+ }
+
+ static void
+@@ -780,6 +819,11 @@ ibus_m17n_engine_property_activate (IBusEngine *engine,
+ }
+ #endif /* HAVE_SETUP */
+
++#ifdef HAVE_EEKBOARD
++ if (g_strcmp0 (prop_name, "virtual-keyboard") == 0)
++ ibus_m17n_virtual_keyboard_toggle_display (m17n->virtkbd);
++#endif /* HAVE_EEKBOARD */
++
+ parent_class->property_activate (engine, prop_name, prop_state);
+ }
+
+diff --git a/src/m17nutil.c b/src/m17nutil.c
+index 3e6b9f1..bf8bf84 100644
+--- a/src/m17nutil.c
++++ b/src/m17nutil.c
+@@ -14,7 +14,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 {
+@@ -281,6 +282,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;
+@@ -336,6 +339,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);
+ }
+diff --git a/src/m17nutil.h b/src/m17nutil.h
+index 21b1bb9..f138c8b 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;
+diff --git a/src/virtkbd.c b/src/virtkbd.c
+new file mode 100644
+index 0000000..92ae3a5
+--- /dev/null
++++ b/src/virtkbd.c
+@@ -0,0 +1,226 @@
++/* 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;
++
++G_DEFINE_TYPE (IBusM17NVirtualKeyboard, ibus_m17n_virtual_keyboard, G_TYPE_OBJECT);
++
++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 6c3d8b9..2dc5c13 100644
--- a/ibus-m17n-xkb-options.patch
+++ b/ibus-m17n-xkb-options.patch
@@ -1,122 +1,49 @@
-Patch to set certain XKB options when an m17n IME is set.
-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>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
-- <name>m17n:gu:inscript</name>
-+ <name>m17n:gu:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
-- <name>m17n:hi:inscript</name>
-+ <name>m17n:hi:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <layout>default[lv3:ralt_switch]</layout>
- </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>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
-- <name>m17n:ml:inscript</name>
-+ <name>m17n:ml:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
-- <name>m17n:mr:inscript</name>
-+ <name>m17n:mr:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <layout>default[lv3:ralt_switch]</layout>
- </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>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
-- <name>m17n:pa:inscript</name>
-+ <name>m17n:pa:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <layout>default[lv3:ralt_switch]</layout>
- </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>
+From 98be0a7b90cd47cafabb715695d20b9bfc7dd1bb 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/5] 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:wijesekera</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:si:*</name>
+ <layout>default[lv3:ralt_switch]</layout>
- </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>
-+ <layout>default[lv3:ralt_switch]</layout>
- </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>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
- <name>m17n:ta:*</name>
-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
-@@ -120,7 +120,7 @@ ibus_m17n_engine_new (MSymbol lang,
++ </engine>
+ <!-- Some CJK engines use preedit. -->
+ <engine>
+ <name>m17n:zh:cangjie</name>
+diff --git a/src/m17nutil.c b/src/m17nutil.c
+index 00b7194..06e1b58 100644
+--- a/src/m17nutil.c
++++ b/src/m17nutil.c
+@@ -11,7 +11,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 {
+@@ -126,7 +127,7 @@ ibus_m17n_engine_new (MSymbol lang,
"language", msymbol_name (lang),
"license", "GPL",
"icon", engine_icon ? engine_icon : "",
@@ -125,22 +52,32 @@ Index: ibus-m17n-1.3.2/src/m17nutil.c
"rank", config->rank,
NULL);
#else
-@@ -282,6 +282,11 @@ ibus_m17n_engine_config_parse_xml_node (
- cnode->config.rank = atoi (sub_node->text);
+@@ -268,6 +269,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;
+ }
+@@ -300,6 +303,12 @@ ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
+ cnode->mask |= ENGINE_CONFIG_RANK_MASK;
continue;
}
+ 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;
+ }
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
+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;
@@ -151,3 +88,6 @@ 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-xx-icon-symbol.patch b/ibus-m17n-xx-icon-symbol.patch
index 1d13292..37553c7 100644
--- a/ibus-m17n-xx-icon-symbol.patch
+++ b/ibus-m17n-xx-icon-symbol.patch
@@ -1,23 +1,23 @@
-From 432d6f93be857d2544ad19ba67caea22d5843cc5 Mon Sep 17 00:00:00 2001
+From 7a3f7a425977c685ad64a4ec44682926ef345ea1 Mon Sep 17 00:00:00 2001
From: Daiki Ueno <ueno(a)unixuser.org>
-Date: Tue, 5 Jul 2011 16:26:49 +0900
-Subject: [PATCH] Supply hotkeys and symbol in engine desc.
+Date: Wed, 31 Aug 2011 11:44:46 +0900
+Subject: [PATCH 4/5] Supply hotkeys and symbol in engine desc.
---
configure.ac | 3 +
m4/.gitignore | 2 +
- m4/ibus.m4 | 52 +++++++++
- src/default.xml.in.in | 284 +++++++++++++++++++++++++++++++++++++++++--------
- src/m17nutil.c | 10 ++
- src/m17nutil.h | 6 +
- 6 files changed, 312 insertions(+), 45 deletions(-)
+ 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
-Index: ibus-m17n-1.3.2/configure.ac
-===================================================================
---- ibus-m17n-1.3.2.orig/configure.ac
-+++ ibus-m17n-1.3.2/configure.ac
-@@ -114,6 +114,9 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GET
+diff --git a/configure.ac b/configure.ac
+index 4df68b6..089aafb 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)
@@ -27,10 +27,19 @@ Index: ibus-m17n-1.3.2/configure.ac
# 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], [
@@ -84,503 +93,245 @@ 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
-@@ -10,97 +10,114 @@
- <name>m17n:as:phonetic</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol>ক</symbol>
- </engine>
- <engine>
- <name>m17n:bn:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>ক</symbol>
- </engine>
- <engine>
- <name>m17n:gu:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>ક</symbol>
- </engine>
- <engine>
- <name>m17n:hi:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:kn:kgp</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol>ಕ</symbol>
- </engine>
- <engine>
- <name>m17n:ks:kbd</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:mai:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:ml:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>ക</symbol>
- </engine>
- <engine>
- <name>m17n:mr:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:ne:rom</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol>ने</symbol>
- </engine>
- <engine>
- <name>m17n:or:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>କ</symbol>
- </engine>
- <engine>
- <name>m17n:pa:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>ਕ</symbol>
- </engine>
- <engine>
- <name>m17n:sa:harvard-kyoto</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:sd:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:si:wijesekera</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>සි</symbol>
- </engine>
- <engine>
- <name>m17n:ta:tamil99</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol>க</symbol>
- </engine>
- <engine>
- <name>m17n:te:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>క</symbol>
- </engine>
- <!-- Samanala should have lower rank than other Sinhala
- engines since it is the only non-keyboard input method in
-@@ -109,57 +126,14 @@
- <name>m17n:si:samanala</name>
+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>
++ <symbol></symbol>
++ @IBUS_HOTKEYS_XML@
</engine>
- <!-- Chinese and Japanese engines which require preedit decoration. -->
- <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>
- <rank>0</rank>
<preedit-highlight>TRUE</preedit-highlight>
-- </engine>
-- <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>
-- <preedit-highlight>TRUE</preedit-highlight>
-+ <symbol>あ</symbol>
</engine>
- <!-- Other Indic engines should be selected by default:
- https://bugzilla.redhat.com/show_bug.cgi?id=640896 -->
-@@ -167,92 +141,312 @@
- <name>m17n:as:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ <!-- Set IME symbols. -->
++ <engine>
++ <name>m17n:as:*</name>
+ <symbol>ক</symbol>
- </engine>
- <engine>
- <name>m17n:bn:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:bn:*</name>
+ <symbol>ক</symbol>
- </engine>
- <engine>
- <name>m17n:gu:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:gu:*</name>
+ <symbol>ક</symbol>
- </engine>
- <engine>
- <name>m17n:hi:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:hi:*</name>
+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:kn:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:kn:*</name>
+ <symbol>ಕ</symbol>
- </engine>
- <engine>
- <name>m17n:ks:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:ks:*</name>
+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:mai:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:mai:*</name>
+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:ml:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:ml:*</name>
+ <symbol>ക</symbol>
- </engine>
- <engine>
- <name>m17n:mr:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:mr:*</name>
+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:ne:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol></symbol>
- </engine>
- <engine>
- <name>m17n:or:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:ne:*</name>
++ <symbol>ने</symbol>
++ </engine>
++ <engine>
++ <name>m17n:or:*</name>
+ <symbol>କ</symbol>
- </engine>
- <engine>
- <name>m17n:pa:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:pa:*</name>
+ <symbol>ਕ</symbol>
- </engine>
- <engine>
- <name>m17n:sa:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:sa:*</name>
+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:sd:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:sd:*</name>
+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:si:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
++ </engine>
++ <engine>
++ <name>m17n:si:*</name>
+ <symbol>සි</symbol>
- </engine>
- <engine>
- <name>m17n:ta:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:ta:*</name>
+ <symbol>க</symbol>
- </engine>
- <engine>
- <name>m17n:te:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:te:*</name>
+ <symbol>క</symbol>
+ </engine>
-+ <!-- Tweak symbols: for most maps, their "title" properties
-+ fit in one character width. However, some of them are
-+ bit longer. -->
+ <engine>
+ <name>m17n:*:kbd</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:*:pre</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:*:post</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:am:sera</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>አ</symbol>
+ </engine>
+ <engine>
+ <name>m17n:bo:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>ཀ</symbol>
+ </engine>
+ <engine>
+ <name>m17n:cr:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:dv:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:eo:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:fa:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>ف</symbol>
+ </engine>
+ <engine>
+ <name>m17n:fr:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:ii:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:iu:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
++ <name>m17n:ja:anthy</name>
++ <symbol>あ</symbol>
++ </engine>
++ <engine>
+ <name>m17n:kk:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>قا</symbol>
+ </engine>
+ <engine>
+ <name>m17n:km:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>ក</symbol>
+ </engine>
+ <engine>
+ <name>m17n:lo:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>ກ</symbol>
+ </engine>
+ <engine>
+ <name>m17n:nsk:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:oj:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:ps:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:ru:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>Я</symbol>
+ </engine>
+ <engine>
+ <name>m17n:sv:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:syrc:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:tai:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>꫞</symbol>
+ </engine>
+ <engine>
+ <name>m17n:th:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>ท</symbol>
+ </engine>
+ <engine>
+ <name>m17n:ur:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>خ</symbol>
+ </engine>
+ <engine>
+ <name>m17n:vi:han</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>越</symbol>
+ </engine>
+ <engine>
+ <name>m17n:vi:nom*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>喃</symbol>
+ </engine>
+ <engine>
+ <name>m17n:vi:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>Ắ</symbol>
+ </engine>
+ <engine>
+ <name>m17n:yi:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>TRUE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:zh:bopomofo</name>
-+ <rank>0</rank>
-+ <preedit-highlight>TRUE</preedit-highlight>
+ <symbol>ㄅ</symbol>
+ </engine>
+ <engine>
+ <name>m17n:zh:cangjie</name>
-+ <rank>0</rank>
-+ <preedit-highlight>TRUE</preedit-highlight>
+ <symbol>倉</symbol>
+ </engine>
+ <engine>
+ <name>m17n:zh:py*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>TRUE</preedit-highlight>
+ <symbol>拼</symbol>
+ </engine>
+ <engine>
+ <name>m17n:zh:quick</name>
-+ <rank>0</rank>
-+ <preedit-highlight>TRUE</preedit-highlight>
+ <symbol>簡</symbol>
+ </engine>
+ <engine>
+ <name>m17n:zh:tonepy*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>TRUE</preedit-highlight>
+ <symbol>调</symbol>
- </engine>
- <!-- Default for other engines. -->
- <engine>
- <name>m17n:*</name>
- <rank>0</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol></symbol>
-+ @IBUS_HOTKEYS_XML@
- </engine>
++ </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 06e1b58..3e6b9f1 100644
+--- a/src/m17nutil.c
++++ b/src/m17nutil.c
+@@ -12,7 +12,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 {
+@@ -129,6 +131,8 @@ ibus_m17n_engine_new (MSymbol lang,
"icon", engine_icon ? engine_icon : "",
"layout", config->layout ? config->layout : "us",
"rank", config->rank,
@@ -589,25 +340,38 @@ Index: ibus-m17n-1.3.2/src/m17nutil.c
NULL);
#else
engine = ibus_engine_desc_new (engine_name,
-@@ -287,6 +289,14 @@ ibus_m17n_engine_config_parse_xml_node (
- cnode->config.layout = g_strdup (sub_node->text);
+@@ -271,6 +275,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;
+ }
+@@ -309,6 +317,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
+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;
@@ -621,3 +385,6 @@ 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 9f60a37..184e159 100644
--- a/ibus-m17n.spec
+++ b/ibus-m17n.spec
@@ -11,9 +11,13 @@
%global _with_hotkeys --with-hotkeys
%endif
+%if (0%{?fedora} > 16)
+%global _enable_eekboard --enable_eekboard
+%endif
+
Name: ibus-m17n
Version: 1.3.2
-Release: 10%{?dist}
+Release: 11%{?dist}
Summary: The M17N engine for IBus platform
License: GPLv2+
Group: System Environment/Libraries
@@ -21,9 +25,10 @@ URL: http://code.google.com/p/ibus/
Source0: http://ibus.googlecode.com/files/%{name}-%{version}.tar.gz
Patch0: ibus-m17n-HEAD.patch
-Patch1: ibus-m17n-iok.patch
+Patch1: ibus-m17n-default-xml-override.patch
Patch2: ibus-m17n-xkb-options.patch
Patch3: ibus-m17n-xx-icon-symbol.patch
+Patch4: ibus-m17n-virtkbd.patch
# The following BR is for autogen and not necessary when packging
# released tarballs.
@@ -39,10 +44,11 @@ BuildRequires: gtk2-devel
%endif
BuildRequires: libxklavier-devel
BuildRequires: ibus-devel >= %{require_ibus_version}
+BuildRequires: eekboard-devel
Requires: ibus >= %{require_ibus_version}
Requires: m17n-lib
-Requires: iok > 1.3.1
+Requires: eekboard
%description
M17N engine for IBus input platform. It allows input of many languages using
@@ -51,13 +57,14 @@ the input table maps from m17n-db.
%prep
%setup -q
%patch0 -p1 -b .HEAD
-%patch1 -p1 -b .iok
+%patch1 -p1 -b .default-xml-override
%patch2 -p1 -b .xkb-options
%patch3 -p1 -b .xx-icon-symbol
+%patch4 -p1 -b .virtkbd
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}
@@ -75,6 +82,10 @@ make DESTDIR=${RPM_BUILD_ROOT} install
%{_datadir}/ibus/component/*
%changelog
+* Thu Sep 1 2011 Daiki Ueno <dueno(a)redhat.com> - 1.3.2-11
+- 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.
12 years, 8 months