예제 #1
0
static VALUE
rg_set_surrounding(VALUE self, VALUE text, VALUE cursor_index)
{
    StringValue(text);
    gtk_im_context_set_surrounding(_SELF(self),
                                   RSTRING_PTR(text), RSTRING_LEN(text),
                                   NUM2INT(cursor_index));
    return self;
}
예제 #2
0
static gboolean
st_im_text_retrieve_surrounding_cb (GtkIMContext *context,
                                    StIMText     *imtext)
{
  ClutterText *clutter_text = CLUTTER_TEXT (imtext);
  ClutterTextBuffer *buffer;
  const gchar *text;
  gint cursor_pos;

  buffer = clutter_text_get_buffer (clutter_text);
  text = clutter_text_buffer_get_text (buffer);

  cursor_pos = clutter_text_get_cursor_position (clutter_text);
  if (cursor_pos < 0)
    cursor_pos = clutter_text_buffer_get_length (buffer);

  gtk_im_context_set_surrounding (context, text,
                                  /* length and cursor_index are in bytes */
                                  clutter_text_buffer_get_bytes (buffer),
                                  g_utf8_offset_to_pointer (text, cursor_pos) - text);

  return TRUE;
}
예제 #3
0
static void
fcitx_im_context_set_surrounding (GtkIMContext *context,
                                  const gchar *text,
                                  gint len,
                                  gint cursor_index)
{
    g_return_if_fail (context != NULL);
    g_return_if_fail (FCITX_IS_IM_CONTEXT (context));
    g_return_if_fail (text != NULL);
    g_return_if_fail (strlen (text) >= len);
    g_return_if_fail (0 <= cursor_index && cursor_index <= len);

    FcitxIMContext *fcitxcontext = FCITX_IM_CONTEXT (context);

    if (fcitx_client_is_valid(fcitxcontext->client) && !(fcitxcontext->capacity & CAPACITY_PASSWORD)) {
        guint cursor_pos;
        guint utf8_len;
        gchar *p;

        p = g_strndup (text, len);
        cursor_pos = g_utf8_strlen (p, cursor_index);
        utf8_len = g_utf8_strlen(p, len);

        guint anchor_pos = get_selection_anchor_point (fcitxcontext,
                           cursor_pos,
                           utf8_len);
        fcitx_client_set_surrounding_text (fcitxcontext->client,
                                           p,
                                           cursor_pos,
                                           anchor_pos);
        g_free (p);
    }
    gtk_im_context_set_surrounding (fcitxcontext->slave,
                                    text,
                                    len,
                                    cursor_index);
}
boolean scim_bridge_client_imcontext_replace_surrounding_text (ScimBridgeClientIMContext *imcontext, int cursor_position, const char *string)
{
    gtk_im_context_set_surrounding (GTK_IM_CONTEXT (imcontext), string, -1, cursor_position);
    return TRUE;
}