diff --git a/ChangeLog b/ChangeLog index 3e0b5f4010..0976552875 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ 2006-10-03 Matthias Clasen + Fix interaction of GtkEntryCompletion with input + methods. (#354495, Diego Escalante Urrelo) + + * gtk/gtkentry.c (gtk_entry_completion_key_press): Only reset + the im context if we actually handle the key event. + + * gtk/gtkentrycompletion.c: Also propagate key release events + to the entry. + +2006-10-03 Matthias Clasen * gtk/gtkprintsettings.c (gtk_print_settings_get_duplex): Fix a typo. (#359052, Ghee Teo) diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index a786791848..701c4347a4 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -5451,8 +5451,6 @@ gtk_entry_completion_key_press (GtkWidget *widget, if (!GTK_WIDGET_MAPPED (completion->priv->popup_window)) return FALSE; - _gtk_entry_reset_im_context (GTK_ENTRY (widget)); - matches = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (completion->priv->filter_model), NULL); if (completion->priv->actions) @@ -5545,6 +5543,7 @@ gtk_entry_completion_key_press (GtkWidget *widget, } else if (event->keyval == GDK_Escape) { + _gtk_entry_reset_im_context (GTK_ENTRY (widget)); _gtk_entry_completion_popdown (completion); return TRUE; @@ -5556,6 +5555,7 @@ gtk_entry_completion_key_press (GtkWidget *widget, GtkDirectionType dir = event->keyval == GDK_ISO_Left_Tab ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD; + _gtk_entry_reset_im_context (GTK_ENTRY (widget)); _gtk_entry_completion_popdown (completion); gtk_widget_child_focus (gtk_widget_get_toplevel (widget), dir); @@ -5566,6 +5566,7 @@ gtk_entry_completion_key_press (GtkWidget *widget, event->keyval == GDK_KP_Enter || event->keyval == GDK_Return) { + _gtk_entry_reset_im_context (GTK_ENTRY (widget)); _gtk_entry_completion_popdown (completion); if (completion->priv->current_selected < matches) @@ -5608,6 +5609,8 @@ gtk_entry_completion_key_press (GtkWidget *widget, { GtkTreePath *path; + _gtk_entry_reset_im_context (GTK_ENTRY (widget)); + path = gtk_tree_path_new_from_indices (completion->priv->current_selected - matches, -1); g_signal_emit_by_name (completion, "action_activated", diff --git a/gtk/gtkentrycompletion.c b/gtk/gtkentrycompletion.c index 179bb01418..e779cf3c16 100644 --- a/gtk/gtkentrycompletion.c +++ b/gtk/gtkentrycompletion.c @@ -101,7 +101,7 @@ static void gtk_entry_completion_reorder (GtkCellLayout static gboolean gtk_entry_completion_visible_func (GtkTreeModel *model, GtkTreeIter *iter, gpointer data); -static gboolean gtk_entry_completion_popup_key_press (GtkWidget *widget, +static gboolean gtk_entry_completion_popup_key_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data); static gboolean gtk_entry_completion_popup_button_press (GtkWidget *widget, @@ -436,7 +436,10 @@ gtk_entry_completion_init (GtkEntryCompletion *completion) priv->popup_window = gtk_window_new (GTK_WINDOW_POPUP); gtk_window_set_resizable (GTK_WINDOW (priv->popup_window), FALSE); g_signal_connect (priv->popup_window, "key_press_event", - G_CALLBACK (gtk_entry_completion_popup_key_press), + G_CALLBACK (gtk_entry_completion_popup_key_event), + completion); + g_signal_connect (priv->popup_window, "key_release_event", + G_CALLBACK (gtk_entry_completion_popup_key_event), completion); g_signal_connect (priv->popup_window, "button_press_event", G_CALLBACK (gtk_entry_completion_popup_button_press), @@ -749,7 +752,7 @@ gtk_entry_completion_visible_func (GtkTreeModel *model, } static gboolean -gtk_entry_completion_popup_key_press (GtkWidget *widget, +gtk_entry_completion_popup_key_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) {