comp.lang.ada
 help / color / mirror / Atom feed
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.

  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