From: DrPi <314@drpi.fr>
Subject: Re: GtkAda callback and event
Date: Sun, 5 Sep 2021 15:50:28 +0200 [thread overview]
Message-ID: <6134cb26$0$3697$426a74cc@news.free.fr> (raw)
In-Reply-To: <sh0s15$1ha4$1@gioia.aioe.org>
Le 05/09/2021 à 00:29, Dmitry A. Kazakov a écrit :
> On 2021-09-04 23:39, DrPi wrote:
>
>> I use an event callback with user data.
>>
>> I first declare a package :
>> package Handler_Motion_Notify is new
>> Gtk.Handlers.User_Return_Callback (Widget_Type =>
>> Gtk.Text_View.Gtk_Text_View_Record,
>>
>> Return_Type => Boolean,
>>
>> User_Type => t_Debug_Panel);
>>
>> The function callback is declared like this :
>> function On_Motion_Notify (TextView : access
>> Gtk.Text_View.Gtk_Text_View_Record'Class;
>> DebugPanel : t_Debug_Panel) return
>> Boolean;
>
> This is wrong. The motion-notify-event callback has the parameters:
>
> 1. Target
> 2. Gdk.Event.Gdk_Event_Motion
> 3. User data
>
>> The connection is done like this :
>> Handler_Motion_Notify.Connect (Widget => Panel.TextView,
>> Name =>
>> Gtk.Widget.Signal_Motion_Notify_Event,
>> Cb => On_Motion_Notify'Access,
>> User_Data => t_Debug_Panel(Panel));
>>
>> This works correctly. But... I need to have access to the event in the
>> callback function.
>
> Maybe it does not crash but it is incorrect.
I suppose it doesn't crash because I don't use any callback parameter in
the callback itself. Just a Put_Line() to check the callback is called.
>
>> How can I achieve this ?
>
> There is no shortcut Connect and Callback defined in
> User_Return_Callback. Therefore you have to use a general-case callback
> with the parameter list:
>
> function On_Motion_Notify
> ( Object : access Gtk_Text_View_Record'Class;
> Params : Glib.Values.GValues;
> Data : t_Debug_Panel
> ) return Boolean;
>
So I have to use a callback with Handler profile, not Simple_Handler
profile.
I missed that.
> connected as:
>
> Handler_Motion_Notify.Connect
> ( Panel.TextView,
> "motion-notify-event", -- = Signal_Motion_Notify_Event
> On_Motion_Notify'Access,
> t_Debug_Panel (Panel)
> );
>
> The parameter is accessed using the function Nth or
> Gtk.Argument.Unchecked_To_Gdk_Event_Motion, e.g.
>
> Gtk.Argument.Unchecked_To_Gdk_Event_Motion (Params, 1)
>
With "Gtk.Arguments.Unchecked_To_Gdk_Event_Motion (Params, 1);" , I get
an error :
expected private type "C_GValues" defined at glib-values.ads:53
found private type "GValues" defined at glib-values.ads:48
> P.S. Since the target is practically never used in callbacks, you can
> instantiate Gtk.Handlers.User_Return_Callback with GObject_Record. This
> way you could use it with all types of widgets. That reduces the number
> of instantiations.
>
Thanks for the tip.
next prev parent reply other threads:[~2021-09-05 13:50 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-04 21:39 GtkAda callback and event DrPi
2021-09-04 22:29 ` Dmitry A. Kazakov
2021-09-05 13:50 ` DrPi [this message]
2021-09-05 14:48 ` Dmitry A. Kazakov
2021-09-05 14:58 ` DrPi
2021-09-05 15:04 ` DrPi
2021-09-05 15:12 ` Dmitry A. Kazakov
2021-09-05 15:20 ` DrPi
2021-09-05 15:53 ` Dmitry A. Kazakov
2021-09-05 20:49 ` DrPi
2021-09-09 6:56 ` Emmanuel Briot
2021-09-09 7:57 ` DrPi
2021-09-09 18:41 ` Jere
2021-09-09 19:58 ` Dmitry A. Kazakov
2021-09-09 21:01 ` Jere
2021-09-10 6:38 ` Dmitry A. Kazakov
2021-09-10 6:56 ` Emmanuel Briot
2021-09-10 20:42 ` DrPi
2021-09-10 20:58 ` Dmitry A. Kazakov
2021-09-11 7:38 ` Emmanuel Briot
2021-09-11 15:24 ` DrPi
2021-09-11 15:56 ` Dmitry A. Kazakov
2021-09-12 7:08 ` AdaMagica
2021-09-12 8:52 ` Dmitry A. Kazakov
2021-09-12 13:00 ` DrPi
2021-09-12 13:57 ` Dmitry A. Kazakov
2021-09-10 20:46 ` Dmitry A. Kazakov
2021-09-11 7:36 ` Emmanuel Briot
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox