Added ibus-xx-icon-symbol.patch
- Added ibus-xx-bridge-hotkey.patch
This commit is contained in:
parent
7c25acb4a8
commit
63b857f037
2
.gitignore
vendored
2
.gitignore
vendored
@ -14,3 +14,5 @@ ibus-1.3.6.tar.gz
|
|||||||
/ibus_master_da.po
|
/ibus_master_da.po
|
||||||
/ibus-1.3.99.20110419.tar.gz
|
/ibus-1.3.99.20110419.tar.gz
|
||||||
/gnome-shell-ibus-plugins-20110601.tar.bz2
|
/gnome-shell-ibus-plugins-20110601.tar.bz2
|
||||||
|
/gnome-shell-ibus-plugins-20110621.tar.bz2
|
||||||
|
/ibus-indicator.tar.bz2
|
||||||
|
@ -1,375 +0,0 @@
|
|||||||
From c72e8177099fb9079e2f295c0bb2118b998cb0e8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Daiki Ueno <ueno@unixuser.org>
|
|
||||||
Date: Wed, 13 Apr 2011 16:26:54 +0900
|
|
||||||
Subject: [PATCH] Backport caps feature from the Fedora internal patch.
|
|
||||||
|
|
||||||
---
|
|
||||||
client/gtk2/ibusimcontext.c | 34 ++++++++++-
|
|
||||||
src/ibusenginedesc.c | 132 +++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
src/ibusenginedesc.h | 11 ++++
|
|
||||||
3 files changed, 173 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
|
|
||||||
index dc3640e..0ac1b70 100644
|
|
||||||
--- a/client/gtk2/ibusimcontext.c
|
|
||||||
+++ b/client/gtk2/ibusimcontext.c
|
|
||||||
@@ -61,6 +61,7 @@ struct _IBusIMContext {
|
|
||||||
gboolean has_focus;
|
|
||||||
|
|
||||||
guint32 time;
|
|
||||||
+ guint supported_caps;
|
|
||||||
gint caps;
|
|
||||||
|
|
||||||
/* cancellable */
|
|
||||||
@@ -150,6 +151,7 @@ static gboolean _slave_delete_surrounding_cb
|
|
||||||
static void _request_surrounding_text (IBusIMContext *context,
|
|
||||||
gboolean force);
|
|
||||||
static void _create_fake_input_context (void);
|
|
||||||
+static void _negotiate_capabilities (IBusIMContext *context);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -580,10 +582,11 @@ ibus_im_context_init (GObject *obj)
|
|
||||||
ibusimcontext->has_focus = FALSE;
|
|
||||||
ibusimcontext->time = GDK_CURRENT_TIME;
|
|
||||||
#ifdef ENABLE_SURROUNDING
|
|
||||||
- ibusimcontext->caps = IBUS_CAP_PREEDIT_TEXT | IBUS_CAP_FOCUS | IBUS_CAP_SURROUNDING_TEXT;
|
|
||||||
+ ibusimcontext->supported_caps = IBUS_CAP_PREEDIT_TEXT | IBUS_CAP_FOCUS | IBUS_CAP_SURROUNDING_TEXT;
|
|
||||||
#else
|
|
||||||
- ibusimcontext->caps = IBUS_CAP_PREEDIT_TEXT | IBUS_CAP_FOCUS;
|
|
||||||
+ ibusimcontext->supported_caps = IBUS_CAP_PREEDIT_TEXT | IBUS_CAP_FOCUS;
|
|
||||||
#endif
|
|
||||||
+ ibusimcontext->caps = ibusimcontext->supported_caps;
|
|
||||||
|
|
||||||
|
|
||||||
// Create slave im context
|
|
||||||
@@ -930,6 +933,27 @@ ibus_im_context_set_cursor_location (GtkIMContext *context, GdkRectangle *area)
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
+_negotiate_capabilities (IBusIMContext *context)
|
|
||||||
+{
|
|
||||||
+ if (context->enable) {
|
|
||||||
+ IBusEngineDesc *engine =
|
|
||||||
+ ibus_input_context_get_engine (context->ibuscontext);
|
|
||||||
+
|
|
||||||
+ if (engine) {
|
|
||||||
+ context->caps = context->supported_caps &
|
|
||||||
+ ibus_engine_desc_get_requires (engine);
|
|
||||||
+ ibus_input_context_set_capabilities (context->ibuscontext,
|
|
||||||
+ context->caps);
|
|
||||||
+ IDEBUG ("engine %s: supported caps = %u, engine wants = %u, caps = %u",
|
|
||||||
+ ibus_engine_desc_get_name (engine),
|
|
||||||
+ context->supported_caps,
|
|
||||||
+ ibus_engine_desc_get_requires (engine),
|
|
||||||
+ context->caps);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
ibus_im_context_set_use_preedit (GtkIMContext *context, gboolean use_preedit)
|
|
||||||
{
|
|
||||||
IDEBUG ("%s", __FUNCTION__);
|
|
||||||
@@ -938,11 +962,12 @@ ibus_im_context_set_use_preedit (GtkIMContext *context, gboolean use_preedit)
|
|
||||||
|
|
||||||
if(ibusimcontext->ibuscontext) {
|
|
||||||
if (use_preedit) {
|
|
||||||
- ibusimcontext->caps |= IBUS_CAP_PREEDIT_TEXT;
|
|
||||||
+ ibusimcontext->supported_caps |= IBUS_CAP_PREEDIT_TEXT;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
- ibusimcontext->caps &= ~IBUS_CAP_PREEDIT_TEXT;
|
|
||||||
+ ibusimcontext->supported_caps &= ~IBUS_CAP_PREEDIT_TEXT;
|
|
||||||
}
|
|
||||||
+ _negotiate_capabilities (ibusimcontext);
|
|
||||||
}
|
|
||||||
gtk_im_context_set_use_preedit (ibusimcontext->slave, use_preedit);
|
|
||||||
}
|
|
||||||
@@ -1320,6 +1345,7 @@ _ibus_context_enabled_cb (IBusInputContext *ibuscontext,
|
|
||||||
IDEBUG ("%s", __FUNCTION__);
|
|
||||||
|
|
||||||
ibusimcontext->enable = TRUE;
|
|
||||||
+ _negotiate_capabilities (ibusimcontext);
|
|
||||||
|
|
||||||
/* retrieve the initial surrounding-text (regardless of whether
|
|
||||||
* the current IBus engine needs surrounding-text) */
|
|
||||||
diff --git a/src/ibusenginedesc.c b/src/ibusenginedesc.c
|
|
||||||
index ca5ef60..956ce73 100644
|
|
||||||
--- a/src/ibusenginedesc.c
|
|
||||||
+++ b/src/ibusenginedesc.c
|
|
||||||
@@ -22,6 +22,7 @@
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "ibusenginedesc.h"
|
|
||||||
#include "ibusxml.h"
|
|
||||||
+#include "ibusenumtypes.h"
|
|
||||||
|
|
||||||
enum {
|
|
||||||
LAST_SIGNAL,
|
|
||||||
@@ -39,6 +40,7 @@ enum {
|
|
||||||
PROP_LAYOUT,
|
|
||||||
PROP_RANK,
|
|
||||||
PROP_HOTKEYS,
|
|
||||||
+ PROP_REQUIRES,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
@@ -54,6 +56,7 @@ struct _IBusEngineDescPrivate {
|
|
||||||
gchar *layout;
|
|
||||||
guint rank;
|
|
||||||
gchar *hotkeys;
|
|
||||||
+ guint requires;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define IBUS_ENGINE_DESC_GET_PRIVATE(o) \
|
|
||||||
@@ -79,9 +82,20 @@ static gboolean ibus_engine_desc_copy (IBusEngineDesc *des
|
|
||||||
const IBusEngineDesc *src);
|
|
||||||
static gboolean ibus_engine_desc_parse_xml_node (IBusEngineDesc *desc,
|
|
||||||
XMLNode *node);
|
|
||||||
+static void ibus_engine_desc_output_capabilities
|
|
||||||
+ (guint caps,
|
|
||||||
+ GString *output,
|
|
||||||
+ gint indent);
|
|
||||||
+static guint ibus_engine_desc_parse_capabilities
|
|
||||||
+ (XMLNode *node);
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (IBusEngineDesc, ibus_engine_desc, IBUS_TYPE_SERIALIZABLE)
|
|
||||||
|
|
||||||
+#define DEFAULT_REQUIRES (IBUS_CAP_PREEDIT_TEXT | \
|
|
||||||
+ IBUS_CAP_AUXILIARY_TEXT | \
|
|
||||||
+ IBUS_CAP_LOOKUP_TABLE | \
|
|
||||||
+ IBUS_CAP_FOCUS | \
|
|
||||||
+ IBUS_CAP_PROPERTY)
|
|
||||||
|
|
||||||
static void
|
|
||||||
ibus_engine_desc_class_init (IBusEngineDescClass *class)
|
|
||||||
@@ -232,6 +246,21 @@ ibus_engine_desc_class_init (IBusEngineDescClass *class)
|
|
||||||
"The hotkeys of engine description",
|
|
||||||
"",
|
|
||||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
|
||||||
+
|
|
||||||
+ /**
|
|
||||||
+ * IBusEngineDesc:requires:
|
|
||||||
+ *
|
|
||||||
+ * The required capabilities of engine description
|
|
||||||
+ */
|
|
||||||
+ g_object_class_install_property (gobject_class,
|
|
||||||
+ PROP_REQUIRES,
|
|
||||||
+ g_param_spec_uint ("requires",
|
|
||||||
+ "description requires",
|
|
||||||
+ "The required capabilities of engine description",
|
|
||||||
+ 0,
|
|
||||||
+ G_MAXUINT,
|
|
||||||
+ DEFAULT_REQUIRES,
|
|
||||||
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -249,6 +278,7 @@ ibus_engine_desc_init (IBusEngineDesc *desc)
|
|
||||||
desc->priv->layout = NULL;
|
|
||||||
desc->priv->rank = 0;
|
|
||||||
desc->priv->hotkeys = NULL;
|
|
||||||
+ desc->priv->requires = DEFAULT_REQUIRES;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -313,6 +343,9 @@ ibus_engine_desc_set_property (IBusEngineDesc *desc,
|
|
||||||
g_assert (desc->priv->hotkeys == NULL);
|
|
||||||
desc->priv->hotkeys = g_value_dup_string (value);
|
|
||||||
break;
|
|
||||||
+ case PROP_REQUIRES:
|
|
||||||
+ desc->priv->requires = g_value_get_uint (value);
|
|
||||||
+ break;
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (desc, prop_id, pspec);
|
|
||||||
}
|
|
||||||
@@ -355,6 +388,9 @@ ibus_engine_desc_get_property (IBusEngineDesc *desc,
|
|
||||||
case PROP_HOTKEYS:
|
|
||||||
g_value_set_string (value, ibus_engine_desc_get_hotkeys (desc));
|
|
||||||
break;
|
|
||||||
+ case PROP_REQUIRES:
|
|
||||||
+ g_value_set_uint (value, ibus_engine_desc_get_requires (desc));
|
|
||||||
+ break;
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (desc, prop_id, pspec);
|
|
||||||
}
|
|
||||||
@@ -382,9 +418,28 @@ ibus_engine_desc_serialize (IBusEngineDesc *desc,
|
|
||||||
g_variant_builder_add (builder, "u", desc->priv->rank);
|
|
||||||
g_variant_builder_add (builder, "s", NOTNULL (desc->priv->hotkeys));
|
|
||||||
#undef NOTNULL
|
|
||||||
+
|
|
||||||
+ /* append extra properties */
|
|
||||||
+ GVariantBuilder array;
|
|
||||||
+ g_variant_builder_init (&array, G_VARIANT_TYPE ("a{sv}"));
|
|
||||||
+ g_variant_builder_add (&array, "{sv}", "requires", g_variant_new_uint32 (desc->priv->requires));
|
|
||||||
+ g_variant_builder_add (builder, "v", g_variant_builder_end (&array));
|
|
||||||
+
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static gboolean
|
|
||||||
+ibus_engine_desc_deserialize_property (IBusEngineDesc *desc,
|
|
||||||
+ const gchar *name,
|
|
||||||
+ GVariant *variant)
|
|
||||||
+{
|
|
||||||
+ if (g_strcmp0 (name, "requires") == 0) {
|
|
||||||
+ g_variant_get (variant, "u", &desc->priv->requires);
|
|
||||||
+ return TRUE;
|
|
||||||
+ }
|
|
||||||
+ return FALSE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static gint
|
|
||||||
ibus_engine_desc_deserialize (IBusEngineDesc *desc,
|
|
||||||
GVariant *variant)
|
|
||||||
@@ -405,6 +460,23 @@ ibus_engine_desc_deserialize (IBusEngineDesc *desc,
|
|
||||||
g_variant_get_child (variant, retval++, "u", &desc->priv->rank);
|
|
||||||
g_variant_get_child (variant, retval++, "s", &desc->priv->hotkeys);
|
|
||||||
|
|
||||||
+ /* extract extra properties */
|
|
||||||
+ GVariantIter iter;
|
|
||||||
+ GVariant *child, *array;
|
|
||||||
+
|
|
||||||
+ g_variant_get_child (variant, retval++, "v", &array);
|
|
||||||
+ g_variant_iter_init (&iter, array);
|
|
||||||
+ while ((child = g_variant_iter_next_value (&iter))) {
|
|
||||||
+ gchar *name;
|
|
||||||
+ GVariant *value;
|
|
||||||
+ g_variant_get (child, "{sv}", &name, &value);
|
|
||||||
+ if (ibus_engine_desc_deserialize_property (desc, name, value))
|
|
||||||
+ retval++;
|
|
||||||
+ g_free (name);
|
|
||||||
+ g_variant_unref (value);
|
|
||||||
+ g_variant_unref (child);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -428,6 +500,7 @@ ibus_engine_desc_copy (IBusEngineDesc *dest,
|
|
||||||
dest->priv->layout = g_strdup (src->priv->layout);
|
|
||||||
dest->priv->rank = src->priv->rank;
|
|
||||||
dest->priv->hotkeys = g_strdup (src->priv->hotkeys);
|
|
||||||
+ dest->priv->requires = src->priv->requires;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -439,6 +512,52 @@ ibus_engine_desc_copy (IBusEngineDesc *dest,
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void
|
|
||||||
+ibus_engine_desc_output_capabilities (guint caps,
|
|
||||||
+ GString *output,
|
|
||||||
+ gint indent)
|
|
||||||
+{
|
|
||||||
+ GFlagsClass *flags_class;
|
|
||||||
+ gint i;
|
|
||||||
+
|
|
||||||
+ flags_class = g_type_class_ref (IBUS_TYPE_CAPABILITE);
|
|
||||||
+ g_return_if_fail (G_TYPE_IS_FLAGS (IBUS_TYPE_CAPABILITE));
|
|
||||||
+ for (i = 0; i < flags_class->n_values; i++) {
|
|
||||||
+ GFlagsValue *flags_value = &flags_class->values[i];
|
|
||||||
+ if (caps & flags_value->value) {
|
|
||||||
+ g_string_append_indent (output, indent + 1);
|
|
||||||
+ g_string_append_printf (output, "<capability>%s</capability>\n",
|
|
||||||
+ flags_value->value_nick);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ g_type_class_unref (flags_class);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static guint
|
|
||||||
+ibus_engine_desc_parse_capabilities (XMLNode *node)
|
|
||||||
+{
|
|
||||||
+ GFlagsClass *flags_class;
|
|
||||||
+ guint caps = 0;
|
|
||||||
+ GList *p;
|
|
||||||
+
|
|
||||||
+ flags_class = g_type_class_ref (IBUS_TYPE_CAPABILITE);
|
|
||||||
+ for (p = node->sub_nodes; p != NULL; p = p->next) {
|
|
||||||
+ XMLNode *sub_node = (XMLNode *) p->data;
|
|
||||||
+
|
|
||||||
+ if (g_strcmp0 (sub_node->name, "capability") == 0) {
|
|
||||||
+ gint i;
|
|
||||||
+ for (i = 0; i < flags_class->n_values; i++) {
|
|
||||||
+ GFlagsValue *flags_value = &flags_class->values[i];
|
|
||||||
+ if (g_strcmp0 (flags_value->value_nick, sub_node->text) == 0)
|
|
||||||
+ caps |= flags_value->value;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ g_type_class_unref (flags_class);
|
|
||||||
+
|
|
||||||
+ return caps;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void
|
|
||||||
ibus_engine_desc_output (IBusEngineDesc *desc,
|
|
||||||
GString *output,
|
|
||||||
@@ -467,6 +586,13 @@ ibus_engine_desc_output (IBusEngineDesc *desc,
|
|
||||||
OUTPUT_ENTRY_1(hotkeys);
|
|
||||||
g_string_append_indent (output, indent + 1);
|
|
||||||
g_string_append_printf (output, "<rank>%u</rank>\n", desc->priv->rank);
|
|
||||||
+
|
|
||||||
+ g_string_append_indent (output, indent + 1);
|
|
||||||
+ g_string_append (output, "<requires>\n");
|
|
||||||
+ ibus_engine_desc_output_capabilities (desc->priv->requires, output,
|
|
||||||
+ indent + 2);
|
|
||||||
+ g_string_append_indent (output, indent + 1);
|
|
||||||
+ g_string_append (output, "</requires>\n");
|
|
||||||
#undef OUTPUT_ENTRY
|
|
||||||
#undef OUTPUT_ENTRY_1
|
|
||||||
g_string_append_indent (output, indent);
|
|
||||||
@@ -504,6 +630,11 @@ ibus_engine_desc_parse_xml_node (IBusEngineDesc *desc,
|
|
||||||
desc->priv->rank = atoi (sub_node->text);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
+ if (g_strcmp0 (sub_node->name , "requires") == 0) {
|
|
||||||
+ desc->priv->requires =
|
|
||||||
+ ibus_engine_desc_parse_capabilities (sub_node);
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
g_warning ("<engines> element contains invalidate element <%s>", sub_node->name);
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
@@ -526,6 +657,7 @@ IBUS_ENGINE_DESC_GET_PROPERTY (icon, const gchar *)
|
|
||||||
IBUS_ENGINE_DESC_GET_PROPERTY (layout, const gchar *)
|
|
||||||
IBUS_ENGINE_DESC_GET_PROPERTY (rank, guint)
|
|
||||||
IBUS_ENGINE_DESC_GET_PROPERTY (hotkeys, const gchar *)
|
|
||||||
+IBUS_ENGINE_DESC_GET_PROPERTY (requires, guint)
|
|
||||||
#undef IBUS_ENGINE_DESC_GET_PROPERTY
|
|
||||||
|
|
||||||
IBusEngineDesc *
|
|
||||||
diff --git a/src/ibusenginedesc.h b/src/ibusenginedesc.h
|
|
||||||
index 9718b15..209d460 100644
|
|
||||||
--- a/src/ibusenginedesc.h
|
|
||||||
+++ b/src/ibusenginedesc.h
|
|
||||||
@@ -90,6 +90,8 @@ typedef struct _IBusEngineDescClass IBusEngineDescClass;
|
|
||||||
* the front.
|
|
||||||
* hotkeys: One or more hotkeys for switching to this engine, separated by
|
|
||||||
* semi-colon.
|
|
||||||
+ * requires: Capabilities this engine will utilize. The value is the
|
|
||||||
+ * union of the IBusCapability flags.
|
|
||||||
*/
|
|
||||||
struct _IBusEngineDesc {
|
|
||||||
IBusSerializable parent;
|
|
||||||
@@ -249,6 +251,15 @@ guint ibus_engine_desc_get_rank (IBusEngineDesc *info);
|
|
||||||
const gchar *ibus_engine_desc_get_hotkeys (IBusEngineDesc *info);
|
|
||||||
|
|
||||||
/**
|
|
||||||
+ * ibus_engine_desc_get_requires:
|
|
||||||
+ * @info: An IBusEngineDesc
|
|
||||||
+ * @returns: request capabilites property in IBusEngineDesc
|
|
||||||
+ *
|
|
||||||
+ * Return the capabilites property in IBusEngineDesc.
|
|
||||||
+ */
|
|
||||||
+guint ibus_engine_desc_get_requires (IBusEngineDesc *info);
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
* ibus_engine_desc_output:
|
|
||||||
* @info: An IBusEngineDesc
|
|
||||||
* @output: XML-formatted Input method engine description.
|
|
||||||
--
|
|
||||||
1.7.4.2
|
|
||||||
|
|
@ -1,12 +1,13 @@
|
|||||||
From 047452beffd7cb429bf4dfeb2371f120cc8041a6 Mon Sep 17 00:00:00 2001
|
From 7f81445b3e6613d14f64253506a309095a37c8d7 Mon Sep 17 00:00:00 2001
|
||||||
From: fujiwarat <takao.fujiwara1@gmail.com>
|
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||||
Date: Fri, 11 Mar 2011 16:07:09 +0900
|
Date: Mon, 20 Jun 2011 19:04:42 +0900
|
||||||
Subject: [PATCH] Reload preload engines until users customize the list.
|
Subject: [PATCH] Reload preload engines until users customize the list.
|
||||||
|
|
||||||
The idea is, if users don't customize the preload_engines with ibus-setup,
|
The idea is, if users don't customize the preload_engines with ibus-setup,
|
||||||
users would prefer to load the system default engines again by login.
|
users would prefer to load the system default engines again by login.
|
||||||
The gconf value 'preload_engine_mode' is
|
The gconf value 'preload_engine_mode' is
|
||||||
IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE by default.
|
IBUS_PRELOAD_ENGINE_MODE_USER by default but set
|
||||||
|
IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE for the initial login.
|
||||||
If preload_engine_mode is IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE,
|
If preload_engine_mode is IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE,
|
||||||
ibus-daemon loads the system preload engines by langs.
|
ibus-daemon loads the system preload engines by langs.
|
||||||
If preload_engine_mode is IBUS_PRELOAD_ENGINE_MODE_USER,
|
If preload_engine_mode is IBUS_PRELOAD_ENGINE_MODE_USER,
|
||||||
@ -15,22 +16,20 @@ On the other hand, if users enable the customized engine checkbutton
|
|||||||
on ibus-setup, ibus-setup sets 'preload_engine_mode' as
|
on ibus-setup, ibus-setup sets 'preload_engine_mode' as
|
||||||
IBUS_PRELOAD_ENGINE_MODE_USER and users can customize the value
|
IBUS_PRELOAD_ENGINE_MODE_USER and users can customize the value
|
||||||
'preload_engines'.
|
'preload_engines'.
|
||||||
Loading system default may spend the startup time. If you mind it,
|
|
||||||
your dist may like to put TRUE in 'use_local_preload_engines' value.
|
|
||||||
---
|
---
|
||||||
bus/ibusimpl.c | 286 +++++++++++++++++++++++++++++++++++---------------
|
bus/ibusimpl.c | 402 +++++++++++++++++++++++++++++++++++++++-----------
|
||||||
data/ibus.schemas.in | 13 +++
|
data/ibus.schemas.in | 13 ++
|
||||||
ibus/common.py | 6 +
|
ibus/common.py | 6 +
|
||||||
setup/main.py | 37 ++++++-
|
setup/main.py | 70 ++++++++-
|
||||||
setup/setup.ui | 21 +++-
|
setup/setup.ui | 21 +++-
|
||||||
src/ibustypes.h | 10 ++
|
src/ibustypes.h | 10 ++
|
||||||
6 files changed, 279 insertions(+), 94 deletions(-)
|
6 files changed, 427 insertions(+), 95 deletions(-)
|
||||||
|
|
||||||
diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
|
diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
|
||||||
index 8d4ec36..0caa8c7 100644
|
index a7ae52b..bb4b8ae 100644
|
||||||
--- a/bus/ibusimpl.c
|
--- a/bus/ibusimpl.c
|
||||||
+++ b/bus/ibusimpl.c
|
+++ b/bus/ibusimpl.c
|
||||||
@@ -144,6 +144,9 @@ static void bus_ibus_impl_set_previo
|
@@ -144,6 +144,9 @@ static void bus_ibus_impl_set_previous_engine
|
||||||
static void bus_ibus_impl_set_preload_engines
|
static void bus_ibus_impl_set_preload_engines
|
||||||
(BusIBusImpl *ibus,
|
(BusIBusImpl *ibus,
|
||||||
GVariant *value);
|
GVariant *value);
|
||||||
@ -40,10 +39,28 @@ index 8d4ec36..0caa8c7 100644
|
|||||||
static void bus_ibus_impl_set_use_sys_layout
|
static void bus_ibus_impl_set_use_sys_layout
|
||||||
(BusIBusImpl *ibus,
|
(BusIBusImpl *ibus,
|
||||||
GVariant *value);
|
GVariant *value);
|
||||||
@@ -284,6 +287,142 @@ _panel_destroy_cb (BusPanelProxy *panel,
|
@@ -285,6 +288,259 @@ _panel_destroy_cb (BusPanelProxy *panel,
|
||||||
g_object_unref (panel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
+_config_set_value_done (GObject *object,
|
||||||
|
+ GAsyncResult *res,
|
||||||
|
+ gpointer user_data)
|
||||||
|
+{
|
||||||
|
+ IBusConfig *config = (IBusConfig *) object;
|
||||||
|
+ GVariant *value = (GVariant *) user_data;
|
||||||
|
+ GError *error = NULL;
|
||||||
|
+
|
||||||
|
+ g_assert (IBUS_IS_CONFIG (config));
|
||||||
|
+
|
||||||
|
+ if (!ibus_config_set_value_async_finish (config, res, &error)) {
|
||||||
|
+ if (error) {
|
||||||
|
+ g_error_free (error);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ g_variant_unref (value);
|
||||||
|
+}
|
||||||
|
+
|
||||||
+#ifndef OS_CHROMEOS
|
+#ifndef OS_CHROMEOS
|
||||||
+static gint
|
+static gint
|
||||||
+_engine_desc_cmp (IBusEngineDesc *desc1,
|
+_engine_desc_cmp (IBusEngineDesc *desc1,
|
||||||
@ -59,7 +76,7 @@ index 8d4ec36..0caa8c7 100644
|
|||||||
+_get_config_preload_engine_mode (BusIBusImpl *ibus)
|
+_get_config_preload_engine_mode (BusIBusImpl *ibus)
|
||||||
+{
|
+{
|
||||||
+ GVariant *variant = NULL;
|
+ GVariant *variant = NULL;
|
||||||
+ gint preload_engine_mode = IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE;
|
+ gint preload_engine_mode = IBUS_PRELOAD_ENGINE_MODE_USER;
|
||||||
+
|
+
|
||||||
+ g_assert (BUS_IS_IBUS_IMPL (ibus));
|
+ g_assert (BUS_IS_IBUS_IMPL (ibus));
|
||||||
+
|
+
|
||||||
@ -68,6 +85,23 @@ index 8d4ec36..0caa8c7 100644
|
|||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ variant = ibus_config_get_value (ibus->config, "general",
|
+ variant = ibus_config_get_value (ibus->config, "general",
|
||||||
|
+ "preload_engines");
|
||||||
|
+ if (variant == NULL) {
|
||||||
|
+ /* Set LANG_RELATIVE mode for the initial login */
|
||||||
|
+ preload_engine_mode = IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE;
|
||||||
|
+ variant = g_variant_ref_sink (g_variant_new ("i", preload_engine_mode));
|
||||||
|
+ ibus_config_set_value_async (ibus->config, "general",
|
||||||
|
+ "preload_engine_mode", variant,
|
||||||
|
+ -1,
|
||||||
|
+ NULL,
|
||||||
|
+ _config_set_value_done,
|
||||||
|
+ variant);
|
||||||
|
+ return preload_engine_mode;
|
||||||
|
+ } else {
|
||||||
|
+ g_variant_unref (variant);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ variant = ibus_config_get_value (ibus->config, "general",
|
||||||
+ "preload_engine_mode");
|
+ "preload_engine_mode");
|
||||||
+ if (variant != NULL) {
|
+ if (variant != NULL) {
|
||||||
+ if (g_variant_classify (variant) == G_VARIANT_CLASS_INT32) {
|
+ if (g_variant_classify (variant) == G_VARIANT_CLASS_INT32) {
|
||||||
@ -80,6 +114,82 @@ index 8d4ec36..0caa8c7 100644
|
|||||||
+}
|
+}
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
|
+static int
|
||||||
|
+_compare_engine_list_value (GVariant *value_a, GVariant *value_b)
|
||||||
|
+{
|
||||||
|
+ GVariant *value;
|
||||||
|
+ GVariantIter iter;
|
||||||
|
+ const gchar *engine_name = NULL;
|
||||||
|
+ gchar *concat_engine_names;
|
||||||
|
+ gchar *concat_engine_names_a = NULL;
|
||||||
|
+ gchar *concat_engine_names_b = NULL;
|
||||||
|
+ int retval = 0;
|
||||||
|
+
|
||||||
|
+ value = value_a;
|
||||||
|
+ concat_engine_names = NULL;
|
||||||
|
+ if (value != NULL && g_variant_classify (value) == G_VARIANT_CLASS_ARRAY) {
|
||||||
|
+ g_variant_iter_init (&iter, value);
|
||||||
|
+ while (g_variant_iter_loop (&iter, "&s", &engine_name)) {
|
||||||
|
+ gchar *tmp = g_strdup_printf ("%s::%s",
|
||||||
|
+ concat_engine_names ? concat_engine_names : "",
|
||||||
|
+ engine_name ? engine_name : "");
|
||||||
|
+ g_free (concat_engine_names);
|
||||||
|
+ concat_engine_names = tmp;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ concat_engine_names_a = concat_engine_names;
|
||||||
|
+
|
||||||
|
+ value = value_b;
|
||||||
|
+ concat_engine_names = NULL;
|
||||||
|
+ if (value != NULL && g_variant_classify (value) == G_VARIANT_CLASS_ARRAY) {
|
||||||
|
+ g_variant_iter_init (&iter, value);
|
||||||
|
+ while (g_variant_iter_loop (&iter, "&s", &engine_name)) {
|
||||||
|
+ gchar *tmp = g_strdup_printf ("%s::%s",
|
||||||
|
+ concat_engine_names ? concat_engine_names : "",
|
||||||
|
+ engine_name ? engine_name : "");
|
||||||
|
+ g_free (concat_engine_names);
|
||||||
|
+ concat_engine_names = tmp;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ concat_engine_names_b = concat_engine_names;
|
||||||
|
+
|
||||||
|
+ retval = g_strcmp0 (concat_engine_names_a, concat_engine_names_b);
|
||||||
|
+ g_free (concat_engine_names_a);
|
||||||
|
+ g_free (concat_engine_names_b);
|
||||||
|
+ return retval;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+_preload_engines_config_get_value_done (GObject *object,
|
||||||
|
+ GAsyncResult *res,
|
||||||
|
+ gpointer user_data)
|
||||||
|
+{
|
||||||
|
+ IBusConfig *config = (IBusConfig *) object;
|
||||||
|
+ GVariant *new_value = (GVariant *) user_data;
|
||||||
|
+ GVariant *value = NULL;
|
||||||
|
+ GError *error = NULL;
|
||||||
|
+
|
||||||
|
+ g_assert (IBUS_IS_CONFIG (config));
|
||||||
|
+
|
||||||
|
+ value = ibus_config_get_value_async_finish (config, res, &error);
|
||||||
|
+ if (error) {
|
||||||
|
+ g_error_free (error);
|
||||||
|
+ }
|
||||||
|
+ if (_compare_engine_list_value (value, new_value) != 0) {
|
||||||
|
+ ibus_config_set_value_async (config, "general",
|
||||||
|
+ "preload_engines", new_value,
|
||||||
|
+ -1,
|
||||||
|
+ NULL,
|
||||||
|
+ _config_set_value_done,
|
||||||
|
+ new_value);
|
||||||
|
+ } else if (new_value) {
|
||||||
|
+ g_variant_unref (new_value);
|
||||||
|
+ }
|
||||||
|
+ if (value) {
|
||||||
|
+ g_variant_unref (value);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
+static void
|
+static void
|
||||||
+_set_preload_engines (BusIBusImpl *ibus,
|
+_set_preload_engines (BusIBusImpl *ibus,
|
||||||
+ GVariant *value)
|
+ GVariant *value)
|
||||||
@ -103,11 +213,16 @@ index 8d4ec36..0caa8c7 100644
|
|||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ if (engine_list != NULL &&
|
+ if (engine_list != NULL &&
|
||||||
+ ibus->config != NULL &&
|
+ ibus->config != NULL) {
|
||||||
+ ibus_config_get_value (ibus->config, "general",
|
+ /* sync function will effects the startup performance.
|
||||||
+ "preload_engines") == NULL) {
|
+ * We'd always like to save the value so that ibus-setup
|
||||||
+ ibus_config_set_value (ibus->config, "general",
|
+ * get the updated engine list. */
|
||||||
+ "preload_engines", value);
|
+ ibus_config_get_value_async (ibus->config, "general",
|
||||||
|
+ "preload_engines",
|
||||||
|
+ -1,
|
||||||
|
+ NULL,
|
||||||
|
+ _preload_engines_config_get_value_done,
|
||||||
|
+ g_variant_ref_sink (value));
|
||||||
+ } else {
|
+ } else {
|
||||||
+ /* We don't update preload_engines with an empty string for safety.
|
+ /* We don't update preload_engines with an empty string for safety.
|
||||||
+ * Just unref the floating value. */
|
+ * Just unref the floating value. */
|
||||||
@ -180,10 +295,11 @@ index 8d4ec36..0caa8c7 100644
|
|||||||
+}
|
+}
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
static void
|
+static void
|
||||||
bus_ibus_impl_set_hotkey (BusIBusImpl *ibus,
|
bus_ibus_impl_set_hotkey (BusIBusImpl *ibus,
|
||||||
GQuark hotkey,
|
GQuark hotkey,
|
||||||
@@ -394,35 +533,50 @@ static void
|
GVariant *value)
|
||||||
|
@@ -394,35 +650,50 @@ static void
|
||||||
bus_ibus_impl_set_preload_engines (BusIBusImpl *ibus,
|
bus_ibus_impl_set_preload_engines (BusIBusImpl *ibus,
|
||||||
GVariant *value)
|
GVariant *value)
|
||||||
{
|
{
|
||||||
@ -220,14 +336,14 @@ index 8d4ec36..0caa8c7 100644
|
|||||||
+/**
|
+/**
|
||||||
+ * bus_ibus_impl_set_preload_engine_mode:
|
+ * bus_ibus_impl_set_preload_engine_mode:
|
||||||
+ *
|
+ *
|
||||||
+ * A function to be called when "preload_engines_mode" config is updated.
|
+ * A function to be called when "preload_engine_mode" config is updated.
|
||||||
+ */
|
+ */
|
||||||
+static void
|
+static void
|
||||||
+bus_ibus_impl_set_preload_engine_mode (BusIBusImpl *ibus,
|
+bus_ibus_impl_set_preload_engine_mode (BusIBusImpl *ibus,
|
||||||
+ GVariant *value)
|
+ GVariant *value)
|
||||||
+{
|
+{
|
||||||
+#ifndef OS_CHROMEOS
|
+#ifndef OS_CHROMEOS
|
||||||
+ gint preload_engine_mode = IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE;
|
+ gint preload_engine_mode = IBUS_PRELOAD_ENGINE_MODE_USER;
|
||||||
|
|
||||||
- if (ibus->engine_list) {
|
- if (ibus->engine_list) {
|
||||||
- BusComponent *component = bus_component_from_engine_desc ((IBusEngineDesc *) ibus->engine_list->data);
|
- BusComponent *component = bus_component_from_engine_desc ((IBusEngineDesc *) ibus->engine_list->data);
|
||||||
@ -256,7 +372,7 @@ index 8d4ec36..0caa8c7 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -503,89 +657,48 @@ bus_ibus_impl_set_use_global_engine (Bus
|
@@ -503,89 +774,47 @@ bus_ibus_impl_set_use_global_engine (BusIBusImpl *ibus,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -279,7 +395,8 @@ index 8d4ec36..0caa8c7 100644
|
|||||||
+ * The idea is, if users don't customize the preload_engines with ibus-setup,
|
+ * The idea is, if users don't customize the preload_engines with ibus-setup,
|
||||||
+ * users would prefer to load the system default engines again by login.
|
+ * users would prefer to load the system default engines again by login.
|
||||||
+ * The gconf value 'preload_engine_mode' is
|
+ * The gconf value 'preload_engine_mode' is
|
||||||
+ * IBUS_PRELOAD_ENGINE_MODE_USER by default.
|
+ * IBUS_PRELOAD_ENGINE_MODE_USER by default but set
|
||||||
|
+ * IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE for the initial login.
|
||||||
+ * If preload_engine_mode is IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE,
|
+ * If preload_engine_mode is IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE,
|
||||||
+ * ibus-daemon loads the system preload engines by langs.
|
+ * ibus-daemon loads the system preload engines by langs.
|
||||||
+ * If preload_engine_mode is IBUS_PRELOAD_ENGINE_MODE_USER,
|
+ * If preload_engine_mode is IBUS_PRELOAD_ENGINE_MODE_USER,
|
||||||
@ -288,8 +405,6 @@ index 8d4ec36..0caa8c7 100644
|
|||||||
+ * on ibus-setup, ibus-setup sets 'preload_engine_mode' as
|
+ * on ibus-setup, ibus-setup sets 'preload_engine_mode' as
|
||||||
+ * IBUS_PRELOAD_ENGINE_MODE_USER and users can customize the value
|
+ * IBUS_PRELOAD_ENGINE_MODE_USER and users can customize the value
|
||||||
+ * 'preload_engines'.
|
+ * 'preload_engines'.
|
||||||
+ * Loading system default may spend the startup time. If you mind it,
|
|
||||||
+ * your dist may like to put TRUE in 'use_local_preload_engines' value.
|
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
bus_ibus_impl_set_default_preload_engines (BusIBusImpl *ibus)
|
bus_ibus_impl_set_default_preload_engines (BusIBusImpl *ibus)
|
||||||
@ -298,7 +413,7 @@ index 8d4ec36..0caa8c7 100644
|
|||||||
- g_assert (BUS_IS_IBUS_IMPL (ibus));
|
- g_assert (BUS_IS_IBUS_IMPL (ibus));
|
||||||
-
|
-
|
||||||
static gboolean done = FALSE;
|
static gboolean done = FALSE;
|
||||||
+ gint preload_engine_mode = IBUS_PRELOAD_ENGINE_MODE_LANG_RELATIVE;
|
+ gint preload_engine_mode = IBUS_PRELOAD_ENGINE_MODE_USER;
|
||||||
+
|
+
|
||||||
+ g_assert (BUS_IS_IBUS_IMPL (ibus));
|
+ g_assert (BUS_IS_IBUS_IMPL (ibus));
|
||||||
|
|
||||||
@ -369,16 +484,16 @@ index 8d4ec36..0caa8c7 100644
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -601,6 +714,7 @@ const static struct {
|
@@ -601,6 +830,7 @@ const static struct {
|
||||||
{ "general/hotkey", "next_engine_in_menu", bus_ibus_impl_set_next_engine_in_menu },
|
{ "general/hotkey", "next_engine_in_menu", bus_ibus_impl_set_next_engine_in_menu },
|
||||||
{ "general/hotkey", "previous_engine", bus_ibus_impl_set_previous_engine },
|
{ "general/hotkey", "previous_engine", bus_ibus_impl_set_previous_engine },
|
||||||
{ "general", "preload_engines", bus_ibus_impl_set_preload_engines },
|
{ "general", "preload_engines", bus_ibus_impl_set_preload_engines },
|
||||||
+ { "general", "preload_engines_mode", bus_ibus_impl_set_preload_engine_mode },
|
+ { "general", "preload_engine_mode", bus_ibus_impl_set_preload_engine_mode },
|
||||||
{ "general", "use_system_keyboard_layout", bus_ibus_impl_set_use_sys_layout },
|
{ "general", "use_system_keyboard_layout", bus_ibus_impl_set_use_sys_layout },
|
||||||
{ "general", "use_global_engine", bus_ibus_impl_set_use_global_engine },
|
{ "general", "use_global_engine", bus_ibus_impl_set_use_global_engine },
|
||||||
{ "general", "embed_preedit_text", bus_ibus_impl_set_embed_preedit_text },
|
{ "general", "embed_preedit_text", bus_ibus_impl_set_embed_preedit_text },
|
||||||
diff --git a/data/ibus.schemas.in b/data/ibus.schemas.in
|
diff --git a/data/ibus.schemas.in b/data/ibus.schemas.in
|
||||||
index 7ca4899..39922a0 100644
|
index 7ca4899..d4334e1 100644
|
||||||
--- a/data/ibus.schemas.in
|
--- a/data/ibus.schemas.in
|
||||||
+++ b/data/ibus.schemas.in
|
+++ b/data/ibus.schemas.in
|
||||||
@@ -13,6 +13,19 @@
|
@@ -13,6 +13,19 @@
|
||||||
@ -389,7 +504,7 @@ index 7ca4899..39922a0 100644
|
|||||||
+ <applyto>/desktop/ibus/general/preload_engine_mode</applyto>
|
+ <applyto>/desktop/ibus/general/preload_engine_mode</applyto>
|
||||||
+ <owner>ibus</owner>
|
+ <owner>ibus</owner>
|
||||||
+ <type>int</type>
|
+ <type>int</type>
|
||||||
+ <default>1</default>
|
+ <default>0</default>
|
||||||
+ <locale name="C">
|
+ <locale name="C">
|
||||||
+ <short>Preload engine mode</short>
|
+ <short>Preload engine mode</short>
|
||||||
+ <long>Preload engines are loaded with this mode.
|
+ <long>Preload engines are loaded with this mode.
|
||||||
@ -402,7 +517,7 @@ index 7ca4899..39922a0 100644
|
|||||||
<applyto>/desktop/ibus/general/hotkey/trigger</applyto>
|
<applyto>/desktop/ibus/general/hotkey/trigger</applyto>
|
||||||
<owner>ibus</owner>
|
<owner>ibus</owner>
|
||||||
diff --git a/ibus/common.py b/ibus/common.py
|
diff --git a/ibus/common.py b/ibus/common.py
|
||||||
index e105f18..20c0710 100644
|
index 6483aae..127ed93 100644
|
||||||
--- a/ibus/common.py
|
--- a/ibus/common.py
|
||||||
+++ b/ibus/common.py
|
+++ b/ibus/common.py
|
||||||
@@ -40,6 +40,8 @@ __all__ = (
|
@@ -40,6 +40,8 @@ __all__ = (
|
||||||
@ -426,10 +541,18 @@ index e105f18..20c0710 100644
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
diff --git a/setup/main.py b/setup/main.py
|
diff --git a/setup/main.py b/setup/main.py
|
||||||
index 7f4a040..9cdce02 100644
|
index 7f4a040..192fb88 100644
|
||||||
--- a/setup/main.py
|
--- a/setup/main.py
|
||||||
+++ b/setup/main.py
|
+++ b/setup/main.py
|
||||||
@@ -213,15 +213,22 @@ class Setup(object):
|
@@ -92,6 +92,7 @@ class Setup(object):
|
||||||
|
# keyboard shortcut
|
||||||
|
# trigger
|
||||||
|
self.__config = self.__bus.get_config()
|
||||||
|
+ self.__config.connect("value-changed", self.__config_value_changed_cb)
|
||||||
|
shortcuts = self.__config.get_value(
|
||||||
|
"general/hotkey", "trigger",
|
||||||
|
ibus.CONFIG_GENERAL_SHORTCUT_TRIGGER_DEFAULT)
|
||||||
|
@@ -213,15 +214,22 @@ class Setup(object):
|
||||||
self.__checkbutton_use_global_engine.connect("toggled", self.__checkbutton_use_global_engine_toggled_cb)
|
self.__checkbutton_use_global_engine.connect("toggled", self.__checkbutton_use_global_engine_toggled_cb)
|
||||||
|
|
||||||
# init engine page
|
# init engine page
|
||||||
@ -457,7 +580,7 @@ index 7f4a040..9cdce02 100644
|
|||||||
|
|
||||||
self.__treeview = self.__builder.get_object("treeview_engines")
|
self.__treeview = self.__builder.get_object("treeview_engines")
|
||||||
self.__treeview.set_engines(engines)
|
self.__treeview.set_engines(engines)
|
||||||
@@ -265,6 +272,13 @@ class Setup(object):
|
@@ -265,6 +273,26 @@ class Setup(object):
|
||||||
engine_names = map(lambda e: e.name, engines)
|
engine_names = map(lambda e: e.name, engines)
|
||||||
self.__config.set_list("general", "preload_engines", engine_names, "s")
|
self.__config.set_list("general", "preload_engines", engine_names, "s")
|
||||||
|
|
||||||
@ -467,11 +590,24 @@ index 7f4a040..9cdce02 100644
|
|||||||
+ tmp_dict[e.name] = e
|
+ tmp_dict[e.name] = e
|
||||||
+ engines = [tmp_dict[name] for name in engine_names if name in tmp_dict]
|
+ engines = [tmp_dict[name] for name in engine_names if name in tmp_dict]
|
||||||
+ return engines
|
+ return engines
|
||||||
|
+
|
||||||
|
+ def __compare_descs(self, engines_a, engines_b):
|
||||||
|
+ engines = engines_a
|
||||||
|
+ concat_engine_names = ""
|
||||||
|
+ for engine in engines:
|
||||||
|
+ concat_engine_names = "%s::%s" % (concat_engine_names, engine.name)
|
||||||
|
+ concat_engine_names_a = concat_engine_names
|
||||||
|
+ engines = engines_b
|
||||||
|
+ concat_engine_names = ""
|
||||||
|
+ for engine in engines:
|
||||||
|
+ concat_engine_names = "%s::%s" % (concat_engine_names, engine.name)
|
||||||
|
+ concat_engine_names_b = concat_engine_names
|
||||||
|
+ return concat_engine_names_a == concat_engine_names_b
|
||||||
+
|
+
|
||||||
def __button_engine_add_cb(self, button):
|
def __button_engine_add_cb(self, button):
|
||||||
engine = self.__combobox.get_active_engine()
|
engine = self.__combobox.get_active_engine()
|
||||||
self.__treeview.append_engine(engine)
|
self.__treeview.append_engine(engine)
|
||||||
@@ -276,6 +290,19 @@ class Setup(object):
|
@@ -276,6 +304,32 @@ class Setup(object):
|
||||||
about.run()
|
about.run()
|
||||||
about.destroy()
|
about.destroy()
|
||||||
|
|
||||||
@ -483,6 +619,19 @@ index 7f4a040..9cdce02 100644
|
|||||||
+ self.__builder.get_object("hbox_customize_active_input_methods").set_sensitive(True)
|
+ self.__builder.get_object("hbox_customize_active_input_methods").set_sensitive(True)
|
||||||
+ self.__treeview.notify("engines")
|
+ self.__treeview.notify("engines")
|
||||||
+ else:
|
+ else:
|
||||||
|
+ message = _("The list of your saved input methods will be " \
|
||||||
|
+ "cleared immediately and the list will be " \
|
||||||
|
+ "configured by the login language every time. " \
|
||||||
|
+ "Do you agree with this?")
|
||||||
|
+ dlg = gtk.MessageDialog(type = gtk.MESSAGE_QUESTION,
|
||||||
|
+ buttons = gtk.BUTTONS_YES_NO,
|
||||||
|
+ message_format = message)
|
||||||
|
+ id = dlg.run()
|
||||||
|
+ dlg.destroy()
|
||||||
|
+ self.__flush_gtk_events()
|
||||||
|
+ if id != gtk.RESPONSE_YES:
|
||||||
|
+ button.set_active(True)
|
||||||
|
+ return
|
||||||
+ self.__config.set_value("general",
|
+ self.__config.set_value("general",
|
||||||
+ "preload_engine_mode",
|
+ "preload_engine_mode",
|
||||||
+ ibus.common.PRELOAD_ENGINE_MODE_LANG_RELATIVE)
|
+ ibus.common.PRELOAD_ENGINE_MODE_LANG_RELATIVE)
|
||||||
@ -491,6 +640,19 @@ index 7f4a040..9cdce02 100644
|
|||||||
def __init_bus(self):
|
def __init_bus(self):
|
||||||
try:
|
try:
|
||||||
self.__bus = ibus.Bus()
|
self.__bus = ibus.Bus()
|
||||||
|
@@ -466,7 +520,11 @@ class Setup(object):
|
||||||
|
self.__config.set_value("general", "use_global_engine", value)
|
||||||
|
|
||||||
|
def __config_value_changed_cb(self, bus, section, name, value):
|
||||||
|
- pass
|
||||||
|
+ if section == 'general' and name == 'preload_engines':
|
||||||
|
+ engines = self.__get_engine_descs_from_names(value)
|
||||||
|
+ current_engines = self.__treeview.get_engines()
|
||||||
|
+ if self.__compare_descs(engines, current_engines) == False:
|
||||||
|
+ self.__treeview.set_engines(engines)
|
||||||
|
|
||||||
|
def __config_reloaded_cb(self, bus):
|
||||||
|
pass
|
||||||
diff --git a/setup/setup.ui b/setup/setup.ui
|
diff --git a/setup/setup.ui b/setup/setup.ui
|
||||||
index f1e6d0b..562c091 100644
|
index f1e6d0b..562c091 100644
|
||||||
--- a/setup/setup.ui
|
--- a/setup/setup.ui
|
||||||
@ -538,11 +700,11 @@ index f1e6d0b..562c091 100644
|
|||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
diff --git a/src/ibustypes.h b/src/ibustypes.h
|
diff --git a/src/ibustypes.h b/src/ibustypes.h
|
||||||
index 035d124..0a9d7b2 100644
|
index 6a31847..14b44fc 100644
|
||||||
--- a/src/ibustypes.h
|
--- a/src/ibustypes.h
|
||||||
+++ b/src/ibustypes.h
|
+++ b/src/ibustypes.h
|
||||||
@@ -177,6 +177,16 @@ typedef enum {
|
@@ -186,6 +186,16 @@ typedef enum {
|
||||||
} IBusBusRequestNameReply;
|
} IBusError;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
+ * IBusPreloadEngineMode:
|
+ * IBusPreloadEngineMode:
|
||||||
@ -559,5 +721,5 @@ index 035d124..0a9d7b2 100644
|
|||||||
* @x: x coordinate.
|
* @x: x coordinate.
|
||||||
* @y: y coordinate.
|
* @y: y coordinate.
|
||||||
--
|
--
|
||||||
1.7.4.1
|
1.7.4.4
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
741
ibus-HEAD.patch
741
ibus-HEAD.patch
@ -226,3 +226,744 @@ index 0e9418e..39ad784 100644
|
|||||||
--
|
--
|
||||||
1.7.4.4
|
1.7.4.4
|
||||||
|
|
||||||
|
From d059132885d3c90647f08f3083e39daa9f82b700 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ryo Onodera <onodera@clear-code.com>
|
||||||
|
Date: Tue, 17 May 2011 20:07:40 +0900
|
||||||
|
Subject: [PATCH] fix wrong forward key event signature
|
||||||
|
|
||||||
|
---
|
||||||
|
ibus/engine.py | 4 ++--
|
||||||
|
ibus/interface/iengine.py | 4 ++--
|
||||||
|
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ibus/engine.py b/ibus/engine.py
|
||||||
|
index 8cbcee3..fe5dd98 100644
|
||||||
|
--- a/ibus/engine.py
|
||||||
|
+++ b/ibus/engine.py
|
||||||
|
@@ -114,8 +114,8 @@ class EngineBase(object.Object):
|
||||||
|
text = serializable.serialize_object(text)
|
||||||
|
return self.__proxy.CommitText(text)
|
||||||
|
|
||||||
|
- def forward_key_event(self, keyval, state):
|
||||||
|
- return self.__proxy.ForwardKeyEvent(keyval, state)
|
||||||
|
+ def forward_key_event(self, keyval, keycode, state):
|
||||||
|
+ return self.__proxy.ForwardKeyEvent(keyval, keycode, state)
|
||||||
|
|
||||||
|
def update_preedit_text(self, text, cursor_pos, visible, mode=common.IBUS_ENGINE_PREEDIT_CLEAR):
|
||||||
|
text = serializable.serialize_object(text)
|
||||||
|
diff --git a/ibus/interface/iengine.py b/ibus/interface/iengine.py
|
||||||
|
index 0e0f4ee..9e0d981 100644
|
||||||
|
--- a/ibus/interface/iengine.py
|
||||||
|
+++ b/ibus/interface/iengine.py
|
||||||
|
@@ -104,8 +104,8 @@ class IEngine(dbus.service.Object):
|
||||||
|
@signal(signature="v")
|
||||||
|
def CommitText(self, text): pass
|
||||||
|
|
||||||
|
- @signal(signature="uu")
|
||||||
|
- def ForwardKeyEvent(self, keyval, state): pass
|
||||||
|
+ @signal(signature="uuu")
|
||||||
|
+ def ForwardKeyEvent(self, keyval, keycode, state): pass
|
||||||
|
|
||||||
|
@signal(signature="vubu")
|
||||||
|
def UpdatePreeditText(self, text, cursor_pos, visible, mode): pass
|
||||||
|
--
|
||||||
|
1.7.4.4
|
||||||
|
|
||||||
|
From d3e750eab6db7035f494fcdb328b87b2923e33a2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yusuke Sato <yusukes@chromium.org>
|
||||||
|
Date: Wed, 1 Jun 2011 23:37:14 +0900
|
||||||
|
Subject: [PATCH] Send the new capabilities to ibus-daemon in
|
||||||
|
ibus_im_context_set_use_preedit.
|
||||||
|
|
||||||
|
BUG=none
|
||||||
|
TEST=none
|
||||||
|
|
||||||
|
Review URL: http://codereview.appspot.com/4529103
|
||||||
|
---
|
||||||
|
client/gtk2/ibusimcontext.c | 2 ++
|
||||||
|
1 files changed, 2 insertions(+), 0 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
|
||||||
|
index ebae09d..4a894b0 100644
|
||||||
|
--- a/client/gtk2/ibusimcontext.c
|
||||||
|
+++ b/client/gtk2/ibusimcontext.c
|
||||||
|
@@ -942,6 +942,8 @@ ibus_im_context_set_use_preedit (GtkIMContext *context, gboolean use_preedit)
|
||||||
|
else {
|
||||||
|
ibusimcontext->caps &= ~IBUS_CAP_PREEDIT_TEXT;
|
||||||
|
}
|
||||||
|
+ ibus_input_context_set_capabilities (ibusimcontext->ibuscontext,
|
||||||
|
+ ibusimcontext->caps);
|
||||||
|
}
|
||||||
|
gtk_im_context_set_use_preedit (ibusimcontext->slave, use_preedit);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.7.4.4
|
||||||
|
|
||||||
|
From 52425daa537a32bed1781958e1ef62dbf199ad8b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peng Huang <shawn.p.huang@gmail.com>
|
||||||
|
Date: Mon, 6 Jun 2011 09:30:27 -0400
|
||||||
|
Subject: [PATCH] Fix Python input context binding.
|
||||||
|
|
||||||
|
Export "forward-key-event" and "delete-surrounding-text" signals to Python; clear __needs_surrounding_text property on "enabled" and "disabled" signals.
|
||||||
|
|
||||||
|
BUG=none
|
||||||
|
TEST=briefly tested, at least I don't see any regression
|
||||||
|
|
||||||
|
Review URL: http://codereview.appspot.com/4437062
|
||||||
|
---
|
||||||
|
ibus/inputcontext.py | 26 +++++++++++++++++++++++++-
|
||||||
|
ibus/interface/iinputcontext.py | 3 +++
|
||||||
|
2 files changed, 28 insertions(+), 1 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ibus/inputcontext.py b/ibus/inputcontext.py
|
||||||
|
index d143727..ceeb56d 100644
|
||||||
|
--- a/ibus/inputcontext.py
|
||||||
|
+++ b/ibus/inputcontext.py
|
||||||
|
@@ -116,6 +116,16 @@ class InputContext(object.Object):
|
||||||
|
gobject.TYPE_NONE,
|
||||||
|
()
|
||||||
|
),
|
||||||
|
+ "forward-key-event" : (
|
||||||
|
+ gobject.SIGNAL_RUN_LAST,
|
||||||
|
+ gobject.TYPE_NONE,
|
||||||
|
+ (gobject.TYPE_UINT, gobject.TYPE_UINT, gobject.TYPE_UINT)
|
||||||
|
+ ),
|
||||||
|
+ "delete-surrounding-text" : (
|
||||||
|
+ gobject.SIGNAL_RUN_LAST,
|
||||||
|
+ gobject.TYPE_NONE,
|
||||||
|
+ (gobject.TYPE_INT, gobject.TYPE_UINT)
|
||||||
|
+ ),
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, bus, path, watch_signals=False):
|
||||||
|
@@ -142,8 +152,14 @@ class InputContext(object.Object):
|
||||||
|
self.__signal_matches.append(m)
|
||||||
|
m = self.__context.connect_to_signal("RequireSurroundingText", self.__require_surrounding_text_cb)
|
||||||
|
self.__signal_matches.append(m)
|
||||||
|
+ m = self.__context.connect_to_signal("Enabled", self.__enabled_cb)
|
||||||
|
+ self.__signal_matches.append(m)
|
||||||
|
+ m = self.__context.connect_to_signal("Disabled", self.__disabled_cb)
|
||||||
|
+ self.__signal_matches.append(m)
|
||||||
|
|
||||||
|
- m = self.__context.connect_to_signal("Enabled", lambda *args: self.emit("enabled"))
|
||||||
|
+ m = self.__context.connect_to_signal("ForwardKeyEvent", lambda *args: self.emit("forward-key-event", *args))
|
||||||
|
+ self.__signal_matches.append(m)
|
||||||
|
+ m = self.__context.connect_to_signal("DeleteSurroundingText", lambda *args: self.emit("delete-surrounding-text", *args))
|
||||||
|
self.__signal_matches.append(m)
|
||||||
|
m = self.__context.connect_to_signal("Disabled", lambda *args: self.emit("disabled"))
|
||||||
|
self.__signal_matches.append(m)
|
||||||
|
@@ -168,6 +184,14 @@ class InputContext(object.Object):
|
||||||
|
m = self.__context.connect_to_signal("CursorDownLookupTable", lambda *args: self.emit("cursor-down-lookup-table"))
|
||||||
|
self.__signal_matches.append(m)
|
||||||
|
|
||||||
|
+ def __enabled_cb(self, *args):
|
||||||
|
+ self.__needs_surrounding_text = False
|
||||||
|
+ self.emit("enabled")
|
||||||
|
+
|
||||||
|
+ def __disabled_cb(self, *args):
|
||||||
|
+ self.__needs_surrounding_text = False
|
||||||
|
+ self.emit("disabled")
|
||||||
|
+
|
||||||
|
def __commit_text_cb(self, *args):
|
||||||
|
text = serializable.deserialize_object(args[0])
|
||||||
|
self.emit("commit-text", text)
|
||||||
|
diff --git a/ibus/interface/iinputcontext.py b/ibus/interface/iinputcontext.py
|
||||||
|
index 2db1c9b..1d3cd2a 100644
|
||||||
|
--- a/ibus/interface/iinputcontext.py
|
||||||
|
+++ b/ibus/interface/iinputcontext.py
|
||||||
|
@@ -95,6 +95,9 @@ class IInputContext(dbus.service.Object):
|
||||||
|
@signal(signature="uuu")
|
||||||
|
def ForwardKeyEvent(self, keyval, keycode, state): pass
|
||||||
|
|
||||||
|
+ @signal(signature="iu")
|
||||||
|
+ def DeleteSurroundingText(self, offset_from_cursor, nchars): pass
|
||||||
|
+
|
||||||
|
@signal(signature="vub")
|
||||||
|
def UpdatePreeditText(self, text, cursor_pos, visible): pass
|
||||||
|
|
||||||
|
--
|
||||||
|
1.7.4.4
|
||||||
|
|
||||||
|
From 59ce675e335e599ed18d74ab8849b9a5fe75d4be Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peng Huang <shawn.p.huang@gmail.com>
|
||||||
|
Date: Mon, 13 Jun 2011 13:18:29 -0400
|
||||||
|
Subject: [PATCH] Fix some race condition between idle and timeout
|
||||||
|
events. Also fix a memory leak.
|
||||||
|
|
||||||
|
BUG=http://crosbug.com/16387
|
||||||
|
TEST=Linux desktop
|
||||||
|
|
||||||
|
Review URL: http://codereview.appspot.com/4568072
|
||||||
|
---
|
||||||
|
bus/engineproxy.c | 46 ++++++++++++++++++++++++++++++----------------
|
||||||
|
1 files changed, 30 insertions(+), 16 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/bus/engineproxy.c b/bus/engineproxy.c
|
||||||
|
index 0c6f45d..f74af12 100644
|
||||||
|
--- a/bus/engineproxy.c
|
||||||
|
+++ b/bus/engineproxy.c
|
||||||
|
@@ -603,7 +603,8 @@ bus_engine_proxy_new_internal (const gchar *path,
|
||||||
|
g_assert (IBUS_IS_ENGINE_DESC (desc));
|
||||||
|
g_assert (G_IS_DBUS_CONNECTION (connection));
|
||||||
|
|
||||||
|
-
|
||||||
|
+ GDBusProxyFlags flags = G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START |
|
||||||
|
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES;
|
||||||
|
BusEngineProxy *engine =
|
||||||
|
(BusEngineProxy *) g_initable_new (BUS_TYPE_ENGINE_PROXY,
|
||||||
|
NULL,
|
||||||
|
@@ -613,7 +614,7 @@ bus_engine_proxy_new_internal (const gchar *path,
|
||||||
|
"g-interface-name", IBUS_INTERFACE_ENGINE,
|
||||||
|
"g-object-path", path,
|
||||||
|
"g-default-timeout", g_gdbus_timeout,
|
||||||
|
- "g-flags", G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START | G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
|
||||||
|
+ "g-flags", flags,
|
||||||
|
NULL);
|
||||||
|
const gchar *layout = ibus_engine_desc_get_layout (desc);
|
||||||
|
if (layout != NULL && layout[0] != '\0') {
|
||||||
|
@@ -638,24 +639,33 @@ static void
|
||||||
|
engine_proxy_new_data_free (EngineProxyNewData *data)
|
||||||
|
{
|
||||||
|
if (data->simple != NULL) {
|
||||||
|
- if (data->handler_id != 0)
|
||||||
|
- g_signal_handler_disconnect (data->component, data->handler_id);
|
||||||
|
g_object_unref (data->simple);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (data->component != NULL)
|
||||||
|
+ if (data->desc != NULL) {
|
||||||
|
+ g_object_unref (data->desc);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (data->component != NULL) {
|
||||||
|
+ if (data->handler_id != 0) {
|
||||||
|
+ g_signal_handler_disconnect (data->component, data->handler_id);
|
||||||
|
+ }
|
||||||
|
g_object_unref (data->component);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- if (data->factory != NULL)
|
||||||
|
+ if (data->factory != NULL) {
|
||||||
|
g_object_unref (data->factory);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- if (data->timeout_id != 0)
|
||||||
|
+ if (data->timeout_id != 0) {
|
||||||
|
g_source_remove (data->timeout_id);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (data->cancellable != NULL) {
|
||||||
|
- if (data->cancelled_handler_id != 0)
|
||||||
|
+ if (data->cancelled_handler_id != 0) {
|
||||||
|
g_cancellable_disconnect (data->cancellable,
|
||||||
|
- data->cancelled_handler_id);
|
||||||
|
+ data->cancelled_handler_id);
|
||||||
|
+ }
|
||||||
|
g_object_unref (data->cancellable);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -772,7 +782,8 @@ timeout_cb (EngineProxyNewData *data)
|
||||||
|
/**
|
||||||
|
* cancelled_cb:
|
||||||
|
*
|
||||||
|
- * A callback function to be called when someone calls g_cancellable_cancel() for the cancellable object for bus_engine_proxy_new.
|
||||||
|
+ * A callback function to be called when someone calls g_cancellable_cancel()
|
||||||
|
+ * for the cancellable object for bus_engine_proxy_new.
|
||||||
|
* Call the GAsyncReadyCallback.
|
||||||
|
*/
|
||||||
|
static gboolean
|
||||||
|
@@ -793,8 +804,12 @@ static void
|
||||||
|
cancelled_cb (GCancellable *cancellable,
|
||||||
|
EngineProxyNewData *data)
|
||||||
|
{
|
||||||
|
- /* Cancel the bus_engine_proxy_new() in idle to avoid deadlock */
|
||||||
|
- g_idle_add ((GSourceFunc) cancelled_idle_cb, data);
|
||||||
|
+ /* Cancel the bus_engine_proxy_new() in idle to avoid deadlock.
|
||||||
|
+ * And use HIGH priority to avoid timeout event happening before
|
||||||
|
+ * idle callback. */
|
||||||
|
+ g_idle_add_full (G_PRIORITY_HIGH,
|
||||||
|
+ (GSourceFunc) cancelled_idle_cb,
|
||||||
|
+ data, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
@@ -831,13 +846,12 @@ bus_engine_proxy_new (IBusEngineDesc *desc,
|
||||||
|
data->simple = simple;
|
||||||
|
data->timeout = timeout;
|
||||||
|
|
||||||
|
- g_object_set_data ((GObject *)data->simple, "EngineProxyNewData", data);
|
||||||
|
-
|
||||||
|
data->factory = bus_component_get_factory (data->component);
|
||||||
|
|
||||||
|
if (data->factory == NULL) {
|
||||||
|
- /* The factory is not ready yet. Create the factory first, and wait for the "notify::factory" signal.
|
||||||
|
- * In the handler of "notify::factory", we'll create the engine proxy. */
|
||||||
|
+ /* The factory is not ready yet. Create the factory first, and wait for
|
||||||
|
+ * the "notify::factory" signal. In the handler of "notify::factory",
|
||||||
|
+ * we'll create the engine proxy. */
|
||||||
|
data->handler_id = g_signal_connect (data->component,
|
||||||
|
"notify::factory",
|
||||||
|
G_CALLBACK (notify_factory_cb),
|
||||||
|
--
|
||||||
|
1.7.4.4
|
||||||
|
|
||||||
|
From fc9dedec30f724e91e7b3bb9111177e96b58ee43 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peng Huang <shawn.p.huang@gmail.com>
|
||||||
|
Date: Wed, 15 Jun 2011 10:38:17 -0400
|
||||||
|
Subject: [PATCH] Add IBUS_ERROR domain and reply IBUS_ERROR_NO_ENGINE
|
||||||
|
in org.freedesktop.IBus.InputContext.GetEngine
|
||||||
|
|
||||||
|
BUG=None
|
||||||
|
TEST=Manually
|
||||||
|
|
||||||
|
Review URL: http://codereview.appspot.com/4528140
|
||||||
|
---
|
||||||
|
bus/inputcontext.c | 7 ++++-
|
||||||
|
src/Makefile.am | 2 +
|
||||||
|
src/ibus.h | 1 +
|
||||||
|
src/ibuserror.c | 41 +++++++++++++++++++++++++++++++++
|
||||||
|
src/ibuserror.h | 46 +++++++++++++++++++++++++++++++++++++
|
||||||
|
src/ibusinputcontext.c | 15 +++++++++--
|
||||||
|
src/ibusshare.c | 1 +
|
||||||
|
src/ibustypes.h | 9 +++++++
|
||||||
|
src/tests/ibus-gi-inputcontext.py | 34 +++++++++++++++++++++++++++
|
||||||
|
9 files changed, 151 insertions(+), 5 deletions(-)
|
||||||
|
create mode 100644 src/ibuserror.c
|
||||||
|
create mode 100644 src/ibuserror.h
|
||||||
|
create mode 100755 src/tests/ibus-gi-inputcontext.py
|
||||||
|
|
||||||
|
diff --git a/bus/inputcontext.c b/bus/inputcontext.c
|
||||||
|
index bad90ec..1567c5f 100644
|
||||||
|
--- a/bus/inputcontext.c
|
||||||
|
+++ b/bus/inputcontext.c
|
||||||
|
@@ -1040,8 +1040,11 @@ _ic_get_engine (BusInputContext *context,
|
||||||
|
g_variant_new ("(v)", ibus_serializable_serialize ((IBusSerializable *)desc)));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
- g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED,
|
||||||
|
- "Input context does not have engine.");
|
||||||
|
+ g_dbus_method_invocation_return_error (
|
||||||
|
+ invocation,
|
||||||
|
+ IBUS_ERROR,
|
||||||
|
+ IBUS_ERROR_NO_ENGINE,
|
||||||
|
+ "Input context does not have engine.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/Makefile.am b/src/Makefile.am
|
||||||
|
index 632fc72..a53bd23 100644
|
||||||
|
--- a/src/Makefile.am
|
||||||
|
+++ b/src/Makefile.am
|
||||||
|
@@ -70,6 +70,7 @@ ibus_sources = \
|
||||||
|
ibusservice.c \
|
||||||
|
ibusfactory.c \
|
||||||
|
ibusengine.c \
|
||||||
|
+ ibuserror.c \
|
||||||
|
ibustext.c \
|
||||||
|
ibuskeymap.c \
|
||||||
|
ibusattribute.c \
|
||||||
|
@@ -114,6 +115,7 @@ ibus_headers = \
|
||||||
|
ibusservice.h \
|
||||||
|
ibusfactory.h \
|
||||||
|
ibusengine.h \
|
||||||
|
+ ibuserror.h \
|
||||||
|
ibustext.h \
|
||||||
|
ibuskeymap.h \
|
||||||
|
ibusattribute.h \
|
||||||
|
diff --git a/src/ibus.h b/src/ibus.h
|
||||||
|
index 8df7160..c408f3d 100644
|
||||||
|
--- a/src/ibus.h
|
||||||
|
+++ b/src/ibus.h
|
||||||
|
@@ -35,6 +35,7 @@
|
||||||
|
#include <ibusservice.h>
|
||||||
|
#include <ibusfactory.h>
|
||||||
|
#include <ibusengine.h>
|
||||||
|
+#include <ibuserror.h>
|
||||||
|
#include <ibusproperty.h>
|
||||||
|
#include <ibusproplist.h>
|
||||||
|
#include <ibuslookuptable.h>
|
||||||
|
diff --git a/src/ibuserror.c b/src/ibuserror.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..c50c164
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/ibuserror.c
|
||||||
|
@@ -0,0 +1,41 @@
|
||||||
|
+/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
|
||||||
|
+/* vim:set et sts=4: */
|
||||||
|
+/* ibus - The Input Bus
|
||||||
|
+ * Copyright (C) 2011 Peng Huang <shawn.p.huang@gmail.com>
|
||||||
|
+ *
|
||||||
|
+ * This library is free software; you can redistribute it and/or
|
||||||
|
+ * modify it under the terms of the GNU Lesser General Public
|
||||||
|
+ * License as published by the Free Software Foundation; either
|
||||||
|
+ * version 2 of the License, or (at your option) any later version.
|
||||||
|
+ *
|
||||||
|
+ * This library is distributed in the hope that it will be useful,
|
||||||
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
+ * Lesser General Public License for more details.
|
||||||
|
+ *
|
||||||
|
+ * You should have received a copy of the GNU Lesser General Public
|
||||||
|
+ * License along with this library; if not, write to the
|
||||||
|
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
+ * Boston, MA 02111-1307, USA.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include "ibuserror.h"
|
||||||
|
+
|
||||||
|
+#include <gio/gio.h>
|
||||||
|
+#include "ibustypes.h"
|
||||||
|
+
|
||||||
|
+static const GDBusErrorEntry ibus_error_entries[] =
|
||||||
|
+{
|
||||||
|
+ { IBUS_ERROR_NO_ENGINE, "org.freedesktop.IBus.Error.NoEngine" },
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+GQuark
|
||||||
|
+ibus_error_quark (void)
|
||||||
|
+{
|
||||||
|
+ static volatile gsize quark_volatile = 0;
|
||||||
|
+ g_dbus_error_register_error_domain ("ibus-error-quark",
|
||||||
|
+ &quark_volatile,
|
||||||
|
+ ibus_error_entries,
|
||||||
|
+ G_N_ELEMENTS (ibus_error_entries));
|
||||||
|
+ return (GQuark) quark_volatile;
|
||||||
|
+}
|
||||||
|
diff --git a/src/ibuserror.h b/src/ibuserror.h
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..75c64b9
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/ibuserror.h
|
||||||
|
@@ -0,0 +1,46 @@
|
||||||
|
+/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
|
||||||
|
+/* vim:set et sts=4: */
|
||||||
|
+/* ibus - The Input Bus
|
||||||
|
+ * Copyright (C) 2011 Peng Huang <shawn.p.huang@gmail.com>
|
||||||
|
+ *
|
||||||
|
+ * This library is free software; you can redistribute it and/or
|
||||||
|
+ * modify it under the terms of the GNU Lesser General Public
|
||||||
|
+ * License as published by the Free Software Foundation; either
|
||||||
|
+ * version 2 of the License, or (at your option) any later version.
|
||||||
|
+ *
|
||||||
|
+ * This library is distributed in the hope that it will be useful,
|
||||||
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
+ * Lesser General Public License for more details.
|
||||||
|
+ *
|
||||||
|
+ * You should have received a copy of the GNU Lesser General Public
|
||||||
|
+ * License along with this library; if not, write to the
|
||||||
|
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
+ * Boston, MA 02111-1307, USA.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#if !defined (__IBUS_H_INSIDE__) && !defined (IBUS_COMPILATION)
|
||||||
|
+#error "Only <ibus.h> can be included directly"
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * SECTION: ibusshare
|
||||||
|
+ * @short_description: Shared utility functions and definition.
|
||||||
|
+ * @stability: Stable
|
||||||
|
+ *
|
||||||
|
+ * This file defines some utility functions and definition
|
||||||
|
+ * which are shared among ibus component and services.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#ifndef __IBUS_ERROR_H_
|
||||||
|
+#define __IBUS_ERROR_H_
|
||||||
|
+
|
||||||
|
+#include <glib.h>
|
||||||
|
+
|
||||||
|
+G_BEGIN_DECLS
|
||||||
|
+
|
||||||
|
+#define IBUS_ERROR ibus_error_quark()
|
||||||
|
+GQuark ibus_error_quark (void);
|
||||||
|
+
|
||||||
|
+G_END_DECLS
|
||||||
|
+#endif
|
||||||
|
diff --git a/src/ibusinputcontext.c b/src/ibusinputcontext.c
|
||||||
|
index e6f97e8..78d454e 100644
|
||||||
|
--- a/src/ibusinputcontext.c
|
||||||
|
+++ b/src/ibusinputcontext.c
|
||||||
|
@@ -27,6 +27,7 @@
|
||||||
|
#include "ibusattribute.h"
|
||||||
|
#include "ibuslookuptable.h"
|
||||||
|
#include "ibusproplist.h"
|
||||||
|
+#include "ibuserror.h"
|
||||||
|
|
||||||
|
#define IBUS_INPUT_CONTEXT_GET_PRIVATE(o) \
|
||||||
|
(G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_INPUT_CONTEXT, IBusInputContextPrivate))
|
||||||
|
@@ -1164,7 +1165,7 @@ IBusEngineDesc *
|
||||||
|
ibus_input_context_get_engine (IBusInputContext *context)
|
||||||
|
{
|
||||||
|
g_assert (IBUS_IS_INPUT_CONTEXT (context));
|
||||||
|
- GVariant *result;
|
||||||
|
+ GVariant *result = NULL;
|
||||||
|
GError *error = NULL;
|
||||||
|
result = g_dbus_proxy_call_sync ((GDBusProxy *) context,
|
||||||
|
"GetEngine", /* method_name */
|
||||||
|
@@ -1174,9 +1175,17 @@ ibus_input_context_get_engine (IBusInputContext *context)
|
||||||
|
NULL, /* cancellable */
|
||||||
|
&error /* error */
|
||||||
|
);
|
||||||
|
-
|
||||||
|
if (result == NULL) {
|
||||||
|
- g_warning ("%s.GetEngine: %s", IBUS_INTERFACE_INPUT_CONTEXT, error->message);
|
||||||
|
+ if (g_error_matches (error, IBUS_ERROR, IBUS_ERROR_NO_ENGINE)) {
|
||||||
|
+ g_debug ("%s.GetEngine: %s",
|
||||||
|
+ IBUS_INTERFACE_INPUT_CONTEXT,
|
||||||
|
+ error->message);
|
||||||
|
+ }
|
||||||
|
+ else {
|
||||||
|
+ g_warning ("%s.GetEngine: %s",
|
||||||
|
+ IBUS_INTERFACE_INPUT_CONTEXT,
|
||||||
|
+ error->message);
|
||||||
|
+ }
|
||||||
|
g_error_free (error);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
diff --git a/src/ibusshare.c b/src/ibusshare.c
|
||||||
|
index 1b8ae2a..19f9f65 100644
|
||||||
|
--- a/src/ibusshare.c
|
||||||
|
+++ b/src/ibusshare.c
|
||||||
|
@@ -318,6 +318,7 @@ void
|
||||||
|
ibus_init (void)
|
||||||
|
{
|
||||||
|
g_type_init ();
|
||||||
|
+ IBUS_ERROR;
|
||||||
|
IBUS_TYPE_TEXT;
|
||||||
|
IBUS_TYPE_ATTRIBUTE;
|
||||||
|
IBUS_TYPE_ATTR_LIST;
|
||||||
|
diff --git a/src/ibustypes.h b/src/ibustypes.h
|
||||||
|
index 6a31847..8146719 100644
|
||||||
|
--- a/src/ibustypes.h
|
||||||
|
+++ b/src/ibustypes.h
|
||||||
|
@@ -177,6 +177,15 @@ typedef enum {
|
||||||
|
} IBusBusRequestNameReply;
|
||||||
|
|
||||||
|
/**
|
||||||
|
+ * IBusError:
|
||||||
|
+ * @IBUS_ERROR_NO_ENGINE:
|
||||||
|
+ * There is no engine associated with input context.
|
||||||
|
+ */
|
||||||
|
+typedef enum {
|
||||||
|
+ IBUS_ERROR_NO_ENGINE,
|
||||||
|
+} IBusError;
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
* IBusRectangle:
|
||||||
|
* @x: x coordinate.
|
||||||
|
* @y: y coordinate.
|
||||||
|
diff --git a/src/tests/ibus-gi-inputcontext.py b/src/tests/ibus-gi-inputcontext.py
|
||||||
|
new file mode 100755
|
||||||
|
index 0000000..80fb97b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/tests/ibus-gi-inputcontext.py
|
||||||
|
@@ -0,0 +1,34 @@
|
||||||
|
+#!/usr/bin/env python
|
||||||
|
+# vim:set et sts=4 sw=4:
|
||||||
|
+#
|
||||||
|
+# ibus - The Input Bus
|
||||||
|
+#
|
||||||
|
+# Copyright (c) 2011 Peng Huang <shawn.p.huang@gmail.com>
|
||||||
|
+#
|
||||||
|
+# This library is free software; you can redistribute it and/or
|
||||||
|
+# modify it under the terms of the GNU Lesser General Public
|
||||||
|
+# License as published by the Free Software Foundation; either
|
||||||
|
+# version 2 of the License, or (at your option) any later version.
|
||||||
|
+#
|
||||||
|
+# This library is distributed in the hope that it will be useful,
|
||||||
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
+# GNU Lesser General Public License for more details.
|
||||||
|
+#
|
||||||
|
+# You should have received a copy of the GNU Lesser General Public
|
||||||
|
+# License along with this program; if not, write to the
|
||||||
|
+# Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||||
|
+# Boston, MA 02111-1307 USA
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+import glib
|
||||||
|
+import gio
|
||||||
|
+from gi.repository import IBus
|
||||||
|
+IBus.init()
|
||||||
|
+main = glib.MainLoop()
|
||||||
|
+bus = IBus.Bus()
|
||||||
|
+ic = bus.create_input_context("ibus-test")
|
||||||
|
+ic.get_engine()
|
||||||
|
+ic.get_engine()
|
||||||
|
+ic.get_engine()
|
||||||
|
+ic.get_engine()
|
||||||
|
--
|
||||||
|
1.7.4.4
|
||||||
|
|
||||||
|
From aec97ac090980dfcd7eeef55c1755f6cd3f87a01 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daiki Ueno <daiki.ueno@gmail.com>
|
||||||
|
Date: Sat, 18 Jun 2011 00:03:07 -0400
|
||||||
|
Subject: [PATCH] Simplify surrounding-text initialization.
|
||||||
|
|
||||||
|
Currently the immodule tries to retrieve surrounding-text unconditionally
|
||||||
|
on focus_in and enabled. These calls could be eliminated if engine were
|
||||||
|
able to proclaim that it will need surrounding-text.
|
||||||
|
|
||||||
|
This patch extends ibus_engine_get_surrounding_text() to allow this.
|
||||||
|
Engines that need surrounding-text are expected to have:
|
||||||
|
|
||||||
|
/* Indicate we will use surrounding-text. */
|
||||||
|
ibus_engine_get_surrounding_text (engine, NULL, NULL);
|
||||||
|
|
||||||
|
in their enable() method. This would work because enable() is called before
|
||||||
|
SetCapabilities DBus call.
|
||||||
|
|
||||||
|
BUG=none
|
||||||
|
TEST=manually with ibus-m17n, with the above change.
|
||||||
|
|
||||||
|
Review URL: http://codereview.appspot.com/4613043
|
||||||
|
Patch from Daiki Ueno <daiki.ueno@gmail.com>.
|
||||||
|
---
|
||||||
|
client/gtk2/ibusimcontext.c | 23 +++++++++--------------
|
||||||
|
src/ibusengine.c | 10 ++++++----
|
||||||
|
src/ibusengine.h | 9 +++++++--
|
||||||
|
3 files changed, 22 insertions(+), 20 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
|
||||||
|
index ec764ef..a4e7a16 100644
|
||||||
|
--- a/client/gtk2/ibusimcontext.c
|
||||||
|
+++ b/client/gtk2/ibusimcontext.c
|
||||||
|
@@ -147,8 +147,7 @@ static gboolean _slave_delete_surroundin
|
||||||
|
gint offset_from_cursor,
|
||||||
|
guint nchars,
|
||||||
|
IBusIMContext *context);
|
||||||
|
-static void _request_surrounding_text (IBusIMContext *context,
|
||||||
|
- gboolean force);
|
||||||
|
+static void _request_surrounding_text (IBusIMContext *context);
|
||||||
|
static void _create_fake_input_context (void);
|
||||||
|
|
||||||
|
|
||||||
|
@@ -263,17 +262,13 @@ _process_key_event_done (GObject *o
|
||||||
|
/* emit "retrieve-surrounding" glib signal of GtkIMContext, if
|
||||||
|
* context->caps has IBUS_CAP_SURROUNDING_TEXT and the current IBus
|
||||||
|
* engine needs surrounding-text.
|
||||||
|
- *
|
||||||
|
- * if "force" is TRUE, emit the signal regardless of whether the
|
||||||
|
- * engine needs surrounding-text.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
-_request_surrounding_text (IBusIMContext *context, gboolean force)
|
||||||
|
+_request_surrounding_text (IBusIMContext *context)
|
||||||
|
{
|
||||||
|
- if (context->enable &&
|
||||||
|
+ if (context && context->enable &&
|
||||||
|
(context->caps & IBUS_CAP_SURROUNDING_TEXT) != 0 &&
|
||||||
|
- (force ||
|
||||||
|
- ibus_input_context_needs_surrounding_text (context->ibuscontext))) {
|
||||||
|
+ ibus_input_context_needs_surrounding_text (context->ibuscontext)) {
|
||||||
|
gboolean return_value;
|
||||||
|
IDEBUG ("requesting surrounding text");
|
||||||
|
g_signal_emit (context, _signal_retrieve_surrounding_id, 0,
|
||||||
|
@@ -368,9 +363,8 @@ _key_snooper_cb (GtkWidget *widget,
|
||||||
|
|
||||||
|
} while (0);
|
||||||
|
|
||||||
|
- _request_surrounding_text (ibusimcontext, FALSE);
|
||||||
|
-
|
||||||
|
if (ibusimcontext != NULL) {
|
||||||
|
+ _request_surrounding_text (ibusimcontext);
|
||||||
|
ibusimcontext->time = event->time;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -680,7 +674,7 @@ ibus_im_context_filter_keypress (GtkIMCo
|
||||||
|
if (ibusimcontext->client_window == NULL && event->window != NULL)
|
||||||
|
gtk_im_context_set_client_window ((GtkIMContext *)ibusimcontext, event->window);
|
||||||
|
|
||||||
|
- _request_surrounding_text (ibusimcontext, FALSE);
|
||||||
|
+ _request_surrounding_text (ibusimcontext);
|
||||||
|
|
||||||
|
if (ibusimcontext != NULL) {
|
||||||
|
ibusimcontext->time = event->time;
|
||||||
|
@@ -763,7 +757,7 @@ ibus_im_context_focus_in (GtkIMContext *
|
||||||
|
|
||||||
|
/* retrieve the initial surrounding-text (regardless of whether
|
||||||
|
* the current IBus engine needs surrounding-text) */
|
||||||
|
- _request_surrounding_text (ibusimcontext, TRUE);
|
||||||
|
+ _request_surrounding_text (ibusimcontext);
|
||||||
|
|
||||||
|
g_object_add_weak_pointer ((GObject *) context,
|
||||||
|
(gpointer *) &_focus_im_context);
|
||||||
|
@@ -1000,7 +996,7 @@ _ibus_context_commit_text_cb (IBusInputC
|
||||||
|
|
||||||
|
g_signal_emit (ibusimcontext, _signal_commit_id, 0, text->text);
|
||||||
|
|
||||||
|
- _request_surrounding_text (ibusimcontext, FALSE);
|
||||||
|
+ _request_surrounding_text (ibusimcontext);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
@@ -1296,7 +1292,7 @@ _ibus_context_show_preedit_text_cb (IBus
|
||||||
|
g_signal_emit (ibusimcontext, _signal_preedit_start_id, 0);
|
||||||
|
g_signal_emit (ibusimcontext, _signal_preedit_changed_id, 0);
|
||||||
|
|
||||||
|
- _request_surrounding_text (ibusimcontext, FALSE);
|
||||||
|
+ _request_surrounding_text (ibusimcontext);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
@@ -1323,7 +1319,7 @@ _ibus_context_enabled_cb (IBusInputConte
|
||||||
|
|
||||||
|
/* retrieve the initial surrounding-text (regardless of whether
|
||||||
|
* the current IBus engine needs surrounding-text) */
|
||||||
|
- _request_surrounding_text (ibusimcontext, TRUE);
|
||||||
|
+ _request_surrounding_text (ibusimcontext);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
diff --git a/src/ibusengine.c b/src/ibusengine.c
|
||||||
|
index f545bef..620d07f 100644
|
||||||
|
--- a/src/ibusengine.c
|
||||||
|
+++ b/src/ibusengine.c
|
||||||
|
@@ -1382,13 +1382,15 @@ ibus_engine_get_surrounding_text (IBusEngine *engine,
|
||||||
|
IBusEnginePrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (IBUS_IS_ENGINE (engine));
|
||||||
|
- g_return_if_fail (text != NULL);
|
||||||
|
- g_return_if_fail (cursor_pos != NULL);
|
||||||
|
+ g_return_if_fail ((text != NULL && cursor_pos != NULL) ||
|
||||||
|
+ (text == NULL && cursor_pos == NULL));
|
||||||
|
|
||||||
|
priv = IBUS_ENGINE_GET_PRIVATE (engine);
|
||||||
|
|
||||||
|
- *text = g_object_ref (priv->surrounding_text);
|
||||||
|
- *cursor_pos = priv->surrounding_cursor_pos;
|
||||||
|
+ if (text && cursor_pos) {
|
||||||
|
+ *text = g_object_ref (priv->surrounding_text);
|
||||||
|
+ *cursor_pos = priv->surrounding_cursor_pos;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* tell the client that this engine will utilize surrounding-text
|
||||||
|
* feature, which causes periodical update. Note that the client
|
||||||
|
diff --git a/src/ibusengine.h b/src/ibusengine.h
|
||||||
|
index 29b8f1d..6da342a 100644
|
||||||
|
--- a/src/ibusengine.h
|
||||||
|
+++ b/src/ibusengine.h
|
||||||
|
@@ -407,11 +407,16 @@ void ibus_engine_delete_surrounding_text(IBusEngine *engine,
|
||||||
|
/**
|
||||||
|
* ibus_engine_get_surrounding_text:
|
||||||
|
* @engine: An IBusEngine.
|
||||||
|
- * @text: Location to store surrounding text.
|
||||||
|
- * @cursor_pos: Cursor position in characters in @text.
|
||||||
|
+ * @text: (allow-none): Location to store surrounding text.
|
||||||
|
+ * @cursor_pos: (allow-none): Cursor position in characters in @text.
|
||||||
|
*
|
||||||
|
* Get surrounding text.
|
||||||
|
*
|
||||||
|
+ * It is also used to tell the input-context that the engine will
|
||||||
|
+ * utilize surrounding-text. In that case, it must be called in
|
||||||
|
+ * #IBusEngine::enable handler, with both @text and @cursor set to
|
||||||
|
+ * %NULL.
|
||||||
|
+ *
|
||||||
|
* @see_also #IBusEngine::set-surrounding-text
|
||||||
|
*/
|
||||||
|
void ibus_engine_get_surrounding_text(IBusEngine *engine,
|
||||||
|
--
|
||||||
|
1.7.4.4
|
||||||
|
|
||||||
|
874
ibus-xx-bridge-hotkey.patch
Normal file
874
ibus-xx-bridge-hotkey.patch
Normal file
@ -0,0 +1,874 @@
|
|||||||
|
From a3a7b364410511b3a17f2b1566ba4c4c4f0de2cf Mon Sep 17 00:00:00 2001
|
||||||
|
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||||
|
Date: Tue, 21 Jun 2011 17:00:54 +0900
|
||||||
|
Subject: [PATCH] Add a bridge hotkey which use prev-next engines instead
|
||||||
|
of on-off.
|
||||||
|
|
||||||
|
---
|
||||||
|
bus/Makefile.am | 20 ++--
|
||||||
|
bus/ibusimpl.c | 244 ++++++++++++++++++++++++++++----------
|
||||||
|
bus/registry.c | 35 ++++++
|
||||||
|
configure.ac | 31 +++++
|
||||||
|
data/Makefile.am | 6 +-
|
||||||
|
data/ibus.schemas.in | 286 --------------------------------------------
|
||||||
|
data/ibus.schemas.in.in | 286 ++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
ibus/_config.py.in | 6 +
|
||||||
|
ibus/inputcontext.py | 4 +
|
||||||
|
src/Makefile.am | 1 +
|
||||||
|
src/ibusbus.c | 6 +
|
||||||
|
src/ibusbus.h | 9 ++
|
||||||
|
src/ibusenginedesc.c | 4 +
|
||||||
|
src/ibushotkey.c | 11 ++
|
||||||
|
src/ibushotkey.h | 11 ++
|
||||||
|
ui/gtk/panel.py | 60 +++++++++-
|
||||||
|
xkb/Makefile.am | 2 +
|
||||||
|
xkb/ibus-engine-xkb-main.c | 8 ++
|
||||||
|
xkb/xkbxml.c | 8 +-
|
||||||
|
19 files changed, 677 insertions(+), 361 deletions(-)
|
||||||
|
delete mode 100644 data/ibus.schemas.in
|
||||||
|
create mode 100644 data/ibus.schemas.in.in
|
||||||
|
|
||||||
|
diff --git a/bus/Makefile.am b/bus/Makefile.am
|
||||||
|
index 074b456..0efaa1b 100644
|
||||||
|
--- a/bus/Makefile.am
|
||||||
|
+++ b/bus/Makefile.am
|
||||||
|
@@ -29,15 +29,17 @@ INCLUDES = \
|
||||||
|
-I$(top_builddir)/src \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
-AM_CFLAGS = \
|
||||||
|
- @GLIB2_CFLAGS@ \
|
||||||
|
- @GIO2_CFLAGS@ \
|
||||||
|
- @GTHREAD2_CFLAGS@ \
|
||||||
|
- -DG_LOG_DOMAIN=\"IBUS\" \
|
||||||
|
- -DPKGDATADIR=\"$(pkgdatadir)\" \
|
||||||
|
- -DLIBEXECDIR=\"$(libexecdir)\" \
|
||||||
|
- -DBINDIR=\"@bindir@\" \
|
||||||
|
- $(INCLUDES) \
|
||||||
|
+AM_CFLAGS = \
|
||||||
|
+ @GLIB2_CFLAGS@ \
|
||||||
|
+ @GIO2_CFLAGS@ \
|
||||||
|
+ @GTHREAD2_CFLAGS@ \
|
||||||
|
+ -DG_LOG_DOMAIN=\"IBUS\" \
|
||||||
|
+ -DPKGDATADIR=\"$(pkgdatadir)\" \
|
||||||
|
+ -DLIBEXECDIR=\"$(libexecdir)\" \
|
||||||
|
+ -DBINDIR=\"@bindir@\" \
|
||||||
|
+ -DUSE_BRIDGE_HOTKEY=$(USE_BRIDGE_HOTKEY) \
|
||||||
|
+ -DDEFAULT_BRIDGE_ENGINE_NAME=\"$(DEFAULT_BRIDGE_ENGINE_NAME)\" \
|
||||||
|
+ $(INCLUDES) \
|
||||||
|
$(NULL)
|
||||||
|
AM_LDADD = \
|
||||||
|
@GOBJECT2_LIBS@ \
|
||||||
|
diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
|
||||||
|
index 38d6d11..3b2d539 100644
|
||||||
|
--- a/bus/ibusimpl.c
|
||||||
|
+++ b/bus/ibusimpl.c
|
||||||
|
@@ -20,6 +20,10 @@
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
+#ifdef HAVE_CONFIG_H
|
||||||
|
+#include <config.h>
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
@@ -79,6 +83,8 @@ struct _BusIBusImpl {
|
||||||
|
/* engine-specific hotkeys */
|
||||||
|
IBusHotkeyProfile *engines_hotkey_profile;
|
||||||
|
GHashTable *hotkey_to_engines_map;
|
||||||
|
+
|
||||||
|
+ IBusEngineDesc *prev_hotkey_engine;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _BusIBusImplClass {
|
||||||
|
@@ -285,6 +291,30 @@ _panel_destroy_cb (BusPanelProxy *panel,
|
||||||
|
g_object_unref (panel);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static IBusEngineDesc *
|
||||||
|
+_find_engine_desc_by_name (BusIBusImpl *ibus,
|
||||||
|
+ const gchar *engine_name)
|
||||||
|
+{
|
||||||
|
+ IBusEngineDesc *desc = NULL;
|
||||||
|
+ GList *p;
|
||||||
|
+
|
||||||
|
+ /* find engine in registered engine list */
|
||||||
|
+ for (p = ibus->register_engine_list; p != NULL; p = p->next) {
|
||||||
|
+ desc = (IBusEngineDesc *) p->data;
|
||||||
|
+ if (g_strcmp0 (ibus_engine_desc_get_name (desc), engine_name) == 0)
|
||||||
|
+ return desc;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* find engine in preload engine list */
|
||||||
|
+ for (p = ibus->engine_list; p != NULL; p = p->next) {
|
||||||
|
+ desc = (IBusEngineDesc *) p->data;
|
||||||
|
+ if (g_strcmp0 (ibus_engine_desc_get_name (desc), engine_name) == 0)
|
||||||
|
+ return desc;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return NULL;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
_config_set_value_done (GObject *object,
|
||||||
|
GAsyncResult *res,
|
||||||
|
@@ -475,8 +505,17 @@ _set_preload_engines (BusIBusImpl *ibus,
|
||||||
|
g_variant_unref (value);
|
||||||
|
}
|
||||||
|
|
||||||
|
- g_list_foreach (engine_list, (GFunc) g_object_ref, NULL);
|
||||||
|
ibus->engine_list = engine_list;
|
||||||
|
+#if USE_BRIDGE_HOTKEY
|
||||||
|
+ if (_find_engine_desc_by_name (ibus, DEFAULT_BRIDGE_ENGINE_NAME) == NULL) {
|
||||||
|
+ IBusEngineDesc *engine = bus_registry_find_engine_by_name (ibus->registry,
|
||||||
|
+ DEFAULT_BRIDGE_ENGINE_NAME);
|
||||||
|
+ g_assert (engine != NULL);
|
||||||
|
+ engine_list = g_list_append (engine_list, engine);
|
||||||
|
+ ibus->engine_list = engine_list;
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
+ g_list_foreach (engine_list, (GFunc) g_object_ref, NULL);
|
||||||
|
|
||||||
|
if (ibus->engine_list) {
|
||||||
|
BusComponent *component = bus_component_from_engine_desc ((IBusEngineDesc *) ibus->engine_list->data);
|
||||||
|
@@ -1182,28 +1221,110 @@ _ibus_get_address (BusIBusImpl
|
||||||
|
g_variant_new ("(s)", bus_server_get_address ()));
|
||||||
|
}
|
||||||
|
|
||||||
|
-static IBusEngineDesc *
|
||||||
|
-_find_engine_desc_by_name (BusIBusImpl *ibus,
|
||||||
|
- const gchar *engine_name)
|
||||||
|
-{
|
||||||
|
- IBusEngineDesc *desc = NULL;
|
||||||
|
- GList *p;
|
||||||
|
+/**
|
||||||
|
+ * _foreach_remove_engine_hotkey:
|
||||||
|
+ *
|
||||||
|
+ * Remove the engine-specific hot key of the engine, and update ibus->engines_hotkey_profile.
|
||||||
|
+ */
|
||||||
|
+gboolean
|
||||||
|
+_foreach_remove_engine_hotkey (gpointer key,
|
||||||
|
+ gpointer value,
|
||||||
|
+ gpointer data)
|
||||||
|
+{
|
||||||
|
+ GQuark event = GPOINTER_TO_UINT (value);
|
||||||
|
+ struct _impl_and_desc {
|
||||||
|
+ BusIBusImpl *ibus;
|
||||||
|
+ IBusEngineDesc *desc;
|
||||||
|
+ } *id = (struct _impl_and_desc *) data;
|
||||||
|
+ BusIBusImpl *ibus = id->ibus;
|
||||||
|
+ IBusEngineDesc *desc = id->desc;
|
||||||
|
+ GList *engine_list;
|
||||||
|
|
||||||
|
- /* find engine in registered engine list */
|
||||||
|
- for (p = ibus->register_engine_list; p != NULL; p = p->next) {
|
||||||
|
- desc = (IBusEngineDesc *) p->data;
|
||||||
|
- if (g_strcmp0 (ibus_engine_desc_get_name (desc), engine_name) == 0)
|
||||||
|
- return desc;
|
||||||
|
+ g_assert (ibus != NULL);
|
||||||
|
+ g_assert (desc != NULL);
|
||||||
|
+
|
||||||
|
+ if (event == 0) {
|
||||||
|
+ return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* find engine in preload engine list */
|
||||||
|
- for (p = ibus->engine_list; p != NULL; p = p->next) {
|
||||||
|
- desc = (IBusEngineDesc *) p->data;
|
||||||
|
- if (g_strcmp0 (ibus_engine_desc_get_name (desc), engine_name) == 0)
|
||||||
|
- return desc;
|
||||||
|
+ engine_list = g_hash_table_lookup (ibus->hotkey_to_engines_map,
|
||||||
|
+ GUINT_TO_POINTER (event));
|
||||||
|
+
|
||||||
|
+ /* As we will rebuild the engines hotkey map whenever an engine was
|
||||||
|
+ * added or removed, we don't need to hold a reference of the engine
|
||||||
|
+ * here. */
|
||||||
|
+ if (engine_list && g_list_find (engine_list, desc) != NULL) {
|
||||||
|
+ engine_list = g_list_remove (engine_list, desc);
|
||||||
|
}
|
||||||
|
|
||||||
|
- return NULL;
|
||||||
|
+ /* We need to steal the value before adding it back, otherwise it will
|
||||||
|
+ * be destroyed. */
|
||||||
|
+ g_hash_table_steal (ibus->hotkey_to_engines_map, GUINT_TO_POINTER (event));
|
||||||
|
+
|
||||||
|
+ if (engine_list != NULL) {
|
||||||
|
+ g_hash_table_insert (ibus->hotkey_to_engines_map,
|
||||||
|
+ GUINT_TO_POINTER (event), engine_list);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return FALSE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * _add_engine_hotkey_with_hotkeys:
|
||||||
|
+ *
|
||||||
|
+ * Check the engine-specific hot key of the engine, and update ibus->engines_hotkey_profile.
|
||||||
|
+ */
|
||||||
|
+static void
|
||||||
|
+_add_engine_hotkey_with_hotkeys (IBusEngineDesc *engine,
|
||||||
|
+ BusIBusImpl *ibus,
|
||||||
|
+ const gchar *hotkeys)
|
||||||
|
+{
|
||||||
|
+ gchar **hotkey_list;
|
||||||
|
+ gchar **p;
|
||||||
|
+ gchar *hotkey;
|
||||||
|
+ GList *engine_list;
|
||||||
|
+
|
||||||
|
+ GQuark event;
|
||||||
|
+ guint keyval;
|
||||||
|
+ guint modifiers;
|
||||||
|
+
|
||||||
|
+ g_assert (engine != NULL);
|
||||||
|
+ g_assert (hotkeys && *hotkeys);
|
||||||
|
+
|
||||||
|
+ hotkey_list = g_strsplit_set (hotkeys, ";,", 0);
|
||||||
|
+
|
||||||
|
+ for (p = hotkey_list; p && *p; ++p) {
|
||||||
|
+ hotkey = g_strstrip (*p);
|
||||||
|
+ if (!*hotkey || !ibus_key_event_from_string (hotkey, &keyval, &modifiers)) {
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* If the hotkey already exists, we won't need to add it again. */
|
||||||
|
+ event = ibus_hotkey_profile_lookup_hotkey (ibus->engines_hotkey_profile,
|
||||||
|
+ keyval, modifiers);
|
||||||
|
+ if (event == 0) {
|
||||||
|
+ event = g_quark_from_string (hotkey);
|
||||||
|
+ ibus_hotkey_profile_add_hotkey (ibus->engines_hotkey_profile,
|
||||||
|
+ keyval, modifiers, event);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ engine_list = g_hash_table_lookup (ibus->hotkey_to_engines_map,
|
||||||
|
+ GUINT_TO_POINTER (event));
|
||||||
|
+
|
||||||
|
+ /* As we will rebuild the engines hotkey map whenever an engine was
|
||||||
|
+ * added or removed, we don't need to hold a reference of the engine
|
||||||
|
+ * here. */
|
||||||
|
+ engine_list = g_list_append (engine_list, engine);
|
||||||
|
+
|
||||||
|
+ /* We need to steal the value before adding it back, otherwise it will
|
||||||
|
+ * be destroyed. */
|
||||||
|
+ g_hash_table_steal (ibus->hotkey_to_engines_map, GUINT_TO_POINTER (event));
|
||||||
|
+
|
||||||
|
+ g_hash_table_insert (ibus->hotkey_to_engines_map,
|
||||||
|
+ GUINT_TO_POINTER (event), engine_list);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ g_strfreev (hotkey_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -1216,7 +1337,39 @@ _context_request_engine_cb (BusInputCont
|
||||||
|
const gchar *engine_name,
|
||||||
|
BusIBusImpl *ibus)
|
||||||
|
{
|
||||||
|
- return bus_ibus_impl_get_engine_desc (ibus, engine_name);
|
||||||
|
+ IBusEngineDesc *desc = bus_ibus_impl_get_engine_desc (ibus, engine_name);
|
||||||
|
+ struct _impl_and_desc {
|
||||||
|
+ BusIBusImpl *ibus;
|
||||||
|
+ IBusEngineDesc *desc;
|
||||||
|
+ } id = {ibus, desc};
|
||||||
|
+
|
||||||
|
+#if USE_BRIDGE_HOTKEY
|
||||||
|
+ IBusEngineDesc *current_desc = NULL;
|
||||||
|
+ if (context) {
|
||||||
|
+ BusEngineProxy *engine = bus_input_context_get_engine (context);
|
||||||
|
+ if (engine != NULL) {
|
||||||
|
+ current_desc = bus_engine_proxy_get_desc (engine);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if (current_desc) {
|
||||||
|
+ ibus->prev_hotkey_engine = current_desc;
|
||||||
|
+ }
|
||||||
|
+ if (current_desc != NULL && desc != NULL &&
|
||||||
|
+ g_strcmp0 (ibus_engine_desc_get_name (current_desc),
|
||||||
|
+ ibus_engine_desc_get_name (desc)) != 0 &&
|
||||||
|
+ g_strcmp0 (ibus_engine_desc_get_name (desc),
|
||||||
|
+ DEFAULT_BRIDGE_ENGINE_NAME) == 0) {
|
||||||
|
+ const gchar *hotkeys = ibus_engine_desc_get_hotkeys (current_desc);
|
||||||
|
+ if (!hotkeys || !*hotkeys) {
|
||||||
|
+ hotkeys = "Control+space";
|
||||||
|
+ }
|
||||||
|
+ ibus_hotkey_profile_foreach_hotkey (ibus->engines_hotkey_profile,
|
||||||
|
+ _foreach_remove_engine_hotkey,
|
||||||
|
+ &id);
|
||||||
|
+ _add_engine_hotkey_with_hotkeys (desc, ibus, hotkeys);
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
+ return desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -2357,6 +2510,11 @@ bus_ibus_impl_filter_keyboard_shortcuts
|
||||||
|
* the same hotkey, then we should switch to the next engine with the
|
||||||
|
* same hotkey in the list. Otherwise, we just switch to the first
|
||||||
|
* engine in the list. */
|
||||||
|
+#if USE_BRIDGE_HOTKEY
|
||||||
|
+ if (ibus->prev_hotkey_engine) {
|
||||||
|
+ new_engine_desc = ibus->prev_hotkey_engine;
|
||||||
|
+ }
|
||||||
|
+#else
|
||||||
|
GList *p = engine_list;
|
||||||
|
for (; p->next != NULL; p = p->next) {
|
||||||
|
if (current_engine_desc == (IBusEngineDesc *) p->data) {
|
||||||
|
@@ -2364,9 +2522,14 @@ bus_ibus_impl_filter_keyboard_shortcuts
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
if (current_engine_desc != new_engine_desc) {
|
||||||
|
+ ibus->prev_hotkey_engine = current_engine_desc;
|
||||||
|
bus_ibus_impl_set_context_engine_from_desc (ibus, context, new_engine_desc);
|
||||||
|
+ } else {
|
||||||
|
+ g_warning ("The engine %s is registered twice in hotkeys",
|
||||||
|
+ ibus_engine_desc_get_name (current_engine_desc));
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
@@ -2470,14 +2633,6 @@ static void
|
||||||
|
_add_engine_hotkey (IBusEngineDesc *engine, BusIBusImpl *ibus)
|
||||||
|
{
|
||||||
|
const gchar *hotkeys;
|
||||||
|
- gchar **hotkey_list;
|
||||||
|
- gchar **p;
|
||||||
|
- gchar *hotkey;
|
||||||
|
- GList *engine_list;
|
||||||
|
-
|
||||||
|
- GQuark event;
|
||||||
|
- guint keyval;
|
||||||
|
- guint modifiers;
|
||||||
|
|
||||||
|
if (!engine) {
|
||||||
|
return;
|
||||||
|
@@ -2489,40 +2644,7 @@ _add_engine_hotkey (IBusEngineDesc *engi
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
- hotkey_list = g_strsplit_set (hotkeys, ";,", 0);
|
||||||
|
-
|
||||||
|
- for (p = hotkey_list; p && *p; ++p) {
|
||||||
|
- hotkey = g_strstrip (*p);
|
||||||
|
- if (!*hotkey || !ibus_key_event_from_string (hotkey, &keyval, &modifiers)) {
|
||||||
|
- continue;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /* If the hotkey already exists, we won't need to add it again. */
|
||||||
|
- event = ibus_hotkey_profile_lookup_hotkey (ibus->engines_hotkey_profile,
|
||||||
|
- keyval, modifiers);
|
||||||
|
- if (event == 0) {
|
||||||
|
- event = g_quark_from_string (hotkey);
|
||||||
|
- ibus_hotkey_profile_add_hotkey (ibus->engines_hotkey_profile,
|
||||||
|
- keyval, modifiers, event);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- engine_list = g_hash_table_lookup (ibus->hotkey_to_engines_map,
|
||||||
|
- GUINT_TO_POINTER (event));
|
||||||
|
-
|
||||||
|
- /* As we will rebuild the engines hotkey map whenever an engine was
|
||||||
|
- * added or removed, we don't need to hold a reference of the engine
|
||||||
|
- * here. */
|
||||||
|
- engine_list = g_list_append (engine_list, engine);
|
||||||
|
-
|
||||||
|
- /* We need to steal the value before adding it back, otherwise it will
|
||||||
|
- * be destroyed. */
|
||||||
|
- g_hash_table_steal (ibus->hotkey_to_engines_map, GUINT_TO_POINTER (event));
|
||||||
|
-
|
||||||
|
- g_hash_table_insert (ibus->hotkey_to_engines_map,
|
||||||
|
- GUINT_TO_POINTER (event), engine_list);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- g_strfreev (hotkey_list);
|
||||||
|
+ _add_engine_hotkey_with_hotkeys (engine, ibus, hotkeys);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
diff --git a/bus/registry.c b/bus/registry.c
|
||||||
|
index bc6680d..f47f727 100644
|
||||||
|
--- a/bus/registry.c
|
||||||
|
+++ b/bus/registry.c
|
||||||
|
@@ -19,6 +19,11 @@
|
||||||
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
+
|
||||||
|
+#ifdef HAVE_CONFIG_H
|
||||||
|
+#include <config.h>
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#include "registry.h"
|
||||||
|
#include <glib/gstdio.h>
|
||||||
|
#include <gio/gio.h>
|
||||||
|
@@ -101,6 +106,9 @@ bus_registry_init (BusRegistry *registry)
|
||||||
|
registry->observed_paths = NULL;
|
||||||
|
registry->components = NULL;
|
||||||
|
registry->engine_table = g_hash_table_new (g_str_hash, g_str_equal);
|
||||||
|
+#if USE_BRIDGE_HOTKEY
|
||||||
|
+ gboolean has_default_engine = FALSE;
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#ifdef G_THREADS_ENABLED
|
||||||
|
/* If glib supports thread, we'll create a thread to monitor changes in IME
|
||||||
|
@@ -145,12 +153,39 @@ bus_registry_init (BusRegistry *registry)
|
||||||
|
GList *p1;
|
||||||
|
for (p1 = engines; p1 != NULL; p1 = p1->next) {
|
||||||
|
IBusEngineDesc *desc = (IBusEngineDesc *) p1->data;
|
||||||
|
+#if USE_BRIDGE_HOTKEY
|
||||||
|
+ if (g_strcmp0 (ibus_engine_desc_get_name (desc),
|
||||||
|
+ DEFAULT_BRIDGE_ENGINE_NAME) == 0) {
|
||||||
|
+ has_default_engine = TRUE;
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
g_hash_table_insert (registry->engine_table,
|
||||||
|
(gpointer) ibus_engine_desc_get_name (desc),
|
||||||
|
desc);
|
||||||
|
}
|
||||||
|
g_list_free (engines);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+#if USE_BRIDGE_HOTKEY
|
||||||
|
+ if (has_default_engine == FALSE) {
|
||||||
|
+ bus_registry_remove_all (registry);
|
||||||
|
+ bus_registry_load (registry);
|
||||||
|
+ bus_registry_save_cache (registry);
|
||||||
|
+
|
||||||
|
+ for (p = registry->components; p != NULL; p = p->next) {
|
||||||
|
+ BusComponent *comp = (BusComponent *) p->data;
|
||||||
|
+ GList *engines = bus_component_get_engines (comp);
|
||||||
|
+ GList *p1;
|
||||||
|
+ for (p1 = engines; p1 != NULL; p1 = p1->next) {
|
||||||
|
+ IBusEngineDesc *desc = (IBusEngineDesc *) p1->data;
|
||||||
|
+ g_hash_table_insert (registry->engine_table,
|
||||||
|
+ (gpointer) ibus_engine_desc_get_name (desc),
|
||||||
|
+ desc);
|
||||||
|
+ }
|
||||||
|
+ g_list_free (engines);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 85e5e30..a6974d4 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -438,6 +438,34 @@ else
|
||||||
|
enable_surrounding_text="no (disabled, use --enable-surrounding-text to enable)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
+# option for bridge hotkey
|
||||||
|
+AC_ARG_ENABLE(bridge-hotkey,
|
||||||
|
+ AS_HELP_STRING([--enable-bridge-hotkey],
|
||||||
|
+ [Enable bridge hotkey instead of ON/OFF hotkey]),
|
||||||
|
+ [enable_bridge_hotkey=$enableval],
|
||||||
|
+ [enable_bridge_hotkey=no]
|
||||||
|
+)
|
||||||
|
+
|
||||||
|
+if test x"$enable_bridge_hotkey" = x"yes"; then
|
||||||
|
+ USE_BRIDGE_HOTKEY=1
|
||||||
|
+ TRIGGER_HOTKEYS=""
|
||||||
|
+else
|
||||||
|
+ USE_BRIDGE_HOTKEY=0
|
||||||
|
+ TRIGGER_HOTKEYS="Control+space,Zenkaku_Hankaku,Alt+Kanji,Alt+grave,Hangul,Alt+Release+Alt_R"
|
||||||
|
+ enable_bridge_hotkey="no (disabled, use --enable-bridge-hotkey to enable)"
|
||||||
|
+fi
|
||||||
|
+AC_SUBST(USE_BRIDGE_HOTKEY)
|
||||||
|
+AC_SUBST(TRIGGER_HOTKEYS)
|
||||||
|
+
|
||||||
|
+# define default bridge engine name
|
||||||
|
+AC_ARG_WITH(bridge-engine,
|
||||||
|
+ AS_HELP_STRING([--with-bridge-engine[=bridge_engine_name]],
|
||||||
|
+ [Set bridge engine name in IM bridge hotkey. (default: xkb:layout:default)]),
|
||||||
|
+ [DEFAULT_BRIDGE_ENGINE_NAME=$with_bridge_engine],
|
||||||
|
+ [DEFAULT_BRIDGE_ENGINE_NAME="xkb:layout:default"]
|
||||||
|
+)
|
||||||
|
+AC_SUBST(DEFAULT_BRIDGE_ENGINE_NAME)
|
||||||
|
+
|
||||||
|
# check iso-codes
|
||||||
|
PKG_CHECK_MODULES(ISOCODES, [
|
||||||
|
iso-codes
|
||||||
|
@@ -464,6 +492,7 @@ bus/Makefile
|
||||||
|
util/Makefile
|
||||||
|
util/IMdkit/Makefile
|
||||||
|
data/Makefile
|
||||||
|
+data/ibus.schemas.in
|
||||||
|
data/icons/Makefile
|
||||||
|
data/keymaps/Makefile
|
||||||
|
docs/Makefile
|
||||||
|
@@ -512,5 +541,7 @@ Build options:
|
||||||
|
No snooper regexes "$NO_SNOOPER_APPS"
|
||||||
|
Panel icon "$IBUS_ICON_KEYBOARD"
|
||||||
|
Enable surrounding-text $enable_surrounding_text
|
||||||
|
+ Enable bridge hotkey $enable_bridge_hotkey
|
||||||
|
+ Default bridge engine $DEFAULT_BRIDGE_ENGINE_NAME
|
||||||
|
])
|
||||||
|
|
||||||
|
diff --git a/data/Makefile.am b/data/Makefile.am
|
||||||
|
index ba9f4bb..a909e5b 100644
|
||||||
|
--- a/data/Makefile.am
|
||||||
|
+++ b/data/Makefile.am
|
||||||
|
@@ -26,7 +26,8 @@ SUBDIRS = \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
schemasdir = $(GCONF_SCHEMA_FILE_DIR)
|
||||||
|
-schemas_in_files = ibus.schemas.in
|
||||||
|
+schemas_in_in_files = ibus.schemas.in.in
|
||||||
|
+schemas_in_files = $(schemas_in_in_files:.schemas.in.in=.schemas.in)
|
||||||
|
schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
|
||||||
|
@INTLTOOL_SCHEMAS_RULE@
|
||||||
|
|
||||||
|
@@ -41,11 +42,12 @@ if GCONF_SCHEMAS_INSTALL
|
||||||
|
endif
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
- $(schemas_in_files) \
|
||||||
|
+ $(schemas_in_in_files) \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
DISTCLEANFILES = \
|
||||||
|
$(schemas_DATA) \
|
||||||
|
+ $(schemas_in_files) \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
-include $(top_srcdir)/git.mk
|
||||||
|
diff --git a/data/ibus.schemas.in b/data/ibus.schemas.in.in
|
||||||
|
index 7ca4899..42d9297
|
||||||
|
--- a/data/ibus.schemas.in
|
||||||
|
+++ b/data/ibus.schemas.in.in
|
||||||
|
@@ -31,7 +31,7 @@
|
||||||
|
<owner>ibus</owner>
|
||||||
|
<type>list</type>
|
||||||
|
<list_type>string</list_type>
|
||||||
|
- <default>[Control+space,Zenkaku_Hankaku,Alt+Kanji,Alt+grave,Hangul,Alt+Release+Alt_R]</default>
|
||||||
|
+ <default>[@TRIGGER_HOTKEYS@]</default>
|
||||||
|
<locale name="C">
|
||||||
|
<short>Trigger shortcut keys</short>
|
||||||
|
<long>The shortcut keys for turning input method on or off</long>
|
||||||
|
diff --git a/ibus/_config.py.in b/ibus/_config.py.in
|
||||||
|
index a830136..4c3c980 100644
|
||||||
|
--- a/ibus/_config.py.in
|
||||||
|
+++ b/ibus/_config.py.in
|
||||||
|
@@ -25,6 +25,8 @@ __all__ = (
|
||||||
|
"get_copyright",
|
||||||
|
"get_license",
|
||||||
|
"get_ICON_KEYBOARD",
|
||||||
|
+ "use_bridge_hotkey",
|
||||||
|
+ "DEFAULT_BRIDGE_ENGINE_NAME",
|
||||||
|
"ISOCODES_PREFIX",
|
||||||
|
"_"
|
||||||
|
)
|
||||||
|
@@ -51,4 +53,8 @@ def get_ICON_KEYBOARD():
|
||||||
|
icon = 'ibus-keyboard'
|
||||||
|
return icon
|
||||||
|
|
||||||
|
+def use_bridge_hotkey():
|
||||||
|
+ return True if @USE_BRIDGE_HOTKEY@ == 1 else False
|
||||||
|
+
|
||||||
|
+DEFAULT_BRIDGE_ENGINE_NAME='@DEFAULT_BRIDGE_ENGINE_NAME@'
|
||||||
|
ISOCODES_PREFIX='@ISOCODES_PREFIX@'
|
||||||
|
diff --git a/ibus/inputcontext.py b/ibus/inputcontext.py
|
||||||
|
index ceeb56d..2694fa3 100644
|
||||||
|
--- a/ibus/inputcontext.py
|
||||||
|
+++ b/ibus/inputcontext.py
|
||||||
|
@@ -28,6 +28,7 @@ import sys
|
||||||
|
import gobject
|
||||||
|
import dbus
|
||||||
|
import dbus.lowlevel
|
||||||
|
+import _config
|
||||||
|
import object
|
||||||
|
import common
|
||||||
|
import serializable
|
||||||
|
@@ -282,6 +283,9 @@ class InputContext(object.Object):
|
||||||
|
def set_engine(self, engine):
|
||||||
|
return self.__context.SetEngine(engine.name)
|
||||||
|
|
||||||
|
+ def set_bridge_engine(self):
|
||||||
|
+ return self.__context.SetEngine(_config.DEFAULT_BRIDGE_ENGINE_NAME)
|
||||||
|
+
|
||||||
|
def introspect(self):
|
||||||
|
return self.__context.Introspect()
|
||||||
|
|
||||||
|
diff --git a/src/Makefile.am b/src/Makefile.am
|
||||||
|
index 6454522..443b0db 100644
|
||||||
|
--- a/src/Makefile.am
|
||||||
|
+++ b/src/Makefile.am
|
||||||
|
@@ -46,6 +46,7 @@ AM_CPPFLAGS = \
|
||||||
|
-DIBUS_DATA_DIR=\"$(pkgdatadir)\" \
|
||||||
|
-DIBUS_COMPILATION \
|
||||||
|
-DISOCODES_PREFIX=\"$(ISOCODES_PREFIX)\" \
|
||||||
|
+ -DUSE_BRIDGE_HOTKEY=$(USE_BRIDGE_HOTKEY) \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
# ibus library
|
||||||
|
diff --git a/src/ibusbus.c b/src/ibusbus.c
|
||||||
|
index 39ad784..5a8f9a9 100644
|
||||||
|
--- a/src/ibusbus.c
|
||||||
|
+++ b/src/ibusbus.c
|
||||||
|
@@ -1902,3 +1902,9 @@ ibus_bus_call_async (IBusBus *bus,
|
||||||
|
(GAsyncReadyCallback) ibus_bus_call_async_done,
|
||||||
|
simple);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+gboolean
|
||||||
|
+ibus_bus_use_bridge_hotkey (IBusBus *bus)
|
||||||
|
+{
|
||||||
|
+ return (USE_BRIDGE_HOTKEY == 1) ? TRUE : FALSE;
|
||||||
|
+}
|
||||||
|
diff --git a/src/ibusbus.h b/src/ibusbus.h
|
||||||
|
index 77d3916..4bdf760 100644
|
||||||
|
--- a/src/ibusbus.h
|
||||||
|
+++ b/src/ibusbus.h
|
||||||
|
@@ -971,5 +971,14 @@ void ibus_bus_set_watch_ibus_signal
|
||||||
|
*/
|
||||||
|
IBusConfig *ibus_bus_get_config (IBusBus *bus);
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * ibus_bus_use_bridge_hotkey:
|
||||||
|
+ * @bus: An #IBusBus.
|
||||||
|
+ * @returns: %TRUE if @bus use bridge hotkey, %FALSE otherwise.
|
||||||
|
+ *
|
||||||
|
+ * Return %TRUE if @bus use bridge hotkey.
|
||||||
|
+ */
|
||||||
|
+gboolean ibus_bus_use_bridge_hotkey (IBusBus *bus);
|
||||||
|
+
|
||||||
|
G_END_DECLS
|
||||||
|
#endif
|
||||||
|
diff --git a/src/ibusenginedesc.c b/src/ibusenginedesc.c
|
||||||
|
index d3800e1..a9e68be 100644
|
||||||
|
--- a/src/ibusenginedesc.c
|
||||||
|
+++ b/src/ibusenginedesc.c
|
||||||
|
@@ -233,7 +233,11 @@ ibus_engine_desc_class_init (IBusEngineDescClass *class)
|
||||||
|
g_param_spec_string ("hotkeys",
|
||||||
|
"description hotkeys",
|
||||||
|
"The hotkeys of engine description",
|
||||||
|
+#if USE_BRIDGE_HOTKEY
|
||||||
|
+ "Control+space",
|
||||||
|
+#else
|
||||||
|
"",
|
||||||
|
+#endif
|
||||||
|
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||||
|
|
||||||
|
/**
|
||||||
|
diff --git a/src/ibushotkey.c b/src/ibushotkey.c
|
||||||
|
index 32f8338..bef7dfc 100644
|
||||||
|
--- a/src/ibushotkey.c
|
||||||
|
+++ b/src/ibushotkey.c
|
||||||
|
@@ -562,3 +562,14 @@ ibus_hotkey_profile_lookup_hotkey (IBusHotkeyProfile *profile,
|
||||||
|
|
||||||
|
return (GQuark) GPOINTER_TO_UINT (g_tree_lookup (priv->hotkeys, &hotkey));
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+ibus_hotkey_profile_foreach_hotkey (IBusHotkeyProfile *profile,
|
||||||
|
+ GTraverseFunc func,
|
||||||
|
+ gpointer user_data)
|
||||||
|
+{
|
||||||
|
+ IBusHotkeyProfilePrivate *priv;
|
||||||
|
+ priv = IBUS_HOTKEY_PROFILE_GET_PRIVATE (profile);
|
||||||
|
+
|
||||||
|
+ g_tree_foreach (priv->hotkeys, func, user_data);
|
||||||
|
+}
|
||||||
|
diff --git a/src/ibushotkey.h b/src/ibushotkey.h
|
||||||
|
index 9a341f6..92ec6af 100644
|
||||||
|
--- a/src/ibushotkey.h
|
||||||
|
+++ b/src/ibushotkey.h
|
||||||
|
@@ -179,5 +179,16 @@ GQuark ibus_hotkey_profile_lookup_hotkey
|
||||||
|
guint keyval,
|
||||||
|
guint modifiers);
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * ibus_hotkey_profile_foreach_hotkey:
|
||||||
|
+ * @profile: An IBusHotkeyProfile.
|
||||||
|
+ * @func: (scope call): A GTraverseFunc for g_tree_traverse.
|
||||||
|
+ * @user_data: A gpointer for g_tree_traverse.
|
||||||
|
+ */
|
||||||
|
+void ibus_hotkey_profile_foreach_hotkey
|
||||||
|
+ (IBusHotkeyProfile *profile,
|
||||||
|
+ GTraverseFunc func,
|
||||||
|
+ gpointer user_data);
|
||||||
|
+
|
||||||
|
G_END_DECLS
|
||||||
|
#endif
|
||||||
|
diff --git a/ui/gtk/panel.py b/ui/gtk/panel.py
|
||||||
|
index de64920..7f2edcd 100644
|
||||||
|
--- a/ui/gtk/panel.py
|
||||||
|
+++ b/ui/gtk/panel.py
|
||||||
|
@@ -133,6 +133,11 @@ class Panel(ibus.PanelBase):
|
||||||
|
# self.__bus.request_name(ibus.panel.IBUS_SERVICE_PANEL, 0)
|
||||||
|
|
||||||
|
# init xkb
|
||||||
|
+ self.__default_layout = 'default'
|
||||||
|
+ self.__default_model = 'default'
|
||||||
|
+ self.__default_option = 'default'
|
||||||
|
+ self.__disabled_engine = None
|
||||||
|
+
|
||||||
|
self.__xkblayout = ibus.XKBLayout(self.__config)
|
||||||
|
use_xkb = self.__config.get_value("general", "use_system_keyboard_layout", False)
|
||||||
|
if not use_xkb:
|
||||||
|
@@ -142,11 +147,18 @@ class Panel(ibus.PanelBase):
|
||||||
|
value = 'default'
|
||||||
|
if value != 'default':
|
||||||
|
self.__xkblayout.set_default_layout(value)
|
||||||
|
+ if value.find('(') >= 0:
|
||||||
|
+ self.__default_layout = value.split('(')[0]
|
||||||
|
+ self.__default_model = value.split('(')[1].split(')')[0]
|
||||||
|
+ else:
|
||||||
|
+ self.__default_layout = value
|
||||||
|
+ self.__default_model = None
|
||||||
|
value = str(self.__config.get_value("general", "system_keyboard_option", ''))
|
||||||
|
if value == '':
|
||||||
|
value = 'default'
|
||||||
|
if value != 'default':
|
||||||
|
self.__xkblayout.set_default_option(value)
|
||||||
|
+ self.__default_option = value
|
||||||
|
|
||||||
|
def set_cursor_location(self, x, y, w, h):
|
||||||
|
self.__candidate_panel.set_cursor_location(x, y, w, h)
|
||||||
|
@@ -233,6 +245,41 @@ class Panel(ibus.PanelBase):
|
||||||
|
def __set_im_name(self, name):
|
||||||
|
self.__language_bar.set_im_name(name)
|
||||||
|
|
||||||
|
+ def __set_default_layout_engine(self):
|
||||||
|
+ default_layout = self.__default_layout
|
||||||
|
+ default_model = self.__default_model
|
||||||
|
+ if default_layout == 'default':
|
||||||
|
+ default_layout = self.__xkblayout.get_default_layout()[0]
|
||||||
|
+ default_model = None
|
||||||
|
+ if default_model == 'default':
|
||||||
|
+ default_model = self.__xkblayout.get_default_layout()[1]
|
||||||
|
+ layouts = default_layout.split(',')
|
||||||
|
+ group = self.__xkblayout.get_group()
|
||||||
|
+ layout = layouts[group]
|
||||||
|
+ model = None
|
||||||
|
+ if default_model != None and default_model != '':
|
||||||
|
+ models = default_model.split(',')
|
||||||
|
+ if group < models.length:
|
||||||
|
+ model = models[group]
|
||||||
|
+ registry = ibus.XKBConfigRegistry()
|
||||||
|
+ langs = registry.get_layout_lang()[layout]
|
||||||
|
+ lang = 'en'
|
||||||
|
+ im_icon = layout[:2]
|
||||||
|
+ if langs != None:
|
||||||
|
+ im_icon = langs[0][:2]
|
||||||
|
+ lang = str(langs[0])
|
||||||
|
+ if self.__disabled_engine == None:
|
||||||
|
+ self.__disabled_engine = registry.engine_desc_new(lang,
|
||||||
|
+ self.__default_layout,
|
||||||
|
+ 'Default Layout',
|
||||||
|
+ default_model,
|
||||||
|
+ None)
|
||||||
|
+ if self.__focus_ic != None:
|
||||||
|
+ prev_engine = self.__focus_ic.get_engine()
|
||||||
|
+ if prev_engine == None or \
|
||||||
|
+ prev_engine.name != self.__disabled_engine.name:
|
||||||
|
+ self.__focus_ic.set_bridge_engine()
|
||||||
|
+
|
||||||
|
def focus_in(self, ic):
|
||||||
|
self.reset()
|
||||||
|
self.__focus_ic = ibus.InputContext(self.__bus, ic)
|
||||||
|
@@ -240,6 +287,9 @@ class Panel(ibus.PanelBase):
|
||||||
|
self.__language_bar.set_enabled(enabled)
|
||||||
|
|
||||||
|
if not enabled:
|
||||||
|
+ if ibus.use_bridge_hotkey():
|
||||||
|
+ self.__set_default_layout_engine()
|
||||||
|
+
|
||||||
|
self.__set_im_icon(ICON_KEYBOARD)
|
||||||
|
self.__set_im_name(None)
|
||||||
|
if self.__bus.get_use_sys_layout():
|
||||||
|
@@ -453,7 +503,12 @@ class Panel(ibus.PanelBase):
|
||||||
|
size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU)
|
||||||
|
menu = gtk.Menu()
|
||||||
|
for i, engine in enumerate(engines):
|
||||||
|
- lang = ibus.get_language_name(engine.language)
|
||||||
|
+ language = engine.language
|
||||||
|
+ if ibus.use_bridge_hotkey() and \
|
||||||
|
+ engine.name == ibus.DEFAULT_BRIDGE_ENGINE_NAME and \
|
||||||
|
+ self.__disabled_engine != None:
|
||||||
|
+ language = self.__disabled_engine.language
|
||||||
|
+ lang = ibus.get_language_name(language)
|
||||||
|
item = gtk.ImageMenuItem("%s - %s" % (lang, engine.longname))
|
||||||
|
if current_engine and current_engine.name == engine.name:
|
||||||
|
for widget in item.get_children():
|
||||||
|
@@ -471,7 +526,8 @@ class Panel(ibus.PanelBase):
|
||||||
|
item.connect("activate", self.__im_menu_item_activate_cb, None)
|
||||||
|
if self.__focus_ic == None or not self.__focus_ic.is_enabled():
|
||||||
|
item.set_sensitive(False)
|
||||||
|
- menu.add(item)
|
||||||
|
+ if not ibus.use_bridge_hotkey():
|
||||||
|
+ menu.add(item)
|
||||||
|
|
||||||
|
menu.show_all()
|
||||||
|
menu.set_take_focus(False)
|
||||||
|
diff --git a/xkb/Makefile.am b/xkb/Makefile.am
|
||||||
|
index ad9cdd9..c4d5afb 100644
|
||||||
|
--- a/xkb/Makefile.am
|
||||||
|
+++ b/xkb/Makefile.am
|
||||||
|
@@ -28,6 +28,8 @@ INCLUDES = \
|
||||||
|
-I$(top_srcdir)/src \
|
||||||
|
-DIBUS_LOCALEDIR=\"$(datadir)/locale\" \
|
||||||
|
-DLIBEXECDIR=\""$(libexecdir)"\" \
|
||||||
|
+ -DUSE_BRIDGE_HOTKEY=$(USE_BRIDGE_HOTKEY) \
|
||||||
|
+ -DDEFAULT_BRIDGE_ENGINE_NAME=\"$(DEFAULT_BRIDGE_ENGINE_NAME)\" \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
noinst_PROGRAMS = $(TESTS)
|
||||||
|
diff --git a/xkb/ibus-engine-xkb-main.c b/xkb/ibus-engine-xkb-main.c
|
||||||
|
index 5d748cc..a80f349 100644
|
||||||
|
--- a/xkb/ibus-engine-xkb-main.c
|
||||||
|
+++ b/xkb/ibus-engine-xkb-main.c
|
||||||
|
@@ -288,6 +288,14 @@ print_component ()
|
||||||
|
layout_desc = (GHashTable *) ibus_xkb_config_registry_get_layout_desc (config_registry);
|
||||||
|
variant_desc = (GHashTable *) ibus_xkb_config_registry_get_variant_desc (config_registry);
|
||||||
|
component = ibus_xkb_component_new ();
|
||||||
|
+#if USE_BRIDGE_HOTKEY
|
||||||
|
+ engine = ibus_xkb_engine_desc_new ("en",
|
||||||
|
+ "default",
|
||||||
|
+ "Default Layout",
|
||||||
|
+ NULL,
|
||||||
|
+ NULL);
|
||||||
|
+ ibus_component_add_engine (component, engine);
|
||||||
|
+#endif
|
||||||
|
for (keys = g_hash_table_get_keys (layout_list); keys; keys = keys->next) {
|
||||||
|
if (keys->data == NULL) {
|
||||||
|
continue;
|
||||||
|
diff --git a/xkb/xkbxml.c b/xkb/xkbxml.c
|
||||||
|
index 2ce7bcf..de6648f 100644
|
||||||
|
--- a/xkb/xkbxml.c
|
||||||
|
+++ b/xkb/xkbxml.c
|
||||||
|
@@ -273,6 +273,7 @@ ibus_xkb_engine_desc_new (const gchar *lang,
|
||||||
|
gchar *longname = NULL;
|
||||||
|
gchar *desc = NULL;
|
||||||
|
gchar *engine_layout = NULL;
|
||||||
|
+ const gchar *icon = "ibus-engine";
|
||||||
|
|
||||||
|
g_return_val_if_fail (lang != NULL && layout != NULL, NULL);
|
||||||
|
|
||||||
|
@@ -294,6 +295,11 @@ ibus_xkb_engine_desc_new (const gchar *lang,
|
||||||
|
desc = g_strdup_printf ("XKB %s keyboard layout", layout);
|
||||||
|
engine_layout = g_strdup (layout);
|
||||||
|
}
|
||||||
|
+#if USE_BRIDGE_HOTKEY
|
||||||
|
+ if (g_strcmp0 (name, DEFAULT_BRIDGE_ENGINE_NAME) == 0) {
|
||||||
|
+ icon = "input-keyboard-symbolic";
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
engine = ibus_engine_desc_new (name,
|
||||||
|
longname,
|
||||||
|
@@ -301,7 +307,7 @@ ibus_xkb_engine_desc_new (const gchar *lang,
|
||||||
|
lang,
|
||||||
|
"LGPL2.1",
|
||||||
|
"Takao Fujiwara <takao.fujiwara1@gmail.com>",
|
||||||
|
- "ibus-engine",
|
||||||
|
+ icon,
|
||||||
|
engine_layout);
|
||||||
|
|
||||||
|
g_free (name);
|
||||||
|
--
|
||||||
|
1.7.4.4
|
||||||
|
|
331
ibus-xx-icon-symbol.patch
Normal file
331
ibus-xx-icon-symbol.patch
Normal file
@ -0,0 +1,331 @@
|
|||||||
|
From ec02d646dccd213e1309011160d9d73a26174044 Mon Sep 17 00:00:00 2001
|
||||||
|
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||||
|
Date: Mon, 20 Jun 2011 19:10:21 +0900
|
||||||
|
Subject: [PATCH] Add icon_symbol property in IBusEngineDesc.
|
||||||
|
|
||||||
|
---
|
||||||
|
bus/engineproxy.c | 22 +++++++++++++++
|
||||||
|
bus/ibusimpl.c | 33 ++++++++++++++++++++++
|
||||||
|
bus/ibusimpl.h | 4 +++
|
||||||
|
ibus/engine.py | 3 ++
|
||||||
|
ibus/interface/iengine.py | 3 ++
|
||||||
|
src/ibusenginedesc.c | 66 +++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
src/ibusenginedesc.h | 10 +++++++
|
||||||
|
7 files changed, 141 insertions(+), 0 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/bus/engineproxy.c b/bus/engineproxy.c
|
||||||
|
index f74af12..5c0cbb2 100644
|
||||||
|
--- a/bus/engineproxy.c
|
||||||
|
+++ b/bus/engineproxy.c
|
||||||
|
@@ -591,6 +591,28 @@ bus_engine_proxy_g_signal (GDBusProxy *proxy,
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (g_strcmp0 (signal_name, "SetIconSymbol") == 0) {
|
||||||
|
+ const gchar *name = NULL;
|
||||||
|
+ gchar *icon_symbol = NULL;
|
||||||
|
+ GValue value = { 0, };
|
||||||
|
+
|
||||||
|
+ name = ibus_engine_desc_get_name (engine->desc);
|
||||||
|
+ g_return_if_fail (name != NULL);
|
||||||
|
+ g_variant_get (parameters, "(s)", &icon_symbol);
|
||||||
|
+ g_return_if_fail (icon_symbol != NULL);
|
||||||
|
+
|
||||||
|
+ g_value_init (&value, G_TYPE_STRING);
|
||||||
|
+ g_value_set_string (&value, icon_symbol);
|
||||||
|
+ g_object_set_property (G_OBJECT (engine->desc), "icon_symbol", &value);
|
||||||
|
+ g_value_unset (&value);
|
||||||
|
+
|
||||||
|
+ bus_ibus_impl_set_icon_symbol_with_engine_name (BUS_DEFAULT_IBUS,
|
||||||
|
+ name,
|
||||||
|
+ icon_symbol);
|
||||||
|
+ g_free (icon_symbol);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
g_return_if_reached ();
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
|
||||||
|
index b356b2c..38d6d11 100644
|
||||||
|
--- a/bus/ibusimpl.c
|
||||||
|
+++ b/bus/ibusimpl.c
|
||||||
|
@@ -2342,3 +2342,36 @@ bus_ibus_impl_get_focused_input_context (BusIBusImpl *ibus)
|
||||||
|
|
||||||
|
return ibus->focused_context;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+bus_ibus_impl_set_icon_symbol_with_engine_name (BusIBusImpl *ibus,
|
||||||
|
+ const gchar *name,
|
||||||
|
+ const gchar *icon_symbol)
|
||||||
|
+{
|
||||||
|
+ IBusEngineDesc *desc = NULL;
|
||||||
|
+ GValue value = { 0, };
|
||||||
|
+
|
||||||
|
+ g_assert (BUS_IS_IBUS_IMPL (ibus));
|
||||||
|
+ g_assert (name != NULL);
|
||||||
|
+ g_assert (icon_symbol != NULL);
|
||||||
|
+
|
||||||
|
+ desc = bus_ibus_impl_get_engine_desc (ibus, name);
|
||||||
|
+
|
||||||
|
+ if (desc == NULL) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ g_value_init (&value, G_TYPE_STRING);
|
||||||
|
+ g_value_set_string (&value, icon_symbol);
|
||||||
|
+ g_object_set_property (G_OBJECT (desc), "icon_symbol", &value);
|
||||||
|
+ g_value_unset (&value);
|
||||||
|
+
|
||||||
|
+ /* Update status icon.
|
||||||
|
+ * "enabled" signal is caught by ibus->panel and ibus->panel calls
|
||||||
|
+ * StateChanged dbus method. */
|
||||||
|
+ if (ibus->panel && ibus->focused_context) {
|
||||||
|
+ if (bus_input_context_is_enabled (ibus->focused_context)) {
|
||||||
|
+ bus_input_context_enable (ibus->focused_context);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
diff --git a/bus/ibusimpl.h b/bus/ibusimpl.h
|
||||||
|
index 42edbf8..4f37cbc 100644
|
||||||
|
--- a/bus/ibusimpl.h
|
||||||
|
+++ b/bus/ibusimpl.h
|
||||||
|
@@ -99,6 +99,10 @@ gboolean bus_ibus_impl_is_embed_preedit_text
|
||||||
|
(BusIBusImpl *ibus);
|
||||||
|
BusInputContext *bus_ibus_impl_get_focused_input_context
|
||||||
|
(BusIBusImpl *ibus);
|
||||||
|
+void bus_ibus_impl_set_icon_symbol_with_engine_name
|
||||||
|
+ (BusIBusImpl *ibus,
|
||||||
|
+ const gchar *name,
|
||||||
|
+ const gchar *icon_symbol);
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
|
#endif
|
||||||
|
diff --git a/ibus/engine.py b/ibus/engine.py
|
||||||
|
index fe5dd98..e827408 100644
|
||||||
|
--- a/ibus/engine.py
|
||||||
|
+++ b/ibus/engine.py
|
||||||
|
@@ -176,6 +176,9 @@ class EngineBase(object.Object):
|
||||||
|
self.__proxy = None
|
||||||
|
super(EngineBase,self).do_destroy()
|
||||||
|
|
||||||
|
+ def set_icon_symbol(self, icon_symbol):
|
||||||
|
+ return self.__proxy.SetIconSymbol(icon_symbol)
|
||||||
|
+
|
||||||
|
|
||||||
|
class EngineProxy(interface.IEngine):
|
||||||
|
def __init__(self, engine, conn, object_path):
|
||||||
|
diff --git a/ibus/interface/iengine.py b/ibus/interface/iengine.py
|
||||||
|
index 9e0d981..7cefcdf 100644
|
||||||
|
--- a/ibus/interface/iengine.py
|
||||||
|
+++ b/ibus/interface/iengine.py
|
||||||
|
@@ -157,3 +157,6 @@ class IEngine(dbus.service.Object):
|
||||||
|
|
||||||
|
@signal()
|
||||||
|
def RequireSurroundingText(self): pass
|
||||||
|
+
|
||||||
|
+ @signal(signature="s")
|
||||||
|
+ def SetIconSymbol(self, icon_symbol): pass
|
||||||
|
diff --git a/src/ibusenginedesc.c b/src/ibusenginedesc.c
|
||||||
|
index ca5ef60..d3800e1 100644
|
||||||
|
--- a/src/ibusenginedesc.c
|
||||||
|
+++ b/src/ibusenginedesc.c
|
||||||
|
@@ -22,6 +22,7 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "ibusenginedesc.h"
|
||||||
|
#include "ibusxml.h"
|
||||||
|
+#include "ibusenumtypes.h"
|
||||||
|
|
||||||
|
enum {
|
||||||
|
LAST_SIGNAL,
|
||||||
|
@@ -39,6 +40,7 @@ enum {
|
||||||
|
PROP_LAYOUT,
|
||||||
|
PROP_RANK,
|
||||||
|
PROP_HOTKEYS,
|
||||||
|
+ PROP_ICON_SYMBOL,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -54,6 +56,7 @@ struct _IBusEngineDescPrivate {
|
||||||
|
gchar *layout;
|
||||||
|
guint rank;
|
||||||
|
gchar *hotkeys;
|
||||||
|
+ gchar *icon_symbol;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IBUS_ENGINE_DESC_GET_PRIVATE(o) \
|
||||||
|
@@ -232,6 +235,19 @@ ibus_engine_desc_class_init (IBusEngineDescClass *class)
|
||||||
|
"The hotkeys of engine description",
|
||||||
|
"",
|
||||||
|
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * IBusEngineDesc:icon_symbol:
|
||||||
|
+ *
|
||||||
|
+ * The symbol chars of engine description instead of icon image
|
||||||
|
+ */
|
||||||
|
+ g_object_class_install_property (gobject_class,
|
||||||
|
+ PROP_ICON_SYMBOL,
|
||||||
|
+ g_param_spec_string ("icon_symbol",
|
||||||
|
+ "description icon_symbol",
|
||||||
|
+ "The icon symbol chars of engine description",
|
||||||
|
+ "",
|
||||||
|
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
@@ -249,6 +265,7 @@ ibus_engine_desc_init (IBusEngineDesc *desc)
|
||||||
|
desc->priv->layout = NULL;
|
||||||
|
desc->priv->rank = 0;
|
||||||
|
desc->priv->hotkeys = NULL;
|
||||||
|
+ desc->priv->icon_symbol = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
@@ -263,6 +280,7 @@ ibus_engine_desc_destroy (IBusEngineDesc *desc)
|
||||||
|
g_free (desc->priv->icon);
|
||||||
|
g_free (desc->priv->layout);
|
||||||
|
g_free (desc->priv->hotkeys);
|
||||||
|
+ g_free (desc->priv->icon_symbol);
|
||||||
|
|
||||||
|
IBUS_OBJECT_CLASS (ibus_engine_desc_parent_class)->destroy (IBUS_OBJECT (desc));
|
||||||
|
}
|
||||||
|
@@ -313,6 +331,10 @@ ibus_engine_desc_set_property (IBusEngineDesc *desc,
|
||||||
|
g_assert (desc->priv->hotkeys == NULL);
|
||||||
|
desc->priv->hotkeys = g_value_dup_string (value);
|
||||||
|
break;
|
||||||
|
+ case PROP_ICON_SYMBOL:
|
||||||
|
+ g_free (desc->priv->icon_symbol);
|
||||||
|
+ desc->priv->icon_symbol = g_value_dup_string (value);
|
||||||
|
+ break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (desc, prop_id, pspec);
|
||||||
|
}
|
||||||
|
@@ -355,6 +377,9 @@ ibus_engine_desc_get_property (IBusEngineDesc *desc,
|
||||||
|
case PROP_HOTKEYS:
|
||||||
|
g_value_set_string (value, ibus_engine_desc_get_hotkeys (desc));
|
||||||
|
break;
|
||||||
|
+ case PROP_ICON_SYMBOL:
|
||||||
|
+ g_value_set_string (value, ibus_engine_desc_get_icon_symbol (desc));
|
||||||
|
+ break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (desc, prop_id, pspec);
|
||||||
|
}
|
||||||
|
@@ -382,9 +407,28 @@ ibus_engine_desc_serialize (IBusEngineDesc *desc,
|
||||||
|
g_variant_builder_add (builder, "u", desc->priv->rank);
|
||||||
|
g_variant_builder_add (builder, "s", NOTNULL (desc->priv->hotkeys));
|
||||||
|
#undef NOTNULL
|
||||||
|
+
|
||||||
|
+ /* append extra properties */
|
||||||
|
+ GVariantBuilder array;
|
||||||
|
+ g_variant_builder_init (&array, G_VARIANT_TYPE ("a{sv}"));
|
||||||
|
+ g_variant_builder_add (&array, "{sv}", "icon_symbol", g_variant_new_string (desc->priv->icon_symbol));
|
||||||
|
+ g_variant_builder_add (builder, "v", g_variant_builder_end (&array));
|
||||||
|
+
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static gboolean
|
||||||
|
+ibus_engine_desc_deserialize_property (IBusEngineDesc *desc,
|
||||||
|
+ const gchar *name,
|
||||||
|
+ GVariant *variant)
|
||||||
|
+{
|
||||||
|
+ if (g_strcmp0 (name, "icon_symbol") == 0) {
|
||||||
|
+ g_variant_get (variant, "s", &desc->priv->icon_symbol);
|
||||||
|
+ return TRUE;
|
||||||
|
+ }
|
||||||
|
+ return FALSE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static gint
|
||||||
|
ibus_engine_desc_deserialize (IBusEngineDesc *desc,
|
||||||
|
GVariant *variant)
|
||||||
|
@@ -405,6 +449,23 @@ ibus_engine_desc_deserialize (IBusEngineDesc *desc,
|
||||||
|
g_variant_get_child (variant, retval++, "u", &desc->priv->rank);
|
||||||
|
g_variant_get_child (variant, retval++, "s", &desc->priv->hotkeys);
|
||||||
|
|
||||||
|
+ /* extract extra properties */
|
||||||
|
+ GVariantIter iter;
|
||||||
|
+ GVariant *child, *array;
|
||||||
|
+
|
||||||
|
+ g_variant_get_child (variant, retval++, "v", &array);
|
||||||
|
+ g_variant_iter_init (&iter, array);
|
||||||
|
+ while ((child = g_variant_iter_next_value (&iter))) {
|
||||||
|
+ gchar *name;
|
||||||
|
+ GVariant *value;
|
||||||
|
+ g_variant_get (child, "{sv}", &name, &value);
|
||||||
|
+ if (ibus_engine_desc_deserialize_property (desc, name, value))
|
||||||
|
+ retval++;
|
||||||
|
+ g_free (name);
|
||||||
|
+ g_variant_unref (value);
|
||||||
|
+ g_variant_unref (child);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -428,6 +489,7 @@ ibus_engine_desc_copy (IBusEngineDesc *dest,
|
||||||
|
dest->priv->layout = g_strdup (src->priv->layout);
|
||||||
|
dest->priv->rank = src->priv->rank;
|
||||||
|
dest->priv->hotkeys = g_strdup (src->priv->hotkeys);
|
||||||
|
+ dest->priv->icon_symbol = g_strdup (src->priv->icon_symbol);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -465,6 +527,7 @@ ibus_engine_desc_output (IBusEngineDesc *desc,
|
||||||
|
OUTPUT_ENTRY_1(icon);
|
||||||
|
OUTPUT_ENTRY_1(layout);
|
||||||
|
OUTPUT_ENTRY_1(hotkeys);
|
||||||
|
+ OUTPUT_ENTRY_1(icon_symbol);
|
||||||
|
g_string_append_indent (output, indent + 1);
|
||||||
|
g_string_append_printf (output, "<rank>%u</rank>\n", desc->priv->rank);
|
||||||
|
#undef OUTPUT_ENTRY
|
||||||
|
@@ -498,6 +561,7 @@ ibus_engine_desc_parse_xml_node (IBusEngineDesc *desc,
|
||||||
|
PARSE_ENTRY_1(icon);
|
||||||
|
PARSE_ENTRY_1(layout);
|
||||||
|
PARSE_ENTRY_1(hotkeys);
|
||||||
|
+ PARSE_ENTRY_1(icon_symbol);
|
||||||
|
#undef PARSE_ENTRY
|
||||||
|
#undef PARSE_ENTRY_1
|
||||||
|
if (g_strcmp0 (sub_node->name , "rank") == 0) {
|
||||||
|
@@ -526,6 +590,7 @@ IBUS_ENGINE_DESC_GET_PROPERTY (icon, const gchar *)
|
||||||
|
IBUS_ENGINE_DESC_GET_PROPERTY (layout, const gchar *)
|
||||||
|
IBUS_ENGINE_DESC_GET_PROPERTY (rank, guint)
|
||||||
|
IBUS_ENGINE_DESC_GET_PROPERTY (hotkeys, const gchar *)
|
||||||
|
+IBUS_ENGINE_DESC_GET_PROPERTY (icon_symbol, const gchar *)
|
||||||
|
#undef IBUS_ENGINE_DESC_GET_PROPERTY
|
||||||
|
|
||||||
|
IBusEngineDesc *
|
||||||
|
@@ -573,6 +638,7 @@ ibus_engine_desc_new_varargs (const gchar *first_property_name, ...)
|
||||||
|
g_assert (desc->priv->icon);
|
||||||
|
g_assert (desc->priv->layout);
|
||||||
|
g_assert (desc->priv->hotkeys);
|
||||||
|
+ g_assert (desc->priv->icon_symbol);
|
||||||
|
|
||||||
|
return desc;
|
||||||
|
}
|
||||||
|
diff --git a/src/ibusenginedesc.h b/src/ibusenginedesc.h
|
||||||
|
index 9718b15..e3194c3 100644
|
||||||
|
--- a/src/ibusenginedesc.h
|
||||||
|
+++ b/src/ibusenginedesc.h
|
||||||
|
@@ -249,6 +249,16 @@ guint ibus_engine_desc_get_rank (IBusEngineDesc *info);
|
||||||
|
const gchar *ibus_engine_desc_get_hotkeys (IBusEngineDesc *info);
|
||||||
|
|
||||||
|
/**
|
||||||
|
+ * ibus_engine_desc_get_icon_symbol:
|
||||||
|
+ * @info: An IBusEngineDesc
|
||||||
|
+ * @returns: icon_symbol property in IBusEngineDesc
|
||||||
|
+ *
|
||||||
|
+ * Return the icon_symbol property in IBusEngineDesc. It should not be freed.
|
||||||
|
+ */
|
||||||
|
+const gchar *ibus_engine_desc_get_icon_symbol
|
||||||
|
+ (IBusEngineDesc *info);
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
* ibus_engine_desc_output:
|
||||||
|
* @info: An IBusEngineDesc
|
||||||
|
* @output: XML-formatted Input method engine description.
|
||||||
|
--
|
||||||
|
1.7.4.4
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
From 231285d6d9e1b0b868edb842b46c30974a5c517a Mon Sep 17 00:00:00 2001
|
From 735a4d98ac057ded317dae9b85777ce56d8af0fd Mon Sep 17 00:00:00 2001
|
||||||
From: fujiwarat <takao.fujiwara1@gmail.com>
|
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||||
Date: Wed, 25 May 2011 18:52:25 +0900
|
Date: Mon, 20 Jun 2011 19:04:51 +0900
|
||||||
Subject: [PATCH] Enable ibus-setup to show the frequently used languages
|
Subject: [PATCH] Enable ibus-setup to show the frequently used languages
|
||||||
only in IME list.
|
only in IME list.
|
||||||
|
|
||||||
@ -10,10 +10,10 @@ Subject: [PATCH] Enable ibus-setup to show the frequently used languages
|
|||||||
setup/main.py | 1 +
|
setup/main.py | 1 +
|
||||||
3 files changed, 300 insertions(+), 22 deletions(-)
|
3 files changed, 300 insertions(+), 22 deletions(-)
|
||||||
|
|
||||||
diff --git a/data/ibus.schemas.in b/data/ibus.schemas.in
|
diff --git a/data/ibus.schemas.in.in b/data/ibus.schemas.in.in
|
||||||
index 39922a0..2e33b2c 100644
|
index d4334e1..5ef2ac2 100644
|
||||||
--- a/data/ibus.schemas.in
|
--- a/data/ibus.schemas.in.in
|
||||||
+++ b/data/ibus.schemas.in
|
+++ b/data/ibus.schemas.in.in
|
||||||
@@ -239,6 +239,174 @@
|
@@ -239,6 +239,174 @@
|
||||||
</locale>
|
</locale>
|
||||||
</schema>
|
</schema>
|
||||||
@ -413,10 +413,10 @@ index 7383177..bff2407 100644
|
|||||||
return self.__title
|
return self.__title
|
||||||
|
|
||||||
diff --git a/setup/main.py b/setup/main.py
|
diff --git a/setup/main.py b/setup/main.py
|
||||||
index 9cdce02..5201139 100644
|
index 192fb88..5a0170d 100644
|
||||||
--- a/setup/main.py
|
--- a/setup/main.py
|
||||||
+++ b/setup/main.py
|
+++ b/setup/main.py
|
||||||
@@ -226,6 +226,7 @@ class Setup(object):
|
@@ -227,6 +227,7 @@ class Setup(object):
|
||||||
button.connect("toggled", self.__checkbutton_preload_engine_mode_toggled_cb)
|
button.connect("toggled", self.__checkbutton_preload_engine_mode_toggled_cb)
|
||||||
self.__engines = self.__bus.list_engines()
|
self.__engines = self.__bus.list_engines()
|
||||||
self.__combobox = self.__builder.get_object("combobox_engines")
|
self.__combobox = self.__builder.get_object("combobox_engines")
|
||||||
|
73
ibus.spec
73
ibus.spec
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
Name: ibus
|
Name: ibus
|
||||||
Version: 1.3.99.20110419
|
Version: 1.3.99.20110419
|
||||||
Release: 2%{?dist}
|
Release: 3%{?dist}
|
||||||
Summary: Intelligent Input Bus for Linux OS
|
Summary: Intelligent Input Bus for Linux OS
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
Group: System Environment/Libraries
|
Group: System Environment/Libraries
|
||||||
@ -21,14 +21,16 @@ URL: http://code.google.com/p/ibus/
|
|||||||
Source0: http://ibus.googlecode.com/files/%{name}-%{version}.tar.gz
|
Source0: http://ibus.googlecode.com/files/%{name}-%{version}.tar.gz
|
||||||
Source1: xinput-ibus
|
Source1: xinput-ibus
|
||||||
%if %have_gjsfile
|
%if %have_gjsfile
|
||||||
Source2: http://fujiwara.fedorapeople.org/ibus/gnome-shell/gnome-shell-ibus-plugins-20110601.tar.bz2
|
Source2: http://fujiwara.fedorapeople.org/ibus/gnome-shell/gnome-shell-ibus-plugins-20110621.tar.bz2
|
||||||
%endif
|
%endif
|
||||||
Source3: https://www.transifex.net/projects/p/ibus/resource/master/l/da/download/ibus_master_da.po
|
Source3: https://www.transifex.net/projects/p/ibus/resource/master/l/da/download/ibus_master_da.po
|
||||||
|
Source4: http://ueno.fedorapeople.org/ibus-indicator/ibus-indicator.tar.bz2
|
||||||
Patch0: ibus-HEAD.patch
|
Patch0: ibus-HEAD.patch
|
||||||
Patch1: ibus-435880-surrounding-text.patch
|
Patch1: ibus-530711-preload-sys.patch
|
||||||
Patch2: ibus-541492-xkb.patch
|
Patch2: ibus-xx-icon-symbol.patch
|
||||||
Patch3: ibus-530711-preload-sys.patch
|
Patch3: ibus-541492-xkb.patch
|
||||||
Patch4: ibus-xx-setup-frequent-lang.patch
|
Patch4: ibus-xx-bridge-hotkey.patch
|
||||||
|
Patch5: ibus-xx-setup-frequent-lang.patch
|
||||||
|
|
||||||
# Workaround for oxygen-gtk icon theme until bug 699103 is fixed.
|
# Workaround for oxygen-gtk icon theme until bug 699103 is fixed.
|
||||||
Patch91: ibus-711632-fedora-fallback-icon.patch
|
Patch91: ibus-711632-fedora-fallback-icon.patch
|
||||||
@ -121,6 +123,21 @@ Requires(post): glib2 >= %{glib_ver}
|
|||||||
%description gtk3
|
%description gtk3
|
||||||
This package contains ibus im module for gtk3
|
This package contains ibus im module for gtk3
|
||||||
|
|
||||||
|
%package gnome3
|
||||||
|
Summary: IBus gnome-shell-extension for GNOME3
|
||||||
|
Group: System Environment/Libraries
|
||||||
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
Requires: %{name}-libs = %{version}-%{release}
|
||||||
|
Requires: gnome-shell
|
||||||
|
|
||||||
|
%description gnome3
|
||||||
|
This is a transitional package which allows users to try out new IBus
|
||||||
|
GUI for GNOME3 in development. Note that this package will be marked
|
||||||
|
as obsolete once the integration has completed in the GNOME3 upstream.
|
||||||
|
|
||||||
|
%description gnome3
|
||||||
|
This package contains ibus im module for gtk3
|
||||||
|
|
||||||
%package devel
|
%package devel
|
||||||
Summary: Development tools for ibus
|
Summary: Development tools for ibus
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
@ -150,18 +167,19 @@ sed -i \
|
|||||||
-e "s|Config.IBUS_XKB|'/usr/libexec/ibus-xkb'|" \
|
-e "s|Config.IBUS_XKB|'/usr/libexec/ibus-xkb'|" \
|
||||||
-e "s|Config.HAVE_IBUS_XKB|true|" \
|
-e "s|Config.HAVE_IBUS_XKB|true|" \
|
||||||
js/ui/status/ibus/xkbLayout.js
|
js/ui/status/ibus/xkbLayout.js
|
||||||
|
bzcat %SOURCE4 | tar xf -
|
||||||
%endif
|
%endif
|
||||||
cp %SOURCE3 po/da.po
|
cp %SOURCE3 po/da.po
|
||||||
%patch0 -p1
|
%patch0 -p1
|
||||||
# start surrounding patch
|
|
||||||
%patch1 -p1 -b .surrounding
|
|
||||||
cp client/gtk2/ibusimcontext.c client/gtk3/ibusimcontext.c
|
cp client/gtk2/ibusimcontext.c client/gtk3/ibusimcontext.c
|
||||||
# end surrounding patch
|
%patch1 -p1 -b .preload-sys
|
||||||
|
%patch2 -p1 -b .icon-symbol
|
||||||
%if %have_libxkbfile
|
%if %have_libxkbfile
|
||||||
%patch2 -p1 -b .xkb
|
%patch3 -p1 -b .xkb
|
||||||
%endif
|
%endif
|
||||||
%patch3 -p1 -b .preload-sys
|
mv data/ibus.schemas.in data/ibus.schemas.in.in
|
||||||
%patch4 -p1 -b .setup-frequent-lang
|
%patch4 -p1 -b .bridge-key
|
||||||
|
%patch5 -p1 -b .setup-frequent-lang
|
||||||
|
|
||||||
%patch91 -p1 -b .fallback-icon
|
%patch91 -p1 -b .fallback-icon
|
||||||
|
|
||||||
@ -180,6 +198,7 @@ automake -a -c -f
|
|||||||
--disable-gtk-doc \
|
--disable-gtk-doc \
|
||||||
--with-no-snooper-apps='gnome-do,Do.*,firefox.*,.*chrome.*,.*chromium.*' \
|
--with-no-snooper-apps='gnome-do,Do.*,firefox.*,.*chrome.*,.*chromium.*' \
|
||||||
--enable-surrounding-text \
|
--enable-surrounding-text \
|
||||||
|
--enable-bridge-hotkey \
|
||||||
--enable-introspection
|
--enable-introspection
|
||||||
|
|
||||||
# make -C po update-gmo
|
# make -C po update-gmo
|
||||||
@ -215,19 +234,11 @@ desktop-file-install --delete-original \
|
|||||||
$RPM_BUILD_ROOT%{_datadir}/applications/*
|
$RPM_BUILD_ROOT%{_datadir}/applications/*
|
||||||
|
|
||||||
%if %have_gjsfile
|
%if %have_gjsfile
|
||||||
cp -R js/ui/status/ibus $RPM_BUILD_ROOT%{_datadir}/ibus/ui/gjs-g-s
|
# https://bugzilla.redhat.com/show_bug.cgi?id=657165
|
||||||
cat >> $RPM_BUILD_ROOT%{_datadir}/ibus/ui/gjs-g-s/README <<_EOF
|
install -dm 755 $RPM_BUILD_ROOT%{_datadir}/gnome-shell
|
||||||
IBus Panel for GNOME-Shell
|
cp -R js $RPM_BUILD_ROOT%{_datadir}/gnome-shell
|
||||||
--------------------------
|
install -dm 755 $RPM_BUILD_ROOT%{_datadir}/gnome-shell/extensions
|
||||||
|
cp -R ibus-indicator@example.com $RPM_BUILD_ROOT%{_datadir}/gnome-shell/extensions
|
||||||
This is an alpha version of IBus Panel for GNOME-Shell.
|
|
||||||
These files under this directory are prepared for the test purpose.
|
|
||||||
It is planned to integrate the files into gnome-shell finally.
|
|
||||||
Please refer the installation:
|
|
||||||
https://fedoraproject.org/wiki/I18N/InputMethods#GNOME-Shell
|
|
||||||
Bug Report:
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=657165
|
|
||||||
_EOF
|
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
# FIXME: no version number
|
# FIXME: no version number
|
||||||
@ -323,6 +334,11 @@ fi
|
|||||||
%defattr(-,root,root,-)
|
%defattr(-,root,root,-)
|
||||||
%{_libdir}/gtk-3.0/%{gtk3_binary_version}/immodules/im-ibus.so
|
%{_libdir}/gtk-3.0/%{gtk3_binary_version}/immodules/im-ibus.so
|
||||||
|
|
||||||
|
%files gnome3
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
%{_datadir}/gnome-shell/js/ui/status/ibus
|
||||||
|
%{_datadir}/gnome-shell/extensions/ibus-indicator@example.com
|
||||||
|
|
||||||
%files devel
|
%files devel
|
||||||
%defattr(-,root,root,-)
|
%defattr(-,root,root,-)
|
||||||
%{_libdir}/lib*.so
|
%{_libdir}/lib*.so
|
||||||
@ -337,9 +353,14 @@ fi
|
|||||||
%{_datadir}/gtk-doc/html/*
|
%{_datadir}/gtk-doc/html/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Wed Jun 08 2011 Takao Fujiwara <tfujiwar@redhat.com> - 1.3.99.20110419-2
|
* Mon Jun 20 2011 Takao Fujiwara <tfujiwar@redhat.com> - 1.3.99.20110419-3
|
||||||
|
- Updated ibus-HEAD.patch for upstream.
|
||||||
|
- Removed ibus-435880-surrounding-text.patch as upstream.
|
||||||
- Added ibus-711632-fedora-fallback-icon.patch
|
- Added ibus-711632-fedora-fallback-icon.patch
|
||||||
Fixed SEGV with no icon in oxygen-gtk icon theme.
|
Fixed SEGV with no icon in oxygen-gtk icon theme.
|
||||||
|
- Added ibus-xx-icon-symbol.patch
|
||||||
|
- Added ibus-xx-bridge-hotkey.patch
|
||||||
|
- Added transitional ibus-gnome3 package.
|
||||||
|
|
||||||
* Thu May 26 2011 Takao Fujiwara <tfujiwar@redhat.com> - 1.3.99.20110419-1
|
* Thu May 26 2011 Takao Fujiwara <tfujiwar@redhat.com> - 1.3.99.20110419-1
|
||||||
- Updated to 1.3.99.20110419
|
- Updated to 1.3.99.20110419
|
||||||
|
3
sources
3
sources
@ -1,3 +1,4 @@
|
|||||||
d4f2729fecb92ae6b41f26c770b1a772 ibus-1.3.99.20110419.tar.gz
|
d4f2729fecb92ae6b41f26c770b1a772 ibus-1.3.99.20110419.tar.gz
|
||||||
64e556364ee619d51e80397086b1d244 gnome-shell-ibus-plugins-20110601.tar.bz2
|
ecd3a320faca906b1b8edaae1988f512 gnome-shell-ibus-plugins-20110621.tar.bz2
|
||||||
698c90edf0f037488e1aa969804e891f ibus_master_da.po
|
698c90edf0f037488e1aa969804e891f ibus_master_da.po
|
||||||
|
23756d25109745bdc1c3a54db370d210 ibus-indicator.tar.bz2
|
||||||
|
Loading…
Reference in New Issue
Block a user