First of all the .h files in addons/api/gtkinclude/gtk-2.0/gtk are just
optional documentation, jgtk or user written J codes do not need them.
J does not understand .h or C structures.

sizeofGdkEventKey =: 56  is  sizeof(GdkEventKey) in C.

GdkEventKey =: 24 is probably a misnomer, it might mean
GdkEventKey_state =: 24
these constants are offset of the member field within structures.
suppose y is pointer to a structure GdkEventKey , the member state can be 
accessed
with the expression in C,
y->state

C compiler will automatically calculates its offset and converts it into
the correct type.  But J cannot handle structure. so a expression like
_2 ic memr y, GdkEventKey_state, 8, JCHAR

is needed to (memr) read bytes from offset and then (ic) convert the bytes
into J integer.

documentation of memr can be found in the section for dll inside j user manual. 
ic is a cover verb of 3!:4, please look it up inside j dictionary.

the size and offsets of various structure are found by a small C program,
please checkout the Public svn repository, and take a look at the 
gui/gtk/source/apibuild folder.


Вск, 11 Дек 2011, Emir Ustamujic писал(а):
> Bill, Thank you for these explanations - it is very helpful. I have been 
> reading more on J and GTK (and C) lately and now have a little better 
> understanding of those and the addons/gui/gtk.ijs file.
> 
> I have figured out how to add the following to gtk.ijs:
> 
> - how to translate gtk enums (those with bitmasks as well)
> - what the function parameters n x *x *c f, i etc.  mean (and that the first 
> parameter is the return value) so can add the function declarations
> 
> But I don't know how to 'add'(use) structs like GtkTargetEntry here. 
> 
> I saw that there are some structs in the file like GdkEventKey but I dont 
> understand how these are used:
> 
> sizeofGdkEventKey =: 56
> GdkEventKey =: 24
> 
> and then 
> 
> getGdkEventKey =: 3 : '_2 ic memr y, GdkEventKey, 8, JCHAR' (what is 
> happening here ?)
> 
> or
> GdkEventButton_state =: 48   (in the gtk reference for struct GdkEventButton 
> both state and button are guint yet here they have different values...)
> GdkEventButton_button =: 52
> 
> How are the above mentioned specific values 56, 24 and 48, 52 determined or 
> for eg. there is also sizeofGdkEventMotion =: 80 ?
> (how are the appropriate values found in J for gdouble, gint, etc. to get to 
> that number for the size of the struct)
> 
> 
> And also a question that leads me to the basics of how the gtk addon works:
> The thing about gtk_target_entry_new is that it is not in the .h files in 
> addons/api/gtkinclude/gtk-2.0/gtk 
> So would it work if I added its declaration to the addons/gui/gtk.ijs file ? 
> (Is this a problem - because the truth is I don't understand which gtk files 
> the gtk.ijs is reading and translating to Jgtk. Does it read directly from 
> the gtk files installed on my pc(by this I mean the bare gtk install 
> unrelated to J) or does gtk(the actual pure gtk files) come with the J 
> package in some folder from where the addon gtk.ijs is reading and 
> translating this to Jgtk ?  [I have selected and installed everything from 
> the package manager but don't have a good overview how the addon for gtk 
> basically works]
> 
> 
> Random remarks for random questions would again be very helpful :)
> Thanks,
> Emir
> 
> 
> Message: 2
> Date: Sat, 19 Nov 2011 23:38:58 +0800
> From: bill lam <bbill....@gmail.com>
> Subject: Re: [Jprogramming] Questions on Drag and Drop in J GTK
> To: jprogramming <programming@jsoftware.com>
> Message-ID: <20111119153858.GA2892@debian.b2j>
> Content-Type: text/plain; charset=us-ascii
> 
> To be honest, I've never tried gtk dnd so I can just make some random
> remarks,
> 1.consig, consig3, ... consig7
>    the suffix indicate the number of parameter of the callback handler,
>    consig is acutally consig2.
> 
> 2.signal names accept both hyphen and underscore.
> 
> 3.callback handler
>    the parameters are always 32 or 64-bit intergers depending on J32/J64.
>    the first parameter is the widget that received the signal., the last
>    parameter is user-data that is already used by JGTK, do not use it in
>    your code. eg.
>    for consig
>         'widget data'=. y
>    for consig3
>         'widget event data'=. y
>    for consig4
>         'widget foo bar data'=. y 
>    the actual number of parameter depends on signals. You can get this
>    information from gtk api reference, and then use the appropiate 
>    consig[n] as needed.
> 
> drag_begin_handl (GtkWidget *widget, GdkDragContext *context, gpointer
> user_data){
>       const gchar *name = gtk_widget_get_name (widget);
>       g_print("%s: drag_begin_handl\n", name);
> }
> 
> should be something like
> (should use consig3 to connect signal)
> 
> drag_begin_handl=: 3 : 0
> 'widget context data'=. y
> name=. memr 0 _1,~  gtk_widget_get_name widget
> smoutput name, ': drag_begin_handl'
> )
> 
> 4. gtk datatypes are list in api reference,
>    in particular I can see there is gtk_target_entry_new 
>    which may be useful.
> 
> 5. The "drag-data-received" signal
> 
> void  user_function  (GtkWidget *widget,
>                       GdkDragContext *drag_context,
>                       gint x,
>                       gint y,
>                       GtkSelectionData *data,
>                       guint info,
>                       guint time,
>                       gpointer user_data)
> 
> there are 8 parameters in its handler, thus consig8 is needed. However
> the biggest is consig7 in jgtk, I have just added consig8 to Public repo, 
> please add it yourself and also add other dnd related api to run your
> codes.
> 
> -- 
> regards,
> ====================================================
> GPG key 1024D/4434BAB3 2008-08-24
> gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

-- 
regards,
====================================================
GPG key 1024D/4434BAB3 2008-08-24
gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to