IM Context Filter for Chinese Input
- From: Gaurav Jain <gaurav_anywhere yahoo com>
- To: gtk-i18n-list gnome org
- Subject: IM Context Filter for Chinese Input
- Date: Mon, 19 Sep 2005 04:36:22 -0700 (PDT)
Hi,
I'm trying to write an application, in which there is
a GtkEntry, in which the user will type chinese
characters using the IME available on Red Hat (xcin).
Refer http://seba.studentenweb.org/thesis/linux.php on
how i'm trying to type the characters.
Now I have a GtkEntry, in which I connect a
"key-press-event" signal, so that I can process the
characters that are typed.
But before I process the characters, I must let the
IME process the characters typed by calling
gtk_im_context_filter_keypress() function. If this
function returns TRUE, I return TRUE from the
key-press-callback. Otherwise I do something with the
character, and then return FALSE from the function.
The problem is that when I type somethign in chinese,
and confirm the input, and then if I press a function
key such as HOME, then the program goes into an
infinite loop, calling my key-press-callback
repeatedly.
Please help me understand if there is something wrong
with my code, or is this a bug with GTK IME?
Thanks,
Gaurav
See code of my small sample program below.
----------------------
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>
gboolean keypresscallback(GtkWidget *widget, GdkEvent
*event, gpointer data)
{
printf("keypresscallback\n");
if
(gtk_im_context_filter_keypress(GTK_ENTRY(widget)->im_context,
&(event->key)))
return TRUE;
return FALSE;
}
int main( int argc,
char *argv[] )
{
GtkWidget *window;
GtkWidget *vbox, *hbox;
GtkWidget *entry1;
GtkWidget *entry2;
GtkWidget *entry3;
GtkWidget *entry4;
gtk_init (&argc, &argv);
/* create a new window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request (GTK_WIDGET (window),
200, 100);
gtk_window_set_title (GTK_WINDOW (window), "GTK
Entry");
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (gtk_main_quit),
NULL);
g_signal_connect_swapped (G_OBJECT (window),
"delete_event",
G_CALLBACK
(gtk_widget_destroy),
G_OBJECT (window));
vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_widget_show (vbox);
entry1 = gtk_entry_new();
g_signal_connect (G_OBJECT (entry1),
"key-press-event",
G_CALLBACK (keypresscallback),
NULL);
gtk_box_pack_start (GTK_BOX (vbox), entry1, TRUE,
TRUE, 0);
gtk_widget_show (entry1);
hbox = gtk_hbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (vbox), hbox);
gtk_widget_show (hbox);
gtk_widget_show (window);
gtk_main();
return 0;
}
__________________________________
Yahoo! Mail - PC Magazine Editors' Choice 2005
http://mail.yahoo.com
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]