Re: On_Button_Press_Event in Text_View

Liste des GroupesRevenir à cl ada 
Sujet : Re: On_Button_Press_Event in Text_View
De : mailbox (at) *nospam* dmitry-kazakov.de (Dmitry A. Kazakov)
Groupes : comp.lang.ada
Date : 14. Aug 2024, 14:03:24
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v9i6eb$egh1$1@dont-email.me>
References : 1 2 3
User-Agent : Mozilla Thunderbird
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

Date Sujet#  Auteur
13 Aug 24 * On_Button_Press_Event in Text_View5Gavin McCord
13 Aug 24 `* Re: On_Button_Press_Event in Text_View4Dmitry A. Kazakov
14 Aug 24  `* Re: On_Button_Press_Event in Text_View3Gavin McCord
14 Aug 24   `* Re: On_Button_Press_Event in Text_View2Dmitry A. Kazakov
14 Aug 24    `- Re: On_Button_Press_Event in Text_View1Gavin McCord

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal