summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHuang Peng <shawn.p.huang@gmail.com>2008-08-09 22:57:04 +0800
committerHuang Peng <shawn.p.huang@gmail.com>2008-08-09 22:57:04 +0800
commita436714004455529d6cbe00bf64c2f911e2a490c (patch)
tree237bb9e5449abe7491306eeabcbf24e019c20fc8
parent57421462edc62256018c4ba00be26a7b531bb44f (diff)
downloadibus-a436714004455529d6cbe00bf64c2f911e2a490c.tar.gz
ibus-a436714004455529d6cbe00bf64c2f911e2a490c.tar.xz
ibus-a436714004455529d6cbe00bf64c2f911e2a490c.zip
Refine code and fix some compile warnings.
-rw-r--r--gtk2/ibusim.c7
-rw-r--r--gtk2/ibusimclient.c32
2 files changed, 29 insertions, 10 deletions
diff --git a/gtk2/ibusim.c b/gtk2/ibusim.c
index 577c862..ec33a10 100644
--- a/gtk2/ibusim.c
+++ b/gtk2/ibusim.c
@@ -57,8 +57,11 @@ im_module_exit (void)
GtkIMContext *
im_module_create (const gchar *context_id)
{
- if (strcmp (context_id, "ibus") == 0)
- return ibus_im_client_create_im_context (_client);
+ if (strcmp (context_id, "ibus") == 0) {
+ IBusIMContext *context;
+ context = ibus_im_client_create_im_context (_client);
+ return GTK_IM_CONTEXT(context);
+ }
return NULL;
}
diff --git a/gtk2/ibusimclient.c b/gtk2/ibusimclient.c
index 57fc801..2ef3b62 100644
--- a/gtk2/ibusimclient.c
+++ b/gtk2/ibusimclient.c
@@ -84,6 +84,8 @@ static void ibus_im_client_disconnected (IBusIMClient *client);
static const gchar *
_ibus_im_client_create_input_context
(IBusIMClient *client);
+static void _ibus_im_client_ibus_open (IBusIMClient *client);
+static void _ibus_im_client_ibus_close (IBusIMClient *client);
static gboolean _ibus_call_with_reply_and_block
(DBusConnection *connection,
@@ -131,6 +133,10 @@ static GtkObjectClass *parent_class = NULL;
GType
ibus_im_client_get_type (void)
{
+ if (ibus_type_im_client == 0) {
+ ibus_im_client_register_type (NULL);
+ }
+
g_assert (ibus_type_im_client != 0);
return ibus_type_im_client;
}
@@ -140,14 +146,14 @@ ibus_im_client_register_type (GTypeModule *type_module)
{
static const GTypeInfo ibus_im_client_info = {
sizeof (IBusIMClientClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) ibus_im_client_class_init,
- NULL, /* class finialize */
- NULL, /* class data */
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) ibus_im_client_class_init,
+ NULL, /* class finialize */
+ NULL, /* class data */
sizeof (IBusIMClient),
0,
- (GInstanceInitFunc) ibus_im_client_init,
+ (GInstanceInitFunc) ibus_im_client_init,
};
if (! ibus_type_im_client ) {
@@ -215,10 +221,14 @@ ibus_im_client_class_init (IBusIMClientClass *klass)
void ibus_im_client_connected (IBusIMClient *client)
{
+ /* do nothing */
}
+
void ibus_im_client_disconnected (IBusIMClient *client)
{
+ /* do nothing */
}
+
/*
* open ibus connection
*/
@@ -316,15 +326,21 @@ _ibus_im_client_ibus_open (IBusIMClient *client)
}
dbus_connection_setup_with_g_main (priv->ibus, NULL);
+ g_signal_emit (client, client_signals[CONNECTED], 0);
+
GList *p;
for (p = priv->contexts; p != NULL; p = g_list_next (p)) {
IBusIMContext *context = IBUS_IM_CONTEXT (p->data);
const gchar *ic = _ibus_im_client_create_input_context (client);
+
+ if (ic == NULL) {
+ _ibus_im_client_ibus_close (client);
+ return;
+ }
g_hash_table_insert (priv->ic_table, g_strdup (ic), context);
ibus_im_context_set_ic (context, ic);
}
- g_signal_emit (client, client_signals[CONNECTED], 0);
}
/*
@@ -347,6 +363,7 @@ _ibus_im_client_ibus_close (IBusIMClient *client)
dbus_connection_close (priv->ibus);
dbus_connection_unref (priv->ibus);
priv->ibus = NULL;
+ g_signal_emit (client, client_signals[DISCONNECTED], 0);
}
}
@@ -844,7 +861,6 @@ static void
_ibus_signal_disconnected_handler (DBusConnection *connection, DBusMessage *message, IBusIMClient *client)
{
_ibus_im_client_ibus_close (client);
- g_signal_emit (client, client_signals[DISCONNECTED], 0);
}
static void