Deutsch   English   Français   Italiano  
<v9if94$f09k$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!3.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Gavin McCord <gavind.mccord@gmail.com>
Newsgroups: comp.lang.ada
Subject: Re: On_Button_Press_Event in Text_View
Date: Wed, 14 Aug 2024 14:34:13 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 94
Message-ID: <v9if94$f09k$1@dont-email.me>
References: <v9fgh4$3s34v$1@dont-email.me> <v9gfo7$1rq4$1@dont-email.me>
	<v9i56l$edfn$1@dont-email.me> <v9i6eb$egh1$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Injection-Date: Wed, 14 Aug 2024 16:34:13 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="81ca7a3dbddd0929ae84069da7fe8b0f";
	logging-data="491828"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/IBX+bIsIQAvcpDVqTUb2IcqdVaUFspMgh7mXUuD+UgQ=="
User-Agent: Pan/0.149 (Bellevue; 4c157ba git@gitlab.gnome.org:GNOME/pan.git)
Cancel-Lock: sha1:7zX8YwT4qiPijFFY+QeO3dEzHzA=
Bytes: 4022

On Wed, 14 Aug 2024 14:03:24 +0200, Dmitry A. Kazakov wrote:

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

I've got it working now. Get_Event_Type (Event) is what I needed.

Thank you again for all your help.

Gavin