From: Axel S. <Axe...@en...> - 2008-01-22 12:25:49
|
On Jan 22, 2008, at 12:13, David Leuschner wrote: > Hi Axel, > > the Widget module doesn't support all functions, yet. In particular > functions to add and remove accelerators are missing: > > void gtk_widget_add_accelerator (GtkWidget *widget, > const gchar *accel_signal, > GtkAccelGroup *accel_group, > guint accel_key, > GdkModifierType accel_mods, > GtkAccelFlags > accel_flags); > > gboolean gtk_widget_remove_accelerator (GtkWidget *widget, > GtkAccelGroup *accel_group, > guint accel_key, > GdkModifierType > accel_mods); > > I'm not sure what I would need to do to add bindings for these > functions. > Should I just give it a try or is there any tutorial or email from the > archives I should read in advance? Anything special to watch out for? Duncan has written a cool tool called genApi (under tools/genApi) which reads some documentation and then creates the Haskell files which then have to be edited. You could try building that. In case it doesn't work, I'll send you the generated files for the modules in question. As to how to bind these things, you have to understand how values (and in particular: pointers to structures) are passed to and from Haskell to C. One important issue is to understand who fees what (in general: passing a value to Gtk means creating a C structure in Haskell, passing it to C, then freeing it. Often this can be done with alloca. Receiving a value from Gtk usually means reading the content of a pointer and freeing the structure afterwards). The only way, really, is to look at other code in the library. Thanks for your effort. Axel. |