From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: On_Button_Press_Event in Text_View
Date: Wed, 14 Aug 2024 14:03:24 +0200 [thread overview]
Message-ID: <v9i6eb$egh1$1@dont-email.me> (raw)
In-Reply-To: <v9i56l$edfn$1@dont-email.me>
On 2024-08-14 13:42, Gavin McCord wrote:
> On Tue, 13 Aug 2024 22:29:59 +0200, Dmitry A. Kazakov wrote:
>
>> On 2024-08-13 13:37, Gavin McCord wrote:
>>
>>> I have a custom handler used when I update the Text_Buffer:
>>>
>>> Button_Callback.Connect
>>> (Update_Button, "clicked", Update_Clicked'Access,
>>> Buffer_To_Pass);
>>>
>>> That works fine so I was imagining something similar might be possible,
>>> but I've run through various permuations of records and access types
>>> but not yet got a working callback.
>>>
>>> Any help gratefully received (I can post the full code if that's
>>> useful).
>>
>> Something like this:
>>
>> package Event_Handlers is
>> new Gtk.Handlers.User_Return_Callback
>> ( GObject_Record,
>> Boolean, User_Data_Type
>> );
>>
>>
>> function On_Button_Press
>> ( Object : access GObject_Record'Class;
>> Event : Gdk_Event; Data : User_Data_Type
>> ) return Boolean;
>>
>>
>> View.Set_Events (View.Get_Events or Button_Press_Mask);
>> Event_Handlers.Connect ( View,
>> "button-press-event",
>> Event_Handlers.To_Marshaller (On_Button_Press'Access),
>> Data
>> );
>
> Thank you. That allows me to pass a record of the buffer.
As a general advice. Usually you have a custom widget derived from
Gtk_Grid_Record servicing as the main window.
type Main_Window_Record is new Gtk_Grid_Record with record
Button : Gtk_Button;
Text_View : Gtk_Text_View;
Buffer : Gtk_Text_Buffer;
...
type Main_Window is access all Main_Window_Record'Class;
Main_Window you pass to all handlers, so that you always have a full
context in any of them.
> There's only one other thing.
>
> If I try to check the Event I get another error, such as
>
> function On_Button_Press
> [skipped lines]
>
> if Event.The_Type = Gdk_2button_Press then
> Put_Line ("double-click");
> end if;
>
> Attempting to compile that gives me
>
> error: cannot reference discriminant of unchecked union
case Get_Event_Type (Event) is
when Button_Press =>
...
when Gdk_2Button_Press | Gdk_3Button_Press =>
...
when Key_Press =>
case Get_Key_Val (Event) is
when GDK_Up | GDK_KP_Up =>
...
when GDK_Down | GDK_KP_Down =>
...
end case;
...
when others =>
...
end case;
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2024-08-14 12:03 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-13 11:37 On_Button_Press_Event in Text_View Gavin McCord
2024-08-13 20:29 ` Dmitry A. Kazakov
2024-08-14 11:42 ` Gavin McCord
2024-08-14 12:03 ` Dmitry A. Kazakov [this message]
2024-08-14 14:34 ` Gavin McCord
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox