Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connections
Warning: mysqli::query(): Couldn't fetch mysqli in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\index.php on line 66
Article <v9i6eb$egh1$1@dont-email.me>
Deutsch   English   Français   Italiano  
<v9i6eb$egh1$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: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Newsgroups: comp.lang.ada
Subject: Re: On_Button_Press_Event in Text_View
Date: Wed, 14 Aug 2024 14:03:24 +0200
Organization: A noiseless patient Spider
Lines: 92
Message-ID: <v9i6eb$egh1$1@dont-email.me>
References: <v9fgh4$3s34v$1@dont-email.me> <v9gfo7$1rq4$1@dont-email.me>
 <v9i56l$edfn$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Wed, 14 Aug 2024 14:03:24 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="3d900c2c11c597f78526ab8206708905";
	logging-data="475681"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18oLFaRLYEIjFfTUXwq3lu2lxsvKicjh9I="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:uU9NR8J8RmHD0kj+V+umvPxfjM8=
Content-Language: en-US
In-Reply-To: <v9i56l$edfn$1@dont-email.me>
Bytes: 3794

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