static void _fcitx_client_create_ic_phase1_finished(GObject *source_object, GAsyncResult *res, gpointer user_data) { FCITX_UNUSED(source_object); fcitx_gclient_debug("_fcitx_client_create_ic_phase1_finished"); g_return_if_fail (user_data != NULL); g_return_if_fail (FCITX_IS_CLIENT(user_data)); FcitxClient* self = (FcitxClient*) user_data; if (self->priv->cancellable) { g_object_unref (self->priv->cancellable); self->priv->cancellable = NULL; } if (self->priv->improxy) g_object_unref(self->priv->improxy); self->priv->improxy = g_dbus_proxy_new_finish(res, NULL); do { if (!self->priv->improxy) { break; } gchar* owner_name = g_dbus_proxy_get_name_owner(self->priv->improxy); if (!owner_name) { g_object_unref(self->priv->improxy); self->priv->improxy = NULL; break; } g_free(owner_name); } while(0); if (!self->priv->improxy) { /* unref for create_ic */ g_object_unref(self); return; } self->priv->cancellable = g_cancellable_new (); char* appname = fcitx_utils_get_process_name(); int pid = getpid(); g_dbus_proxy_call( self->priv->improxy, "CreateICv3", g_variant_new("(si)", appname, pid), G_DBUS_CALL_FLAGS_NONE, -1, /* timeout */ self->priv->cancellable, _fcitx_client_create_ic_cb, self ); free(appname); }
static void _fcitx_client_create_ic_phase1_finished(GObject *source_object, GAsyncResult *res, gpointer user_data) { FcitxClient* self = (FcitxClient*) user_data; GError* error = NULL; if (self->priv->cancellable) { g_object_unref (self->priv->cancellable); self->priv->cancellable = NULL; } if (self->priv->improxy) g_object_unref(self->priv->improxy); self->priv->improxy = g_dbus_proxy_new_for_bus_finish(res, &error); if (error) { g_warning ("Create fcitx input method proxy failed: %s.", error->message); g_error_free(error); } if (!self->priv->improxy) return; gchar* owner_name = g_dbus_proxy_get_name_owner(self->priv->improxy); if (!owner_name) { g_object_unref(self->priv->improxy); self->priv->improxy = NULL; return; } g_free(owner_name); self->priv->cancellable = g_cancellable_new (); char* appname = fcitx_utils_get_process_name(); int pid = getpid(); g_dbus_proxy_call( self->priv->improxy, "CreateICv3", g_variant_new("(si)", appname, pid), G_DBUS_CALL_FLAGS_NONE, -1, /* timeout */ self->priv->cancellable, _fcitx_client_create_ic_cb, self ); free(appname); }