Axel Simon <axel.si...@in.tum.de> writes:

> Hi Andy,
>
> On 30.06.2010, at 06:12, Andy Stewart wrote:
>
>> Hi Axel,
>>
>> I have multi-processese framework like Google Chrome, below is screenshot:
>>
>> http://farm5.static.flickr.com/4137/4747331678_441d6eb8ec_b.jpg
>>
>> UI is is render in parent processes with GtkSocket, so all keyPress
>> event is handle by parent top-level window, i will send key DBus message
>> to child process if current key is not handle by parent process Window.
>>
>> In my screenshot, up is webkit browser, down is editor. All those sub-module 
>> is running in child
>> process. In editor, i can use some APIs emulate insert key after i receive 
>> key
>> message from DBus. But WebKitGTK+ haven't open APIs let me do some *insert 
>> key*
>> event. So i need propagate key event on WebKit widget in child process.
>>
>> For propagate key event on child widget, i found three functions:
>>
>>    gtk_propagate_event
>> (http://library.gnome.org/devel/gtk/unstable/gtk3-General.html#gtk-propagate-event
>> )
>>    gtk_widget_event
>> (http://library.gnome.org/devel/gtk/unstable/GtkWidget.html#gtk-widget-event
>> )
>>    gtk_main_do_event
>> (http://library.gnome.org/devel/gtk/unstable/gtk3-General.html#gtk-main-do-event
>> )
>>
>> And gtk_main_do_event is right method to synthesize event in child process 
>> widget.
>>
>> For my situation, i need convection Key (include attribute eventRelease,
>> eventSent, eventTime...etc) from ParentProcess to ChildProcess by DBus,
>> then use "mainDoEvent :: Event -> IO ()" propagate key event with WebKit
>> child process.
>>
>> So my question is how to binding gtk_main_do_event ?
>> Looks I should use Graphics.UI.Gtk.Gdk.Events.Event and not EventM.
>>
>
> Event is deprecated and will be removed soon. The problem with the C Event 
> structure is that it can
> contains pointers and varying fields.  Event did not mangage to translate all 
> of them, also because
> new event  are being added to Gtk+ occasionally. If you want to convert a C 
> Event  structure
> completely to Haskell, send it over the network and then  reemit the event 
> inside a different
> application, I suggest that you  start with the Event module and create an 
> opaque but serializable
> data  type. This data type should contain some events of interest (keys,  
> mouse) but not all
> events. You would probably need to re-insert the  time stamp of the event 
> when you reemit it in the
> other application.
>
> If you implement this, then the extraction of an event should be a function
>
> serializeEvent :: EventM t SerializedEvent
>
> that runs in the EventM monad. It should throw an exception if it is applied 
> to an event that it
> can't handle.
>
> Then at the client side, we can implement gtk_main_do_event as
>
> mainDoEvent :: EventM t ()
>
> and have
>
> deserializeEvent :: SerializedEvent -> (EventM t a) -> IO a
>
> which executes any EventM function with the serialized event.
>
> Let me know if you need further help. The functions in Event.hs may help you 
> to get started with
> marshalling the events, but you should  use the EventM interface as described 
> above.
Thanks for your help, very detailed.

I will share my library after i finish serializeEvent and deserializeEvent.

Cheers,

  -- Andy

>
> Cheers,
> Axel
>
>
>
>> Thanks!
>>
>>  -- Andy
>>
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> This SF.net email is sponsored by Sprint
>> What will you do first with EVO, the first 4G phone?
>> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
>> _______________________________________________
>> Gtk2hs-devel mailing list
>> Gtk2hs-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/gtk2hs-devel

------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Gtk2hs-devel mailing list
Gtk2hs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtk2hs-devel

Reply via email to