static gboolean _linphone_status_icon_find_first_available_impl( const _LinphoneStatusIconDesc **desc, LinphoneStatusIconDescFindResultCb cb, void *user_data) { gboolean result; _LinphoneStatusIconDescSearchCtx *ctx = g_new0(_LinphoneStatusIconDescSearchCtx, 1); ctx->cb = cb; ctx->user_data = user_data; ms_message("StatusIcon: looking for implementation..."); for(ctx->i=_linphone_status_icon_impls; ctx->i; ctx->i = g_slist_next(ctx->i)) { if(_linphone_status_icon_desc_is_supported( (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0), &result, (LinphoneStatusIconDescIsSupportedResultCb)_linphone_status_icon_desc_is_supported_result_cb, ctx)) { if(result) { *desc = (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0); ms_message("StatusIcon: found implementation: %s", (*desc)->impl_name); goto sync_return; } } else { return 0; } } g_warning("StatusIcon: no implementation found"); *desc = NULL; sync_return: g_free(ctx); return 1; }
static gboolean _linphone_status_icon_find_first_available_impl( const _LinphoneStatusIconDesc **desc, LinphoneStatusIconDescFindResultCb cb, void *user_data) { gboolean result; _LinphoneStatusIconDescSearchCtx *ctx = g_new0(_LinphoneStatusIconDescSearchCtx, 1); ctx->cb = cb; ctx->user_data = user_data; for(ctx->i=_linphone_status_icon_impls; ctx->i; ctx->i = g_slist_next(ctx->i)) { if(_linphone_status_icon_desc_is_supported( (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0), &result, (LinphoneStatusIconDescIsSupportedResultCb)_linphone_status_icon_desc_is_supported_result_cb, ctx)) { if(result) { *desc = (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0); goto sync_return; } } else { return 0; } } *desc = NULL; sync_return: g_free(ctx); return 1; }
static void _linphone_status_icon_desc_is_supported_result_cb( const _LinphoneStatusIconDesc *desc, gboolean result, _LinphoneStatusIconDescSearchCtx *ctx) { if(!result) { ctx->i = g_slist_next(ctx->i); for(; ctx->i; ctx->i = g_slist_next(ctx->i)) { if(_linphone_status_icon_desc_is_supported( (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0), &result, (LinphoneStatusIconDescIsSupportedResultCb)_linphone_status_icon_desc_is_supported_result_cb, ctx)) { if(result) break; } else return; } } if(ctx->i) { const _LinphoneStatusIconDesc *desc = (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0); ms_message("StatusIcon: found implementation: %s", desc->impl_name); if(ctx->cb) ctx->cb(desc, ctx->user_data); } else { g_warning("StatusIcon: no implementation found"); } g_free(ctx); }
static void _linphone_status_icon_desc_is_supported_result_cb( const _LinphoneStatusIconDesc *desc, gboolean result, _LinphoneStatusIconDescSearchCtx *ctx) { if(!result) { ; for(; ctx->i; ctx->i = g_slist_next(ctx->i)) { if(_linphone_status_icon_desc_is_supported( (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0), &result, (LinphoneStatusIconDescIsSupportedResultCb)_linphone_status_icon_desc_is_supported_result_cb, ctx)) { if(result) break; } else return; } } if(ctx->cb) ctx->cb((const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0), ctx->user_data); g_free(ctx); }