diff -Nur gtk+-2.2.2-bak/gtk/gtkentry.c gtk+-2.2.2/gtk/gtkentry.c --- gtk+-2.2.2-bak/gtk/gtkentry.c 2003-06-09 01:18:02.000000000 +0900 +++ gtk+-2.2.2/gtk/gtkentry.c 2003-08-09 00:39:16.000000000 +0900 @@ -179,6 +179,8 @@ static void gtk_entry_drag_data_delete (GtkWidget *widget, GdkDragContext *context); +static GtkIMContext *gtk_entry_get_im_context(GtkWidget *widget); + /* GtkEditable method implementations */ static void gtk_entry_insert_text (GtkEditable *editable, @@ -424,6 +426,8 @@ widget_class->popup_menu = gtk_entry_popup_menu; + widget_class->get_im_context = gtk_entry_get_im_context; + class->move_cursor = gtk_entry_move_cursor; class->insert_at_cursor = gtk_entry_insert_at_cursor; class->delete_from_cursor = gtk_entry_delete_from_cursor; @@ -4255,6 +4259,16 @@ gtk_editable_delete_text (editable, sel_start, sel_end); } + +/* + * for GtkIMContext. + */ +static GtkIMContext * +gtk_entry_get_im_context(GtkWidget *widget) +{ + return GTK_ENTRY(widget)->im_context; +} + /* We display the cursor when * * - the selection is empty, AND diff -Nur gtk+-2.2.2-bak/gtk/gtktextview.c gtk+-2.2.2/gtk/gtktextview.c --- gtk+-2.2.2-bak/gtk/gtktextview.c 2003-06-06 08:04:36.000000000 +0900 +++ gtk+-2.2.2/gtk/gtktextview.c 2003-08-09 00:39:16.000000000 +0900 @@ -225,6 +225,9 @@ guint info, guint time); +/* for GtkIMContext */ +static GtkIMContext *gtk_text_view_get_im_context(GtkWidget *widget); + static void gtk_text_view_set_scroll_adjustments (GtkTextView *text_view, GtkAdjustment *hadj, GtkAdjustment *vadj); @@ -519,6 +522,8 @@ widget_class->drag_data_received = gtk_text_view_drag_data_received; widget_class->popup_menu = gtk_text_view_popup_menu; + + widget_class->get_im_context = gtk_text_view_get_im_context; container_class->add = gtk_text_view_add; container_class->remove = gtk_text_view_remove; @@ -5903,6 +5908,15 @@ time); } +/* + * for GtkIMContext + */ +static GtkIMContext * +gtk_text_view_get_im_context (GtkWidget *widget) +{ + return GTK_TEXT_VIEW(widget)->im_context; +} + static GtkAdjustment* get_hadjustment (GtkTextView *text_view) { diff -Nur gtk+-2.2.2-bak/gtk/gtkwidget.c gtk+-2.2.2/gtk/gtkwidget.c --- gtk+-2.2.2-bak/gtk/gtkwidget.c 2003-06-09 10:54:48.000000000 +0900 +++ gtk+-2.2.2/gtk/gtkwidget.c 2003-08-09 00:39:16.000000000 +0900 @@ -394,6 +394,9 @@ klass->no_expose_event = NULL; + /* for getting GtkIMContext */ + klass->get_im_context = NULL; + g_object_class_install_property (gobject_class, PROP_NAME, g_param_spec_string ("name", @@ -6921,3 +6924,17 @@ return gtk_clipboard_get_for_display (gtk_widget_get_display (widget), selection); } + +GtkIMContext * +gtk_widget_get_im_context(GtkWidget *widget) +{ + GtkWidgetClass *klass; + + g_return_val_if_fail (GTK_IS_WIDGET(widget), NULL); + + klass = GTK_WIDGET_GET_CLASS (widget); + if (klass->get_im_context) + return klass->get_im_context (widget); + + return NULL; +} diff -Nur gtk+-2.2.2-bak/gtk/gtkwidget.h gtk+-2.2.2/gtk/gtkwidget.h --- gtk+-2.2.2-bak/gtk/gtkwidget.h 2002-11-11 05:52:34.000000000 +0900 +++ gtk+-2.2.2/gtk/gtkwidget.h 2003-08-09 00:39:16.000000000 +0900 @@ -34,6 +34,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -400,6 +401,10 @@ void (* screen_changed) (GtkWidget *widget, GdkScreen *previous_screen); + + /* for getting GtkIMContext */ + GtkIMContext *(* get_im_context) (GtkWidget *widget); + /* Padding for future expansion */ void (*_gtk_reserved1) (void); void (*_gtk_reserved2) (void); @@ -407,7 +412,6 @@ void (*_gtk_reserved4) (void); void (*_gtk_reserved5) (void); void (*_gtk_reserved6) (void); - void (*_gtk_reserved7) (void); }; struct _GtkWidgetAuxInfo @@ -599,6 +603,9 @@ /* Accessibility support */ AtkObject* gtk_widget_get_accessible (GtkWidget *widget); +/* for GtkIMContext */ +GtkIMContext *gtk_widget_get_im_context (GtkWidget *widget); + /* The following functions must not be called on an already * realized widget. Because it is possible that somebody * can call get_colormap() or get_visual() and save the diff -Nur gtk+-2.2.2-bak/gtk/gtkwindow.c gtk+-2.2.2/gtk/gtkwindow.c --- gtk+-2.2.2-bak/gtk/gtkwindow.c 2003-06-06 09:17:59.000000000 +0900 +++ gtk+-2.2.2/gtk/gtkwindow.c 2003-08-09 00:41:43.000000000 +0900 @@ -4044,14 +4044,19 @@ GtkWindow *window; GtkWidget *focus; gboolean handled; + GtkIMContext *im_context; window = GTK_WINDOW (widget); handled = FALSE; + /* bypass to GtkIMContext */ + focus = window->focus_widget; + im_context = gtk_widget_get_im_context(focus); + /* Check for mnemonics and accelerators */ - if (!handled) + if (!im_context && !handled) handled = _gtk_window_activate_key (window, event); if (!handled) @@ -4082,6 +4087,9 @@ g_object_unref (focus); } + if (im_context && !handled) + handled = _gtk_window_activate_key (window, event); + /* Chain up, invokes binding set */ if (!handled && GTK_WIDGET_CLASS (parent_class)->key_press_event) handled = GTK_WIDGET_CLASS (parent_class)->key_press_event (widget, event);