Hi All, For some reason.. always wanted to be able to write (and get) perl applets on web browsers, so attached here is my go at a parrot plugin for Mozilla :)
The files attached are: The plugin.tar is the one containing it mainly with some instructions on how to build it (and test it). Since I need to pass onto parrot the pointer to the boxing window (container) for the plugin in Mozilla, I have done this by pointing an UnManagedStruct to it, hence the "set_pointer" patch attached for the UnManagedStruct PMC: As well, Gtk2 was used to test the plugin, so attached is a file with required gtk.declarations plus a call_list.txt.patch if the signatures for it are not built "on the fly". The examples merely display widgets in the Mozilla window as callbacks to Parrot still need some work (but thats the Parrot side, so applets will get better as soon as we have these ;) Have fun :) StÃphane PS.: I noticed that somehow recently <events> where added to Parrot, and somehow this breaks the plugin when hitting reload on Mozilla. Comenting out Parrot_init_events(interpreter) in interpreter.c resolves the problem: is the event queue properly cleaned up on Parrot_destroy?
plugin.tar.gz
Description: GNU Zip compressed data
Index: unmanagedstruct.pmc =================================================================== RCS file: /cvs/public/parrot/classes/unmanagedstruct.pmc,v retrieving revision 1.22 diff -u -r1.22 unmanagedstruct.pmc --- unmanagedstruct.pmc 4 Nov 2003 18:35:05 -0000 1.22 +++ unmanagedstruct.pmc 29 Dec 2003 18:34:08 -0000 @@ -246,6 +246,10 @@ return PMC_data(SELF); } + void set_pointer (void* value) { + PMC_data(SELF) = value; + } + void set_integer_native(INTVAL value) { *(INTVAL *)PMC_data(SELF) = value; }
[package] Gtk [lib] libgtk-x11-2.0 [defs] v gtk_init ii v gtk_main v p gtk_calendar_new v # -- Gtk Widget #p gtk_widget_new it # -- Check this (ellipsis) p gtk_widget_ref p v gtk_widget_unref p v gtk_widget_destroy p #v gtk_widget_destroyed pp # -- Check this. #v gtk_widget_set pt # -- Check this (ellipsis) v gtk_widget_unparent p v gtk_widget_show p v gtk_widget_show_now p v gtk_widget_hide p v gtk_widget_show_all p v gtk_widget_hide_all p v gtk_widget_map p v gtk_widget_unmap p v gtk_widget_realize p v gtk_widget_unrealize p v gtk_widget_queue_draw p v gtk_widget_queue_resize p v gtk_widget_draw pp v gtk_widget_size_request pp v gtk_widget_get_child_requisition pp v gtk_widget_size_allocate pp v gtk_widget_add_accelerator ptpiii i gtk_widget_remove_accelerator ppii v gtk_widget_set_accel_path ptp p gtk_widget_list_accel_closures p i gtk_widget_event pp i gtk_widget_activate p v gtk_widget_reparent pp i gtk_widget_intersect ppp i gtk_widget_is_focus p v gtk_widget_grab_focus p v gtk_widget_grab_default p v gtk_widget_set_name pt t gtk_widget_get_name p v gtk_widget_set_state pi v gtk_widget_set_sensitive pi v gtk_widget_set_parent pp v gtk_widget_set_parent_window pp p gtk_widget_get_parent_window p v gtk_widget_set_uposition pii v gtk_widget_set_usize pii v gtk_widget_set_events pi v gtk_widget_add_events pi v gtk_widget_set_extension_events pi i gtk_widget_get_extension_events p p gtk_widget_get_toplevel p p gtk_widget_get_ancestor pi p gtk_widget_get_colormap p v gtk_widget_set_colormap pp p gtk_widget_get_visual p i gtk_widget_get_events p v gtk_widget_get_pointer pii i gtk_widget_is_ancestor pp i gtk_widget_translate_coordinates ppiiii i gtk_widget_hide_on_delete p v gtk_widget_set_style pp v gtk_widget_ensure_style p p gtk_widget_get_style p v gtk_widget_reset_rc_styles p v gtk_widget_push_colormap p v gtk_widget_pop_colormap v v gtk_widget_set_default_colormap p p gtk_widget_get_default_style v p gtk_widget_get_default_colormap v p gtk_widget_get_default_visual v v gtk_widget_set_direction pi i gtk_widget_get_direction p v gtk_widget_set_default_direction i i gtk_widget_get_default_direction v v gtk_widget_shape_combine_mask ppii v gtk_widget_path p3TT v gtk_widget_class_path p3TT t gtk_widget_get_composite_name p v gtk_widget_modify_style pp p gtk_widget_get_modifier_style p v gtk_widget_modify_fg pip v gtk_widget_modify_bg pip v gtk_widget_modify_text pip v gtk_widget_modify_base pip v gtk_widget_modify_font pp p gtk_widget_create_pango_context p p gtk_widget_get_pango_context p p gtk_widget_create_pango_layout pt p gtk_widget_render_icon ptit v gtk_widget_pop_composite_child v v gtk_widget_push_composite_child v v gtk_widget_queue_clear p v gtk_widget_queue_clear_area piiii v gtk_widget_queue_draw_area piiii v gtk_widget_reset_shapes p v gtk_widget_set_app_paintable pi v gtk_widget_set_double_buffered pi v gtk_widget_set_redraw_on_allocate pi v gtk_widget_set_composite_name pt i gtk_widget_set_scroll_adjustments ppp i gtk_widget_mnemonic_activate pi v gtk_widget_class_install_style_property pp v gtk_widget_class_install_style_property_parser ppp p gtk_widget_class_find_style_property pt p gtk_widget_class_list_style_properties p3 p gtk_widget_region_intersect pp i gtk_widget_send_expose pp #v gtk_widget_style_get pt # -- Check this (ellipsis) #v gtk_widget_style_get_property ptp # -- Check this #v gtk_widget_style_get_valist pt # -- Check this (ellipsis) p gtk_widget_get_accessible p i gtk_widget_child_focus pi v gtk_widget_child_notify pt v gtk_widget_freeze_child_notify p i gtk_widget_get_child_visible p p gtk_widget_get_parent p p gtk_widget_get_settings p #p gtk_widget_get_clipboard pp # -- Check this p gtk_widget_get_display p p gtk_widget_get_root_window p p gtk_widget_get_screen p i gtk_widget_has_screen p v gtk_widget_get_size_request p33 v gtk_widget_set_child_visible pi v gtk_widget_set_size_request pii v gtk_widget_thaw_child_notify p p gtk_requisition_copy p v gtk_requisition_free p # -- Gtk Container v gtk_container_add pp v gtk_container_remove pp #v gtk_container_add_with_properties ppt # -- Check this (ellipsis) i gtk_container_get_resize_mode p v gtk_container_set_resize_mode pi v gtk_container_check_resize p #v gtk_container_foreach ppp # -- Check this (callbacks) #v gtk_container_foreach_full ppppp # -- Check this (callbacks) p gtk_container_get_children p v gtk_container_set_reallocate_redraws pi v gtk_container_set_focus_child pp p gtk_container_get_focus_vadjustment p v gtk_container_set_focus_vadjustment pp p gtk_container_get_focus_hadjustment p v gtk_container_set_focus_hadjustment pp v gtk_container_resize_children p i gtk_container_child_type p #v gtk_container_child_get ppt # -- Check this (ellipsis) #v gtk_container_child_set ppt # -- Check this (ellipsis) v gtk_container_child_get_property pptp v gtk_container_child_set_property pptp #v gtk_container_child_get_valist ppt # -- Check this (ellipsis) #v gtk_container_child_set_valist ppt # -- Check this (ellipsis) #v gtk_container_forall ppp # -- Check this (callbacks) i gtk_container_get_border_width p v gtk_container_set_border_width pi v gtk_container_propagate_expose ppp #i gtk_container_get_focus_chain pp # -- Check this. v gtk_container_set_focus_chain pp v gtk_container_unset_focus_chain p p gtk_container_class_find_child_property pt v gtk_container_class_install_child_property pip p gtk_container_class_list_child_properties p3 # -- Gtk Bin p gtk_bin_get_child p # -- Gtk Button p gtk_button_new v p gtk_button_new_with_label t p gtk_button_new_with_mnemonic t p gtk_button_new_from_stock t v gtk_button_pressed p v gtk_button_released p v gtk_button_clicked p v gtk_button_enter p v gtk_button_leave p v gtk_button_set_relief pi i gtk_button_get_relief p t gtk_button_get_label p v gtk_button_set_label pt i gtk_button_get_use_stock p v gtk_button_set_use_stock pi i gtk_button_get_use_underline p v gtk_button_set_use_underline pi # -- GtkWindow p gtk_window_new i v gtk_window_set_title pt v gtk_window_set_wmclass ptt v gtk_window_set_policy piii v gtk_window_set_resizable pi i gtk_window_get_resizable p v gtk_window_add_accel_group pp v gtk_window_remove_accel_group pp i gtk_window_activate_focus p i gtk_window_activate_default p v gtk_window_set_modal pi v gtk_window_set_default_size pii v gtk_window_set_geometry_hints pppi v gtk_window_set_gravity pi i gtk_window_get_gravity p v gtk_window_set_position pi v gtk_window_set_transient_for pp v gtk_window_set_destroy_with_parent pi v gtk_window_set_screen pp p gtk_window_get_screen p p gtk_window_list_toplevels v v gtk_window_add_mnemonic pip v gtk_window_remove_mnemonic pip i gtk_window_mnemonic_activate pii p gtk_window_get_focus p v gtk_window_set_focus pp v gtk_window_set_default pp v gtk_window_present p v gtk_window_iconify p v gtk_window_deiconify p v gtk_window_stick p v gtk_window_unstick p v gtk_window_maximize p v gtk_window_unmaximize p v gtk_window_fullscreen p v gtk_window_unfullscreen p v gtk_window_begin_resize_drag piiiil v gtk_window_begin_move_drag piiil v gtk_window_set_decorated pi v gtk_window_set_frame_dimensions piiii v gtk_window_set_has_frame pi v gtk_window_set_mnemonic_modifier pi v gtk_window_set_role pt v gtk_window_set_type_hint pi v gtk_window_set_skip_taskbar_hint pi v gtk_window_set_skip_pager_hint pi i gtk_window_get_decorated p p gtk_window_get_default_icon_list v v gtk_window_get_default_size p33 i gtk_window_get_destroy_with_parent p v gtk_window_get_frame_dimensions p3333 i gtk_window_get_has_frame p p gtk_window_get_icon p p gtk_window_get_icon_list p i gtk_window_get_mnemonic_modifier p i gtk_window_get_modal p v gtk_window_get_position p33 t gtk_window_get_role p v gtk_window_get_size p33 t gtk_window_get_title p p gtk_window_get_transient_for p i gtk_window_get_type_hint p i gtk_window_get_skip_taskbar_hint p i gtk_window_get_skip_pager_hint p v gtk_window_move pii i gtk_window_parse_geometry pt v gtk_window_reshow_with_initial_size p v gtk_window_resize pii v gtk_window_set_default_icon_list p #i gtk_window_set_default_icon_from_file tp # -- check this v gtk_window_set_icon pp v gtk_window_set_icon_list pp i gtk_window_set_icon_from_file ptp v gtk_window_set_auto_startup_notification i v gtk_decorated_window_init p v gtk_decorated_window_calculate_frame_size p v gtk_decorated_window_set_title pt v gtk_decorated_window_move_resize_window piiii
Index: call_list.txt =================================================================== RCS file: /cvs/public/parrot/src/call_list.txt,v retrieving revision 1.25 diff -u -r1.25 call_list.txt --- call_list.txt 28 Dec 2003 23:26:26 -0000 1.25 +++ call_list.txt 29 Dec 2003 18:39:58 -0000 @@ -187,3 +187,32 @@ i pPtiiipi i tpiibi +# -- for gtk +i ptp +i ppp +i ppii +i ppiiii +p t +p pt +p ptit +p p3 +p pi +p pp +v pii +v piii +v piiil +v piiiil +v pp +v ppii +v pptp +v pt +v ptt +v ptp +v ptpiii +v p3TT +v p33 +v p3333 +v pip +v ppp +v pppi +t p
gtk.tar.gz
Description: GNU Zip compressed data