summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/reference/gtk/gtk-sections.txt4
-rw-r--r--gtk/gtk.symbols4
-rw-r--r--gtk/gtkentry.c49
-rw-r--r--gtk/gtkentry.h4
-rw-r--r--gtk/gtktextview.c61
-rw-r--r--gtk/gtktextview.h4
6 files changed, 124 insertions, 2 deletions
diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt
index 684b30db99..692b05f201 100644
--- a/docs/reference/gtk/gtk-sections.txt
+++ b/docs/reference/gtk/gtk-sections.txt
@@ -1316,6 +1316,8 @@ gtk_entry_get_progress_fraction
gtk_entry_set_progress_pulse_step
gtk_entry_get_progress_pulse_step
gtk_entry_progress_pulse
+gtk_entry_im_context_filter_keypress
+gtk_entry_reset_im_context
GtkEntryIconPosition
gtk_entry_set_icon_from_pixbuf
gtk_entry_set_icon_from_stock
@@ -4129,6 +4131,8 @@ gtk_text_view_get_tabs
gtk_text_view_set_accepts_tab
gtk_text_view_get_accepts_tab
gtk_text_view_get_default_attributes
+gtk_text_view_im_context_filter_keypress
+gtk_text_view_reset_im_context
GTK_TEXT_VIEW_PRIORITY_VALIDATE
<SUBSECTION Standard>
GTK_TEXT_VIEW
diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols
index a285bfde05..2e1b8f7da5 100644
--- a/gtk/gtk.symbols
+++ b/gtk/gtk.symbols
@@ -1384,10 +1384,12 @@ gtk_entry_get_type G_GNUC_CONST
gtk_entry_get_visibility
gtk_entry_get_width_chars
gtk_entry_get_text_window
+gtk_entry_im_context_filter_keypress
gtk_entry_layout_index_to_text_index
gtk_entry_new
gtk_entry_new_with_buffer
gtk_entry_progress_pulse
+gtk_entry_reset_im_context
gtk_entry_set_activates_default
gtk_entry_set_alignment
gtk_entry_set_buffer
@@ -4286,12 +4288,14 @@ gtk_text_view_get_visible_rect
gtk_text_view_get_window
gtk_text_view_get_window_type
gtk_text_view_get_wrap_mode
+gtk_text_view_im_context_filter_keypress
gtk_text_view_move_child
gtk_text_view_move_mark_onscreen
gtk_text_view_move_visually
gtk_text_view_new
gtk_text_view_new_with_buffer
gtk_text_view_place_cursor_onscreen
+gtk_text_view_reset_im_context
gtk_text_view_scroll_mark_onscreen
gtk_text_view_scroll_to_iter
gtk_text_view_scroll_to_mark
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index 20653b4fca..066fd9cb8a 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -5807,6 +5807,55 @@ _gtk_entry_reset_im_context (GtkEntry *entry)
}
}
+/**
+ * gtk_entry_reset_im_context:
+ * @entry: a #GtkEntry
+ *
+ * Reset the input method context of the entry if needed.
+ *
+ * This can be necessary in the case where modifying the buffer
+ * would confuse on-going input method behavior.
+ *
+ * Since: 2.22
+ */
+void
+gtk_entry_reset_im_context (GtkEntry *entry)
+{
+ g_return_if_fail (GTK_IS_ENTRY (entry));
+
+ _gtk_entry_reset_im_context (entry);
+}
+
+/**
+ * gtk_entry_im_context_filter_keypress:
+ * @entry: a #GtkEntry
+ * @event: the key event
+ *
+ * Allow the #GtkEntry input method to internally handle key press
+ * and release events. If this function returns %TRUE, then no further
+ * processing should be done for this key event. See
+ * gtk_im_context_filter_keypress().
+ *
+ * Note that you are expected to call this function from your handler
+ * when overriding key event handling. This is needed in the case when
+ * you need to insert your own key handling between the input method
+ * and the default key event handling of the #GtkEntry.
+ * See gtk_text_view_reset_im_context() for an example of use.
+ *
+ * Return value: %TRUE if the input method handled the key event.
+ *
+ * Since: 2.22
+ */
+gboolean
+gtk_entry_im_context_filter_keypress (GtkEntry *entry,
+ GdkEventKey *key)
+{
+ g_return_val_if_fail (GTK_IS_ENTRY (entry), FALSE);
+
+ return gtk_im_context_filter_keypress (entry->im_context, key);
+}
+
+
static gint
gtk_entry_find_position (GtkEntry *entry,
gint x)
diff --git a/gtk/gtkentry.h b/gtk/gtkentry.h
index 0c82c63224..e2044959a6 100644
--- a/gtk/gtkentry.h
+++ b/gtk/gtkentry.h
@@ -306,6 +306,10 @@ gint gtk_entry_get_current_icon_drag_source (GtkEntry *
GdkWindow * gtk_entry_get_icon_window (GtkEntry *entry,
GtkEntryIconPosition icon_pos);
+gboolean gtk_entry_im_context_filter_keypress (GtkEntry *entry,
+ GdkEventKey *key);
+void gtk_entry_reset_im_context (GtkEntry *entry);
+
/* Deprecated compatibility functions
*/
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index e28610127d..f12621d4ec 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -297,7 +297,6 @@ static void gtk_text_view_set_attributes_from_style (GtkTextView *tex
static void gtk_text_view_ensure_layout (GtkTextView *text_view);
static void gtk_text_view_destroy_layout (GtkTextView *text_view);
static void gtk_text_view_check_keymap_direction (GtkTextView *text_view);
-static void gtk_text_view_reset_im_context (GtkTextView *text_view);
static void gtk_text_view_start_selection_drag (GtkTextView *text_view,
const GtkTextIter *iter,
GdkEventButton *event);
@@ -6574,9 +6573,22 @@ gtk_text_view_destroy_layout (GtkTextView *text_view)
}
}
-static void
+/**
+ * gtk_text_view_reset_im_context:
+ * @text_view: a #GtkTextView
+ *
+ * Reset the input method context of the text view if needed.
+ *
+ * This can be necessary in the case where modifying the buffer
+ * would confuse on-going input method behavior.
+ *
+ * Since: 2.22
+ */
+void
gtk_text_view_reset_im_context (GtkTextView *text_view)
{
+ g_return_if_fail (GTK_IS_TEXT_VIEW (text_view));
+
if (text_view->need_im_reset)
{
text_view->need_im_reset = FALSE;
@@ -6584,6 +6596,51 @@ gtk_text_view_reset_im_context (GtkTextView *text_view)
}
}
+/**
+ * gtk_text_view_im_context_filter_keypress:
+ * @text_view: a #GtkTextView
+ * @event: the key event
+ *
+ * Allow the #GtkTextView input method to internally handle key press
+ * and release events. If this function returns %TRUE, then no further
+ * processing should be done for this key event. See
+ * gtk_im_context_filter_keypress().
+ *
+ * Note that you are expected to call this function from your handler
+ * when overriding key event handling. This is needed in the case when
+ * you need to insert your own key handling between the input method
+ * and the default key event handling of the #GtkTextView.
+ *
+ * |[
+ * static gboolean
+ * gtk_foo_bar_key_press_event (GtkWidget *widget,
+ * GdkEventKey *event)
+ * {
+ * if ((key->keyval == GDK_Return || key->keyval == GDK_KP_Enter))
+ * {
+ * if (gtk_text_view_im_context_filter_keypress (GTK_TEXT_VIEW (view), event))
+ * return TRUE;
+ * }
+ *
+ * /&ast; Do some stuff &ast;/
+ *
+ * return GTK_WIDGET_CLASS (gtk_foo_bar_parent_class)->key_press_event (widget, event);
+ * }
+ * ]|
+ *
+ * Return value: %TRUE if the input method handled the key event.
+ *
+ * Since: 2.22
+ */
+gboolean
+gtk_text_view_im_context_filter_keypress (GtkTextView *text_view,
+ GdkEventKey *key)
+{
+ g_return_val_if_fail (GTK_IS_TEXT_VIEW (text_view), FALSE);
+
+ return gtk_im_context_filter_keypress (text_view->im_context, key);
+}
+
/*
* DND feature
*/
diff --git a/gtk/gtktextview.h b/gtk/gtktextview.h
index 5fe62bac9a..dca0c88a78 100644
--- a/gtk/gtktextview.h
+++ b/gtk/gtktextview.h
@@ -307,6 +307,10 @@ gboolean gtk_text_view_move_visually (GtkTextView *text_v
GtkTextIter *iter,
gint count);
+gboolean gtk_text_view_im_context_filter_keypress (GtkTextView *text_view,
+ GdkEventKey *key);
+void gtk_text_view_reset_im_context (GtkTextView *text_view);
+
/* Adding child widgets */
void gtk_text_view_add_child_at_anchor (GtkTextView *text_view,
GtkWidget *child,