static gboolean st_im_text_key_press_event (ClutterActor *actor, ClutterKeyEvent *event) { StIMText *self = ST_IM_TEXT (actor); StIMTextPrivate *priv = self->priv; ClutterText *clutter_text = CLUTTER_TEXT (actor); gboolean result = FALSE; int old_position; if (clutter_text_get_editable (clutter_text)) { GdkEventKey *event_gdk = key_event_to_gdk (event); if (gtk_im_context_filter_keypress (priv->im_context, event_gdk)) { priv->need_im_reset = TRUE; result = TRUE; } gdk_event_free ((GdkEvent *)event_gdk); } old_position = clutter_text_get_cursor_position (clutter_text); if (!result && CLUTTER_ACTOR_CLASS (st_im_text_parent_class)->key_press_event) result = CLUTTER_ACTOR_CLASS (st_im_text_parent_class)->key_press_event (actor, event); if (clutter_text_get_cursor_position (clutter_text) != old_position) reset_im_context (self); return result; }
static void st_im_text_unrealize (ClutterActor *actor) { StIMText *self = ST_IM_TEXT (actor); StIMTextPrivate *priv = self->priv; reset_im_context (self); gtk_im_context_set_client_window (priv->im_context, NULL); g_object_unref (priv->window); priv->window = NULL; }
static gboolean st_im_text_button_press_event (ClutterActor *actor, ClutterButtonEvent *event) { /* The button press indicates the user moving the cursor, or selecting * etc, so we should abort any current preedit operation. ClutterText * treats all buttons identically, so so do we. */ reset_im_context (ST_IM_TEXT (actor)); if (CLUTTER_ACTOR_CLASS (st_im_text_parent_class)->button_press_event) return CLUTTER_ACTOR_CLASS (st_im_text_parent_class)->button_press_event (actor, event); else return FALSE; }