summaryrefslogtreecommitdiffstats
path: root/client/gtk2/ibusimcontext.c
diff options
context:
space:
mode:
authorHuang Peng <shawn.p.huang@gmail.com>2008-09-20 11:14:36 +0800
committerHuang Peng <shawn.p.huang@gmail.com>2008-09-20 11:14:36 +0800
commit6789a1f6f8bb59037206f46cbeed1a5bc552b1ea (patch)
tree9a0d1d318c0394dee3e1e04d5b77114edde914ae /client/gtk2/ibusimcontext.c
parent54c52e2f73805029cecf34c5af5e577ba5845ab8 (diff)
downloadibus-6789a1f6f8bb59037206f46cbeed1a5bc552b1ea.tar.gz
ibus-6789a1f6f8bb59037206f46cbeed1a5bc552b1ea.tar.xz
ibus-6789a1f6f8bb59037206f46cbeed1a5bc552b1ea.zip
set_capabilities when frontend establishs ibus connection.
Diffstat (limited to 'client/gtk2/ibusimcontext.c')
-rw-r--r--client/gtk2/ibusimcontext.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
index 9923c43..78f6788 100644
--- a/client/gtk2/ibusimcontext.c
+++ b/client/gtk2/ibusimcontext.c
@@ -1,4 +1,4 @@
-/* vim:set et ts=4: */
+/* vim:set et sts=4: */
/* ibus - The Input Bus
* Copyright (C) 2008-2009 Huang Peng <shawn.p.huang@gmail.com>
*
@@ -43,6 +43,8 @@ struct _IBusIMContextPrivate {
GdkRectangle cursor_area;
gboolean has_focus;
+
+ gint caps;
};
static guint _signal_commit_id = 0;
@@ -237,6 +239,7 @@ ibus_im_context_init (IBusIMContext *obj)
priv->ic = NULL;
priv->has_focus = FALSE;
+ priv->caps = IBUS_CAP_PREEDIT | IBUS_CAP_FOCUS;
// Create slave im context
@@ -499,11 +502,12 @@ ibus_im_context_set_use_preedit (GtkIMContext *context, gboolean use_preedit)
if(priv->ic) {
if (use_preedit) {
- ibus_im_client_set_capabilities (_client, priv->ic, IBUS_CAP_FOCUS | IBUS_CAP_PREEDIT);
+ priv->caps |= IBUS_CAP_PREEDIT;
}
else {
- ibus_im_client_set_capabilities (_client, priv->ic, IBUS_CAP_FOCUS);
+ priv->caps &= ~IBUS_CAP_PREEDIT;
}
+ ibus_im_client_set_capabilities (_client, priv->ic, priv->caps);
}
gtk_im_context_set_use_preedit (priv->slave, use_preedit);
}
@@ -799,8 +803,11 @@ ibus_im_context_set_ic (IBusIMContext *context, const gchar *ic)
if (priv->ic == NULL) {
priv->enable = FALSE;
}
- else if (priv->has_focus) {
- ibus_im_context_focus_in (GTK_IM_CONTEXT (context));
+ else {
+ ibus_im_client_set_capabilities (_client, priv->ic, priv->caps);
+ if (priv->has_focus) {
+ ibus_im_context_focus_in (GTK_IM_CONTEXT (context));
+ }
}
}