Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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);
}
Пример #4
0
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);
}