ui/common/context.c

changeset 20
2dda1ad6dc7a
parent 18
06be29a56f8b
child 21
012418e7dc90
--- 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 <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <inttypes.h>
 
 #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;
+}

mercurial