Chandra
view release on metacpan or search on metacpan
xs/dragdrop.xs view on Meta::CPAN
SV *callback
CODE:
{
HV *hv = (HV *)SvRV(self);
SV **h_svp = hv_fetchs(hv, "_handlers", 0);
HV *handlers = (HV *)SvRV(*h_svp);
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV)
croak("on_internal_drop() requires a coderef");
(void)hv_stores(handlers, "internal_drop", newSVsv(callback));
RETVAL = SvREFCNT_inc(self);
}
OUTPUT:
RETVAL
# ---- add_drop_zone($selector, $coderef) ----
SV *
add_drop_zone(self, selector, callback)
SV *self
SV *selector
SV *callback
CODE:
{
HV *hv = (HV *)SvRV(self);
SV **dz_svp = hv_fetchs(hv, "_drop_zones", 0);
HV *zones = (HV *)SvRV(*dz_svp);
STRLEN slen;
const char *sel = SvPV(selector, slen);
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV)
croak("add_drop_zone() requires a coderef");
(void)hv_store(zones, sel, (I32)slen, newSVsv(callback), 0);
RETVAL = SvREFCNT_inc(self);
}
OUTPUT:
RETVAL
# ---- remove_drop_zone($selector) ----
SV *
remove_drop_zone(self, selector)
SV *self
SV *selector
CODE:
{
HV *hv = (HV *)SvRV(self);
SV **dz_svp = hv_fetchs(hv, "_drop_zones", 0);
HV *zones = (HV *)SvRV(*dz_svp);
STRLEN slen;
const char *sel = SvPV(selector, slen);
(void)hv_delete(zones, sel, (I32)slen, G_DISCARD);
RETVAL = SvREFCNT_inc(self);
}
OUTPUT:
RETVAL
# ---- drop_zones() - list registered selectors ----
void
drop_zones(self)
SV *self
PPCODE:
{
HV *hv = (HV *)SvRV(self);
SV **dz_svp = hv_fetchs(hv, "_drop_zones", 0);
HV *zones = (HV *)SvRV(*dz_svp);
HE *entry;
hv_iterinit(zones);
while ((entry = hv_iternext(zones)) != NULL) {
I32 klen;
const char *key = hv_iterkey(entry, &klen);
XPUSHs(sv_2mortal(newSVpvn(key, klen)));
}
}
# ---- make_draggable($selector, %opts) ----
SV *
make_draggable(self, selector, ...)
SV *self
SV *selector
CODE:
{
HV *hv = (HV *)SvRV(self);
SV **dr_svp = hv_fetchs(hv, "_draggables", 0);
HV *drags = (HV *)SvRV(*dr_svp);
STRLEN slen;
const char *sel = SvPV(selector, slen);
HV *opts = newHV();
I32 i;
for (i = 2; i + 1 < items; i += 2) {
const char *key = SvPV_nolen(ST(i));
SV *val = ST(i + 1);
if (strEQ(key, "data")) {
(void)hv_stores(opts, "data", newSVsv(val));
} else if (strEQ(key, "data_from")) {
(void)hv_stores(opts, "data_from", newSVsv(val));
}
}
(void)hv_store(drags, sel, (I32)slen, newRV_noinc((SV *)opts), 0);
RETVAL = SvREFCNT_inc(self);
}
OUTPUT:
RETVAL
# ---- remove_draggable($selector) ----
SV *
remove_draggable(self, selector)
SV *self
SV *selector
CODE:
{
HV *hv = (HV *)SvRV(self);
SV **dr_svp = hv_fetchs(hv, "_draggables", 0);
HV *drags = (HV *)SvRV(*dr_svp);
STRLEN slen;
const char *sel = SvPV(selector, slen);
(void)hv_delete(drags, sel, (I32)slen, G_DISCARD);
RETVAL = SvREFCNT_inc(self);
( run in 0.484 second using v1.01-cache-2.11-cpan-71847e10f99 )