diff -r a137277f9173 -r 77b09bb52ca0 ui/motif/toolbar.c --- a/ui/motif/toolbar.c Sat Apr 05 15:53:41 2014 +0200 +++ b/ui/motif/toolbar.c Sat Apr 05 18:41:30 2014 +0200 @@ -29,6 +29,7 @@ #include #include #include +#include #include "toolbar.h" #include "button.h" @@ -43,22 +44,37 @@ toolbar_items = ucx_map_new(16); } -void ui_toolitem(char *name, char *label, ui_callback f, void *udata) { +void ui_toolitem(char *name, char *label, ui_callback f, void *userdata) { UiToolItem *item = malloc(sizeof(UiToolItem)); item->item.add_to = (ui_toolbar_add_f)add_toolitem_widget; item->label = label; item->callback = f; - item->userdata = udata; + item->userdata = userdata; + item->groups = NULL; ucx_map_cstr_put(toolbar_items, name, item); } -void ui_toolitem_st(char *name, char *stockid, ui_callback f, void *ud) { +void ui_toolitem_st(char *name, char *stockid, ui_callback f, void *userdata) { + ui_toolitem_stgr(name, stockid, f, userdata, -1); +} + +void ui_toolitem_stgr(char *name, char *stockid, ui_callback f, void *userdata, ...) { UiStToolItem *item = malloc(sizeof(UiStToolItem)); item->item.add_to = (ui_toolbar_add_f)add_toolitem_st_widget; item->stockid = stockid; item->callback = f; - item->userdata = ud; + item->userdata = userdata; + item->groups = NULL; + + // add groups + va_list ap; + va_start(ap, userdata); + int group; + while((group = va_arg(ap, int)) != -1) { + item->groups = ucx_list_append(item->groups, (void*)(intptr_t)group); + } + va_end(ap); ucx_map_cstr_put(toolbar_items, name, item); } @@ -128,6 +144,10 @@ } XtManageChild(button); + + if(item->groups) { + uic_add_group_widget(obj->ctx, button, item->groups); + } } void add_toolitem_st_widget(Widget parent, UiStToolItem *item, UiObject *obj) { @@ -157,4 +177,8 @@ } XtManageChild(button); + + if(item->groups) { + uic_add_group_widget(obj->ctx, button, item->groups); + } }