diff -r f8f22eb0b575 -r 2dda1ad6dc7a ui/common/context.c --- a/ui/common/context.c Wed Apr 02 13:21:11 2014 +0200 +++ b/ui/common/context.c Wed Apr 02 20:31:47 2014 +0200 @@ -29,6 +29,7 @@ #include #include #include +#include #include "context.h" #include "../ui/window.h" @@ -41,6 +42,7 @@ ctx->toplevel = toplevel; ctx->vars = ucx_map_new_a(mp->allocator, 16); + ctx->groups = NULL; #ifdef UI_GTK ctx->accel_group = gtk_accel_group_new(); @@ -149,3 +151,32 @@ return 0; } + + + +void ui_set_group(UiContext *ctx, int group) { + if(ucx_list_find(ctx->groups, (void*)(intptr_t)group, NULL, NULL) == -1) { + ctx->groups = ucx_list_append_a(ctx->mempool->allocator, ctx->groups, (void*)(intptr_t)group); + } +} + +void ui_unset_group(UiContext *ctx, int group) { + int i = ucx_list_find(ctx->groups, (void*)(intptr_t)group, NULL, NULL); + if(i != -1) { + UcxList *elm = ucx_list_get(ctx->groups, i); + ctx->groups = ucx_list_remove_a(ctx->mempool->allocator, ctx->groups, elm); + } +} + +int* ui_active_groups(UiContext *ctx, int *ngroups) { + int nelm = ucx_list_size(ctx->groups); + int *groups = calloc(sizeof(int), nelm); + + int i = 0; + UCX_FOREACH(elm, ctx->groups) { + groups[i++] = (int)elm->data; + } + + *ngroups = nelm; + return groups; +}