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
next prev parent 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