Example #1
0
static void
dst_cb(void *opaque, prop_event_t event, ...)
{
  prop_reorder_t *pr = opaque;
  va_list ap;
  prop_t *p, *before;

  va_start(ap, event);

  switch(event) {
  case PROP_REQ_MOVE_CHILD:
    p = va_arg(ap, prop_t *);
    before = va_arg(ap, prop_t *);
    prop_move0(p, before, pr->pr_dstsub);
    save_order(pr);
    break;

  default:
    break;
  }
}
Example #2
0
static void
src_cb(void *opaque, prop_event_t event, ...)
{
  prop_concat_source_t *pcs = opaque;
  prop_concat_t *pc = pcs->pcs_pc;
  prop_t *p, *q, *out, *before;
  va_list ap;
  va_start(ap, event);

  switch(event) {
  case PROP_ADD_CHILD:
    p = va_arg(ap, prop_t *);
    out = prop_create_root(NULL);
    prop_tag_set(p, pcs, out);
    prop_link0(p, out, NULL, 0);

    prop_set_parent0(out, pc->pc_dst, find_next_out(pcs), NULL);

    if(pcs->pcs_count == 0) {
      pcs->pcs_first = out;
      if(pcs->pcs_header != NULL)
	prop_set_parent0(pcs->pcs_header, pc->pc_dst, out, NULL);
    }
    pcs->pcs_count++;
    break;

  case PROP_ADD_CHILD_BEFORE:
    p = va_arg(ap, prop_t *);
    out = prop_create_root(NULL);
    prop_tag_set(p, pcs, out);
    prop_link0(p, out, NULL, 0);

    q = va_arg(ap, prop_t *);
    before = prop_tag_get(q, pcs);
    assert(before != NULL);
    prop_set_parent0(out, pc->pc_dst, before, NULL);
    
    pcs->pcs_count++;
    break;

    


  case PROP_DEL_CHILD:
    p = va_arg(ap, prop_t *);
    out = prop_tag_clear(p, pcs);
    before = TAILQ_NEXT(out, hp_parent_link);
    prop_destroy0(out);

    pcs->pcs_count--;
    if(pcs->pcs_count == 0) {
      pcs->pcs_first = NULL;
      if(pcs->pcs_header != NULL)
	prop_unparent0(pcs->pcs_header, NULL);
    } else if(pcs->pcs_first == out) {
      pcs->pcs_first = before;
    }

    break;

  case PROP_MOVE_CHILD:
    p = va_arg(ap, prop_t *);
    q = va_arg(ap, prop_t *);
    prop_move0(prop_tag_get(p, pcs),
	       q != NULL ? prop_tag_get(q, pcs) : find_next_out(pcs), NULL);
    break;

  case PROP_SET_VOID:
    break;

  case PROP_SET_DIR:
  case PROP_REQ_DELETE_VECTOR:
  case PROP_HAVE_MORE_CHILDS:
  case PROP_WANT_MORE_CHILDS:
    break;

  default:
    printf("Cant handle event %d\n", event);
    abort();
  }
}