GtkFr - Cours Gtk+-2

EmpecherLaFermetureDUneFenetre

PageAccueil :: LesNews :: Telechargement :: Liens :: Forum :: LeChat :: Contact
DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes 38.107.191.91
<< Changer le label d'une GtkMenuItem LesAstuces Placer une image de fond dans une fenêtre >>


Empécher la fermeture d'une fenêtre

1. Introduction

Nous allons voir aujourd'hui comment faire pour que lorsque l'utilisateur clique sur la croix de la fenêtre, celle-ci ne se détruise pas automatiquement. En effet même si aucun signal n'est connecté à cette fenêtre, cette dernière se détruit quand même et de plus s'il s'agit de la fenêtre principale le programme ne se termine pas.

2. Solution

La solution à ce problème est tout simple : il suffit de connecter le signal "delete-event" de la fenêtre. Ensuite dans la fonction callback correspondante, il suffit de retourne TRUE si l'on ne veut pas que la fenêtre soit détruite ou FALSE si l'on veut détruire la fenêtre.

3. Programme exemple

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

static GtkWidget *pLabel;
static GtkWidget *pWindow;

gboolean OnQuit(GtkWidget *pWindow, GdkEvent *pEvent, gpointer data);

int main(int argc,char **argv)
{
   GtkWidget* pWindow;

   gtk_init(&argc,&argv);

   pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
   gtk_container_set_border_width(GTK_CONTAINER(pWindow), 4);

   gtk_widget_show_all(pWindow);

   g_signal_connect(G_OBJECT(pWindow), "delete-event", G_CALLBACK(OnQuit), NULL);

   gtk_main();

   return EXIT_SUCCESS;
}

gboolean OnQuit(GtkWidget *pWindow, GdkEvent *pEvent, gpointer data)
{
   GtkWidget *pQuestion;

   pQuestion = gtk_message_dialog_new (GTK_WINDOW(data),
       GTK_DIALOG_MODAL,
       GTK_MESSAGE_QUESTION,
       GTK_BUTTONS_YES_NO,
       "Voulez vous vraiment\nquitter ce programme?");

   /* Affichage et attente d une reponse */
   switch(gtk_dialog_run(GTK_DIALOG(pQuestion)))
   {
       case GTK_RESPONSE_YES:
           /* OUI -> on quitte l application */
           gtk_main_quit();
           break;
       case GTK_RESPONSE_NO:
           /* NON -> on detruit la boite de message */
           gtk_widget_destroy(pQuestion);
	   return TRUE;
           break;
   }
   
   return TRUE;
}


<< Changer le label d'une GtkMenuItem LesAstuces Placer une image de fond dans une fenêtre >>

Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]
Apinc