Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/04/2007, à 13:55

AmI2Blame4

[GTK/C] fermer une application

Bonjour,
Il s'agit d'une question liée à l'utilisation de glade.

Mon appli ne possède pas de bouton, elle se ferme donc par le bouton de fermeture de la décoration de la fenêtre.
Sous glade, j'ai associé une fonction onFerme à l'événement delete-event que j'ai supposé être associé à cette action utilisateur.

Dans mon code, j'ai donc omis la déclaration de cette fonction (que je suppose faite par libglade) et ai introduit cette définition :

void onFerme (GtkWidget *w,gpointer d) {
  gtk_main_quit();
}

Hélas, cela ne semble pas fonctionner car même si la fenêtre se ferme, l'application continue de renvoyer des erreurs dans la console indéfiniment, en effet, une boucle infinie s'y trouve que je pensais être tuée avec l'appli...

Du coup je ne sais pas où se situe l'erreur, est-ce la fonction de callback ? est-ce ma boucle infinie ?

merci pour votre aide

Hors ligne

#2 Le 30/04/2007, à 15:10

Link31

Re : [GTK/C] fermer une application

Je ne crois pas que gtk_main_quit() termine l'application. Cette fonction termine uniquement la boucle de GTK. Essaie :

void quitter() {
  // Opérations à effectuer lorsque le programme se termine (free(), etc...)
}

void onFerme (GtkWidget *w,gpointer d) {
  gtk_main_quit();
  quitter();
  exit(EXIT_SUCCESS);
}

Le problème peut venir du fait qu'il y a du code entre gtk_main() et la fin de main(). C'est-à-dire quelque chose comme :

int main(int argc, char** argv) {
    // ...

    gtk_main ();
    
    // boucle infinie

    return 0;
}

Quand tu appelles gtk_main_quit(), le contrôle revient dans main() juste après la ligne "gtk_main ();", et la boucle infinie commence. Habituellement, les programmes GTK sont codés ainsi :

int main(int argc, char** argv) {
    // ...

    gtk_main ();
    return 0;
}

C'est-à-dire sans rien entre "gtk_main()" et "return 0". Modifier ton code de cette façon serait un moyen beaucoup plus propre que le premier de terminer l'application correctement.

Dernière modification par Link31 (Le 30/04/2007, à 15:16)

Hors ligne

#3 Le 30/04/2007, à 15:15

AmI2Blame4

Re : [GTK/C] fermer une application

Merci,

j'avoue qu'en désespoir de cause, j'ai enlevé onFerme de glade, pour le gérer complétement dans le code et ça fonctionne :
Dans main

  gtk_signal_connect(GTK_OBJECT(maFenetre),"destroy",(GtkSignalFunc) onFerme,NULL)

et ma fonction :

gboolean onFerme (GtkObject *w,gpointer d) {
  gtk_main_quit();
  return 0;
}

Hors ligne

#4 Le 30/04/2007, à 15:16

Link31

Re : [GTK/C] fermer une application

J'ai fait un gros édit wink

Hors ligne

#5 Le 30/04/2007, à 15:25

AmI2Blame4

Re : [GTK/C] fermer une application

Je n'avais rien entre mon gtk_main(); et return 0;,
Néanmoins, je me demande si j'avais bien mis ma onFerme comme une gboolean...ce qui semble être requis...

Hors ligne