+static int get_notebook_insertpos(NotebookConfigDialog *wdata, int64_t parent_id) {
+ CxList *nblist = wdata->tab1_notebooks->data;
+ size_t insert_pos = 0;
+ int group_index = -1;
+ CxIterator i = cxListIterator(nblist);
+ cx_foreach(Resource *, res, i) {
+ if(group_index >= 0) {
+ if(res->parent_id != parent_id) {
+ break;
+ }
+ } else if(res->parent_id == parent_id) {
+ group_index = (int)i.index;
+ }
+ insert_pos = i.index;
+ }
+ insert_pos++;
+ return insert_pos;
+}
+
+static void nbconfig_group_onselect(UiEvent *event, void *userdata) {
+ NotebookConfigDialog *wdata = event->window;
+ if(wdata->valuechange || !wdata->selected_notebook) {
+ return;
+ }
+
+ Resource *newparent = ui_list_get(wdata->tab1_groups, event->intval);
+
+ CxList *nblist = wdata->tab1_notebooks->data;
+ size_t res_index = cxListFind(nblist, wdata->selected_notebook);
+
+ cxListRemove(nblist, res_index);
+ int new_insert_pos = get_notebook_insertpos(wdata, newparent->resource_id);
+ cxListInsert(nblist, new_insert_pos, wdata->selected_notebook);
+ ui_list_update(wdata->tab1_notebooks);
+
+ wdata->valuechange = TRUE;
+ ui_list_setselection(wdata->tab1_notebooks, new_insert_pos);
+ wdata->valuechange = FALSE;
+}
+