comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: GtkAda callback and event
Date: Sun, 5 Sep 2021 00:29:58 +0200	[thread overview]
Message-ID: <sh0s15$1ha4$1@gioia.aioe.org> (raw)
In-Reply-To: 6133e791$0$6461$426a74cc@news.free.fr

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.

> 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;

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)

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.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

  reply	other threads:[~2021-09-04 22:29 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 [this message]
2021-09-05 13:50   ` DrPi
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