Gnome2
view release on metacpan or search on metacpan
xs/GnomeAppHelper.xs view on Meta::CPAN
info->accelerator_key = SvIV(*s);
if ((s = hv_fetch(h, "ac_mods", 7, 0)) && SvOK(*s))
info->ac_mods = SvGdkModifierType(*s);
} else { /* As in Python - it's an array of:
type, label, hint, moreinfo, pixmap_type, pixmap_info,
accelerator_key, modifiers */
AV *a = (AV*)SvRV (sv);
SV **s;
if ((s = av_fetch (a, 0, 0)) && SvOK (*s))
info->type = SvGnomeUIInfoType (*s);
if ((s = av_fetch (a, 1, 0)) && SvOK (*s))
info->label = SvGChar (*s);
if ((s = av_fetch (a, 2, 0)) && SvOK (*s))
info->hint = SvGChar (*s);
if ((s = av_fetch (a, 3, 0)) && SvOK (*s))
info->moreinfo = *s;
if ((s = av_fetch (a, 4, 0)) && SvOK (*s))
info->pixmap_type = SvGnomeUIPixmapType (*s);
if ((s = av_fetch (a, 5, 0)) && SvOK (*s))
info->pixmap_info = SvPV_nolen (*s);
if ((s = av_fetch (a, 6, 0)) && SvOK (*s)) /* keysym */
info->accelerator_key = SvIV (*s);
if ((s = av_fetch (a, 7, 0)) && SvOK (*s))
info->ac_mods = SvGdkModifierType (*s);
# define GNOME2PERL_WIDGET_ARRAY_INDEX 8
if ((s = av_fetch (a, GNOME2PERL_WIDGET_ARRAY_INDEX, 0)) && SvOK (*s))
info->widget = SvGtkWidget (*s);
}
/* Decide what to do with the moreinfo */
switch (info->type) {
case GNOME_APP_UI_SUBTREE:
case GNOME_APP_UI_SUBTREE_STOCK:
case GNOME_APP_UI_RADIOITEMS:
if (info->moreinfo == NULL)
croak ("GnomeUIInfo type requires a 'moreinfo' or "
"'subtree' argument, but none was specified");
/* Now we can recurse */
/* Hope user_data doesn't get mangled... */
info->user_data = info->moreinfo;
info->moreinfo =
gnome2perl_svrv_to_uiinfo_tree (info->moreinfo,
"'subtree' or 'moreinfo'");
break;
case GNOME_APP_UI_HELP:
if (info->moreinfo == NULL)
croak("GnomeUIInfo type requires a 'moreinfo' argument, "
"but none was specified");
/* It's just a string */
info->moreinfo = SvGChar ((SV*)info->moreinfo);
break;
case GNOME_APP_UI_ITEM:
case GNOME_APP_UI_ITEM_CONFIGURABLE:
case GNOME_APP_UI_TOGGLEITEM:
if (info->moreinfo) {
/* We simply swap moreinfo and user_data here so that
the GnomePopupMenu functions don't see the SV but our
custom marshaller. GnomeAppHelper isn't directly
affected since we use the GnomeUIBuilderData thingy
there anyway. */
info->user_data = info->moreinfo;
info->moreinfo = gnome2perl_popup_menu_activate_func;
}
break;
default:
/* Do nothing */
break;
}
}
GnomeUIInfo *
gnome2perl_svrv_to_uiinfo_tree (SV* sv, char * name)
{
AV * av;
int i, count;
GnomeUIInfo * infos;
g_assert (sv != NULL);
if ((!SvOK (sv)) || (!SvRV (sv)) || (SvTYPE (SvRV (sv)) != SVt_PVAV))
croak ("%s must be a reference to an array of Gnome UI "
"Info Entries", name);
av = (AV*)SvRV (sv);
/* add one to turn from last index to length... */
count = av_len (av) + 1;
infos = gperl_alloc_temp (sizeof(GnomeUIInfo) * (count+1));
for (i = 0; i < count; i++) {
SV ** svp = av_fetch (av, i, FALSE);
gnome2perl_parse_uiinfo_sv (*svp, infos + i);
}
/* and stick another one on the end of the array as the terminator */
infos[count].type = GNOME_APP_UI_ENDOFINFO;
return infos;
}
GnomeUIInfo *
SvGnomeUIInfo (SV * sv)
{
return gnome2perl_svrv_to_uiinfo_tree (sv, "variable");
}
static void
gnome2perl_refill_info_common (SV *data, GnomeUIInfo *info)
{
if (info->widget) {
if (SvTYPE(SvRV(data)) == SVt_PVHV) {
hv_store ((HV*)SvRV(data), "widget", 6,
newSVGtkWidget (info->widget), FALSE);
} else {
av_store ((AV*)SvRV(data), GNOME2PERL_WIDGET_ARRAY_INDEX,
newSVGtkWidget (info->widget));
}
}
}
xs/GnomeAppHelper.xs view on Meta::CPAN
type,
label,
hint,
moreinfo,
pixmap_type,
pixmap_info,
accelerator_key and
modifiers.
The example from above would become:
[ "item", "Item", undef, sub { exit(0); },
undef, undef, undef, undef ]
=back
To create multi-level structures, you use the "subtree" type and the "subtree"
key, as in the following example:
{
type => "subtree",
label => "Radio Items",
subtree => [
{
type => "radioitems",
moreinfo => [
{
type => "item",
label => "A"
},
{
type => "item",
label => "B"
},
{
type => "item",
label => "C"
},
{
type => "item",
label => "D"
},
{
type => "item",
label => "E"
}
]
}
]
}
=cut
## void gnome_accelerators_sync (void)
void
gnome_accelerators_sync (class)
C_ARGS:
/*void*/
MODULE = Gnome2::AppHelper PACKAGE = Gtk2::MenuShell PREFIX = gnome_app_
=for object Gnome2::AppHelper
=cut
### void gnome_app_fill_menu (GtkMenuShell *menu_shell, GnomeUIInfo *uiinfo, GtkAccelGroup *accel_group, gboolean uline_accels, gint pos)
### void gnome_app_fill_menu_with_data (GtkMenuShell *menu_shell, GnomeUIInfo *uiinfo, GtkAccelGroup *accel_group, gboolean uline_accels, gint pos, gpointer user_data)
### void gnome_app_fill_menu_custom (GtkMenuShell *menu_shell, GnomeUIInfo *uiinfo, GnomeUIBuilderData *uibdata, GtkAccelGroup *accel_group, gboolean uline_accels, gint pos)
void
gnome_app_fill_menu (menu_shell, uiinfo, accel_group, uline_accels, pos)
GtkMenuShell *menu_shell
GnomeUIInfo *uiinfo
GtkAccelGroup *accel_group
gboolean uline_accels
gint pos
CODE:
gnome_app_fill_menu_custom (menu_shell, uiinfo, &ui_builder_data, accel_group, uline_accels, pos);
gnome2perl_refill_infos (ST (1), uiinfo);
=for apidoc
Returns the GtkWidget and the position associated with the path.
=cut
## GtkWidget *gnome_app_find_menu_pos (GtkWidget *parent, const gchar *path, gint *pos)
void
gnome_app_find_menu_pos (parent, path)
GtkWidget *parent
const gchar *path
PREINIT:
gint pos;
GtkWidget *widget;
PPCODE:
EXTEND (sp, 2);
widget = gnome_app_find_menu_pos (parent, path, &pos);
PUSHs (sv_2mortal (newSVGtkWidget (widget)));
PUSHs (sv_2mortal (newSViv (pos)));
MODULE = Gnome2::AppHelper PACKAGE = Gtk2::Toolbar PREFIX = gnome_app_
=for object Gnome2::AppHelper
=cut
## void gnome_app_fill_toolbar (GtkToolbar *toolbar, GnomeUIInfo *uiinfo, GtkAccelGroup *accel_group)
### void gnome_app_fill_toolbar_with_data (GtkToolbar *toolbar, GnomeUIInfo *uiinfo, GtkAccelGroup *accel_group, gpointer user_data)
### void gnome_app_fill_toolbar_custom (GtkToolbar *toolbar, GnomeUIInfo *uiinfo, GnomeUIBuilderData *uibdata, GtkAccelGroup *accel_group)
void
gnome_app_fill_toolbar (toolbar, uiinfo, accel_group)
GtkToolbar *toolbar
GnomeUIInfo *uiinfo
GtkAccelGroup *accel_group
CODE:
gnome_app_fill_toolbar_custom (toolbar, uiinfo, &ui_builder_data, accel_group);
gnome2perl_refill_infos (ST (1), uiinfo);
MODULE = Gnome2::AppHelper PACKAGE = Gnome2::App PREFIX = gnome_app_
#### void gnome_app_ui_configure_configurable (GnomeUIInfo* uiinfo)
##void
##gnome_app_ui_configure_configurable (uiinfo)
## GnomeUIInfo* uiinfo
## void gnome_app_create_menus (GnomeApp *app, GnomeUIInfo *uiinfo)
### void gnome_app_create_menus_interp (GnomeApp *app, GnomeUIInfo *uiinfo, GtkCallbackMarshal relay_func, gpointer data, GtkDestroyNotify destroy_func)
### void gnome_app_create_menus_with_data (GnomeApp *app, GnomeUIInfo *uiinfo, gpointer user_data)
### void gnome_app_create_menus_custom (GnomeApp *app, GnomeUIInfo *uiinfo, GnomeUIBuilderData *uibdata)
## void gnome_app_create_toolbar (GnomeApp *app, GnomeUIInfo *uiinfo)
### void gnome_app_create_toolbar_interp (GnomeApp *app, GnomeUIInfo *uiinfo, GtkCallbackMarshal relay_func, gpointer data, GtkDestroyNotify destroy_func)
### void gnome_app_create_toolbar_with_data (GnomeApp *app, GnomeUIInfo *uiinfo, gpointer user_data)
### void gnome_app_create_toolbar_custom (GnomeApp *app, GnomeUIInfo *uiinfo, GnomeUIBuilderData *uibdata)
void
( run in 1.320 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )