Chandra
view release on metacpan or search on metacpan
xs/contextmenu.xs view on Meta::CPAN
for (j = 0; j <= len; j++) {
SV **elem = av_fetch(items_av, j, 0);
HV *item_hv;
SV **l_svp;
if (!elem || !SvROK(*elem) || SvTYPE(SvRV(*elem)) != SVt_PVHV)
continue;
item_hv = (HV *)SvRV(*elem);
l_svp = hv_fetchs(item_hv, "label", 0);
if (!l_svp || !SvOK(*l_svp)) continue;
if (!strEQ(SvPV_nolen(*l_svp), label)) continue;
/* Remove action from registry */
{
SV **id_svp = hv_fetchs(item_hv, "_id", 0);
if (id_svp && SvOK(*id_svp)) {
SV **actions_svp = hv_fetchs(hv, "_actions", 0);
char id_str[32];
int id_len = my_snprintf(id_str, sizeof(id_str), "%ld", (long)SvIV(*id_svp));
(void)hv_delete((HV *)SvRV(*actions_svp), id_str, id_len, G_DISCARD);
}
}
/* Shift items down */
{
I32 k;
for (k = j; k < len; k++) {
SV **next = av_fetch(items_av, k + 1, 0);
if (next) av_store(items_av, k, SvREFCNT_inc(*next));
}
av_pop(items_av);
}
break;
}
RETVAL = SvREFCNT_inc(self);
}
OUTPUT:
RETVAL
# ---- items() - return items arrayref ----
SV *
get_items(self)
SV *self
ALIAS:
items = 1
CODE:
{
HV *hv = (HV *)SvRV(self);
SV **items_svp = hv_fetchs(hv, "_items", 0);
PERL_UNUSED_VAR(ix);
RETVAL = SvREFCNT_inc(*items_svp);
}
OUTPUT:
RETVAL
# ---- attachments() - return list of attached selectors ----
void
attachments(self)
SV *self
PPCODE:
{
HV *hv = (HV *)SvRV(self);
SV **att_svp = hv_fetchs(hv, "_attachments", 0);
HV *att_hv = (HV *)SvRV(*att_svp);
HE *entry;
hv_iterinit(att_hv);
while ((entry = hv_iternext(att_hv)) != NULL) {
I32 klen;
const char *key = hv_iterkey(entry, &klen);
XPUSHs(sv_2mortal(newSVpvn(key, klen)));
}
}
# ---- enable / disable / is_enabled ----
SV *
enable(self)
SV *self
CODE:
{
HV *hv = (HV *)SvRV(self);
(void)hv_stores(hv, "_enabled", newSViv(1));
RETVAL = SvREFCNT_inc(self);
}
OUTPUT:
RETVAL
SV *
disable(self)
SV *self
CODE:
{
HV *hv = (HV *)SvRV(self);
(void)hv_stores(hv, "_enabled", newSViv(0));
RETVAL = SvREFCNT_inc(self);
}
OUTPUT:
RETVAL
int
is_enabled(self)
SV *self
CODE:
{
HV *hv = (HV *)SvRV(self);
SV **en_svp = hv_fetchs(hv, "_enabled", 0);
RETVAL = (en_svp && SvTRUE(*en_svp)) ? 1 : 0;
}
OUTPUT:
RETVAL
# ---- js_code() - generate the JS injection code ----
SV *
js_code(self)
SV *self
CODE:
{
HV *hv = (HV *)SvRV(self);
( run in 1.319 second using v1.01-cache-2.11-cpan-71847e10f99 )