[GtkAda] [ résolu ] Click droit dans un Gtk_Fixed.

Click droit dans un Gtk_Fixed. [GtkAda] [ résolu ] - Ada - Programmation

Marsh Posté le 01-12-2010 à 21:53:00    

Bonjour,
Voici un bout de code qui doit afficher "Right click" sur le terminal sous-jacent à réception du signal "button_press_event" mais qui marche pas.
 

Code :
  1. -- Mon packetage Handlers
  2. package Timbre_Handlers is new Gtk.Handlers.User_Return_Callback(Gtk.Widget.Gtk_Widget_Record, Boolean, Timbre_access);
  3.  
  4. -- Ma fonction connectée.
  5.   function Timbre_Right_Popup_Menu(Widget : access Gtk.Widget.Gtk_Widget_Record'Class;Event : Gdk.Event.Gdk_Event;  Timbre : Timbre_Access) return Boolean is
  6.   begin
  7.      Put("Right click" );
  8.      return True;
  9.   end Timbre_Right_Popup_Menu;
  10.  
  11.  
  12.  
  13.  
  14. --- la connection de l'objet Gtk_Fixed
  15.   procedure Initialize(Timbre : in out Timbre_Access; Is_Drums : in Boolean := false) is
  16.   begin
  17.      Timbre := new T_Timbre(Is_Drums);
  18.      Gtk.Box.Gtk_New_Vbox(Timbre.Main_Vbox);
  19.      case Timbre.As_Drums is
  20.         when True =>
  21.            Gtk.Frame.Gtk_New(Timbre.Drums);
  22.         when False =>
  23.            Gtk.Frame.Gtk_New(Timbre.Synth, "Synth" );
  24.            Gtk_New(Timbre.Synth_Fixed);
  25.            Add(Timbre.Synth, Timbre.Synth_Fixed);
  26.            Pack_Start(Timbre.Main_Vbox, Timbre.Synth, True, True, 0);
  27.  
  28.  
  29.            Timbre_Handlers.Connect(Timbre.Synth_Fixed,
  30.                                    "button_press_event",
  31.                                    Timbre_Handlers.To_Marshaller(Timbre_Right_Popup_Menu'Access),
  32.                                    Timbre);
  33.  
  34.  
  35.      end case;
  36.  
  37.      Gtk.Box.Show_All(Timbre.Main_vbox);
  38.   end Initialize;


 
Voila, je fais bien pack_start(..., ...., True, Tue, 0) à chaque emboitement.
 
Si vous pouviez analysez mon problème. Merci pour votre Aide.


Message édité par Profil supprimé le 02-12-2010 à 19:28:35
Reply

Marsh Posté le 01-12-2010 à 21:53:00   

Reply

Marsh Posté le 02-12-2010 à 13:25:43    

Bon je connais toujours pas le ADA mais j'ai trouvé ca: http://www.lifl.fr/~durif/CLA/docGtkAda-1.2.pdf (peut etre connais tu déjà!)
Aux alentours de la page 32 il y a un exemple pour gerer les clics.
Sinon d'une manière générale, on évite de tester une nouvelle technique (j'ai cru comprendre que tu débutait en interface graphique!) dans un projet "final", c'est mieux de créer un projet minimal pour tester un truc nouveau!


---------------
Seul Google le sait...
Reply

Marsh Posté le 02-12-2010 à 13:57:46    

Merci breizhbugs,
Apparemment, on procède plus ainsi... J'ai pas de paquetage Gtk.Signal dans ma bibliothèque Gtk.
J'ai écris un petit programme de test pour éclaircir le problème, mais sans résultat.
Même le signal "event" n'a pas le comportement escompté. Pourtant j'ai déjà connecté "event" avec succès.
J'obtient bien un event à l'ouverture de la fenêtre et au redimenssionnement de celle-ci, mais pas au survol de la surface avec la sourie.

Reply

Marsh Posté le 02-12-2010 à 19:28:07    

J'ai résolu mon problème en mettant Le Gtk_Fixed dans un Gtk_Event_Box. C'est magique.
Merci encore breizhbugs.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed