Fermer fenetre C et GTK 2.0

ptiniko Messages postés 26 Date d'inscription mercredi 23 avril 2008 Statut Membre Dernière intervention 8 juillet 2009 - 14 nov. 2008 à 16:40
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 - 15 nov. 2008 à 22:56
Bonjour à tous,

Je sollicite votre aide pour un problème qui me fait perdre mon temps pour rien .

Voilà, je débute en C (avec gtk) et donc je pose un bouton sur ma fenetre principale mais quand je clique dessus le fenetre ne se ferme pas. Pourriez-vous m'aider à y voir plus clair. Le code entier n'étant pas hyper long, j'vous le poste.

Merci beaucoup pour votre aide.

Au plaisir de vous lire.



#include <stdlib.h>
#include <gtk/gtk.h>

/*----------------------------------- Déclaration des variables et fonctions ----------------------------------------------------------*/

    GtkWidget* pWindow;
    GtkWidget* pLabel;
    GtkWidget* pBouton;
    GtkWidget* pVBox1;
    gchar* sUtf8;
    GtkWidget* gtk_hbox_new(gboolean homogeneous, gint spacing);
    void gtk_box_pack_start(GtkBox* box, GtkWidget* child, gboolean expand, gboolean fill, guint padding);
    void gtk_widget_destroy(GtkWidget * widget);

/*------------------------------------------------------------MAIN----------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------*/

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

/*----------------------------------------------- Initialisation du GTK ---------------------------------------------------------------*/

    gtk_init(&argc,&argv);

/*-----------------------------------------------  Fenetre Principale   ---------------------------------------------------------------*/

    pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(pWindow),"Menu Videotheque");
    gtk_window_set_default_size(GTK_WINDOW(pWindow), 1280, 800);

/*-----------------------------------------------  Création des box's   ---------------------------------------------------------------*/

    pVBox1 = gtk_hbox_new(TRUE, 1);
    gtk_container_add(GTK_CONTAINER(pWindow), pVBox1);

/*-----------------------------------------------  Création du bouton  

    pBouton = gtk_button_new_with_label("Quitter");
    gtk_container_add(GTK_CONTAINER(pVBox1), pBouton);
    /* On appelle directement la fonction de sortie de boucle */



    g_signal_connect(G_OBJECT(pWindow), "quit", G_CALLBACK(gtk_widget_destroy), (gpointer*) pWindow); // L'erreur est ici je pense







/*-----------------------------------------------  Création du label    ---------------------------------------------------------------*/

    pLabel =gtk_label_new(NULL);
    /* Gestion des caractères unicodes */
    sUtf8 = g_locale_to_utf8("Vidéothèque", -1, NULL, NULL, NULL);
    g_free(sUtf8);
    gtk_label_set_markup(GTK_LABEL(pLabel), sUtf8);
    /* Texte centré */
    gtk_label_set_justify(GTK_LABEL(pLabel), GTK_JUSTIFY_CENTER);
    gtk_container_add(GTK_CONTAINER(pVBox1), pLabel);
    gtk_box_pack_start(GTK_BOX(pVBox1), pLabel, TRUE, TRUE, 2);

// --------------------------------------------------- Affichage de la fenetre

    gtk_widget_show_all(pWindow);

// --------------------------------------------------- Lancement de la boucle infinie

    gtk_main();

    return EXIT_SUCCESS;
}








Merci encore.



Niko

1 réponse

katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
15 nov. 2008 à 22:56
Salut,

remplacer

g_signal_connect(G_OBJECT(fen), "quit", G_CALLBACK(gtk_widget_destroy), (gpointer*) fen); // L'erreur est ici je pense

par

g_signal_connect (pBouton, "clicked", gtk_main_quit, NULL); //clic sur bouton
g_signal_connect (pWindow, "destroy", gtk_main_quit, NULL); //clic sur la croix

PS: attention pas besoin de variables globales ici
0
Rejoignez-nous