void connect_cb(FcitxClient *client, void *user_data) { fcitx_client_set_capacity(client, CAPACITY_CLIENT_SIDE_UI); fcitx_client_focus_in(client); fcitx_client_enable_ic(client); }
static void fcitx_im_context_focus_in(GtkIMContext *context) { FcitxLog(LOG_LEVEL, "fcitx_im_context_focus_in"); FcitxIMContext *fcitxcontext = FCITX_IM_CONTEXT(context); if (fcitxcontext->has_focus) return; _fcitx_im_context_set_capacity(fcitxcontext, FALSE); fcitxcontext->has_focus = true; if (_focus_im_context != NULL) { g_assert (_focus_im_context != context); gtk_im_context_focus_out (_focus_im_context); g_assert (_focus_im_context == NULL); } if (fcitx_client_is_valid(fcitxcontext->client)) { fcitx_client_focus_in(fcitxcontext->client); } gtk_im_context_focus_in(fcitxcontext->slave); /* set_cursor_location_internal() will get origin from X server, * it blocks UI. So delay it to idle callback. */ g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, (GSourceFunc) _set_cursor_location_internal, g_object_ref(fcitxcontext), (GDestroyNotify) g_object_unref); _request_surrounding_text (fcitxcontext); g_object_add_weak_pointer ((GObject *) context, (gpointer *) &_focus_im_context); _focus_im_context = context; return; }