Règles du forum

Le langage Ada uniquement, pas les compilateurs. Les questions de sémantique et de langage et les questions techniques liées à une application en particulier, son deux choses différentes. Si nécessaire, un forum sur GNAT et les autres compilateurs, tel JanusAda, sera ouvert.

Auteur Message
Beau Parleur
Avatar de l’utilisateur
Bonjour,
J'écrit actuellement un nouveau programme qui accept une ligne de commande afin de l'exécuter dans les meilleurs conditions.

Pour les commande contenant un nom de fichier, j'utilise une fonction de completion de chemin, afin de présenter la liste des chmin possible dans un Gtk_Text_View.
En fait ma fenêtre se présente en image :
Image

Mon problème est que lorsquue j'entre une tabulation pour appeler la completion, deux choses se passent :
- le text est selectionné dans sa totalité : je souhaite le deselectioner.
- si la completion n'est pas possible, je me trouve dans le Gtk_Text_View au lieu de rester dans la ligne de commande.

j'ai essayé de faire un set_position pour desselctionner mais ça marche pas.

et j'ai essayé de faire un set_focus, mais ça marche pas nom plus.

Voici mon code je creation du text_view :

Source ada : 

function Filename_Completion(Line : in String;
Arknos : Arknos_Pointer) return String is

Filename : Common.String_Access;
begin

Arkn.Completion.Completion
(Line => Line, Full_Command => Filename, Result => Arknos.Result);
if Filename /= null then
declare
Result : constant String := To_String(Filename.all);
begin
Set_Position(Arknos.Main_Line, Result'Length);
Free(Filename);
return Result;
end;
else

Gtk_New(Arknos.Result_Text_buffer);
Gtk_New(Arknos.Result_Text_View, Arknos.Result_Text_Buffer);
Gtk_New(Arknos.Result_Scroll);
Set_Editable(Arknos.Result_Text_View, False);
Add(Arknos.Result_Scroll, Arknos.Result_Text_View);
Gtk_New(Arknos.Result_Frame, "Completion :");
Add(Arknos.Result_Frame, Arknos.Result_Scroll);
Set_Size_Request(Arknos.Result_Frame, 355, 250);
Pack_Start(Arknos.Main_Vbox, Arknos.Result_Frame, False);

declare
Top, Bot : Gtk_Text_Iter;
Mark : Gtk.Text_Mark.Gtk_Text_Mark;
begin
Get_Start_Iter(Arknos.Result_Text_Buffer, Bot);
for I in Arknos.Result.File_Content'Range loop
Put_Line (To_String (-Arknos.Result.File_Content(I)));
Insert
(Arknos.Result_Text_Buffer,
Bot,
Locale_To_Utf8
(To_String(-Arknos.Result.File_Content(I)) &
Character'Val(13))
);
Get_Bounds
(Arknos.Result_Text_Buffer, Top, Bot);
end loop;
Get_Bounds
(Arknos.Result_Text_Buffer, Top, Bot);
Mark :=
Create_Mark
(Arknos.Result_Text_buffer, Where => Bot);
Scroll_To_Mark
(Arknos.Result_Text_view, Mark, 0.0, false, 0.0, 0.0);
end;
Show_All(Arknos.Main_Vbox);
Set_Focus(Arknos.Window, Arknos.Main_Line);
return line;
end if;
end Filename_Completion;

Les sources sont sur sourceforge.net : projet "arknos".

Merci pour votre aide ou vos idées.
Profil
Beau Parleur
Avatar de l’utilisateur
Bon, je me suis rendu compte de ma légèreté ici.

J'ai déplacé le set_focus et le set_position dans la procédure appelante juste après l'appel.

Mais j'ai toujour les même symptome.
Profil
Beau Parleur
Avatar de l’utilisateur
Bonjour,

J'essaie de porter le programme sur MS Windows, mais il plante dans la version courante.

Ca me pose un petit problème vue que j'aurais bien aimé avoir ce programme sur Windows également.

Si vous souhaitez chercher la cause, dite le, j'ai ajouter du code pour compiler sur MS Windows. C'est un problème d'utilisation de Gtk visiblement. Le code est fonctionnel sur GNU/Linux Debian.

L'objectif étant de lancer des commande et de garder un oeil sur elles.

Merci pour votre aide ou votre contribution.
Profil