IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

Faire tourner une GtkDialog en tache de fond


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut Faire tourner une GtkDialog en tache de fond
    Bonjour,

    J'aimerai savoir s'il est possible de faire tourner une GtkDialog en tache de fond, c'est à dire, lancer la boite de dialogue mais la laisser non visible, puis l'afficher dans certains cas, et bien entendu la cacher lorsqu'on en a plus besoin.

    En fait, mon problème, c'est que gtk_dialog_run est bloquante.

    Donc, ben si quelqu'un a une idée, ça serait sympa
    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    L'exemple de la doc officielle fait ça je pense, non ?
    http://library.gnome.org/devel/gtk/u...og.description

  3. #3
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    Dans cet exemple, ils affichent la boîte de dialogue avec un gtk_widget_show_all, et en effet, ça fonctionne dans leur cas.

    Seulement, moi, quand je passe la GtkDialog en paramètre data à une callback, pour la caster en GtkWidget, puis l'afficher avec gtk_widget_show_all, j'ai des erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (a.out:11859): GLib-GObject-WARNING **: invalid unclassed pointer in cast to `GtkWidget'
     
    (a.out:11859): Gtk-CRITICAL **: gtk_widget_show_all: assertion `GTK_IS_WIDGET (widget)' failed
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #include <gtk/gtk.h>
     
    static gboolean delete_event_signal (GtkWidget *widget, gpointer data);
    static void response_event_handler (GtkWidget *widget, gint response_id, gpointer data);
     
    int
    main (int    argc, 
          char   *argv[])
    {
    	GtkWidget *window;
    	GtkWidget *dialog;
     
    	gtk_init (&argc, &argv);
     
    	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    	gtk_window_set_default_size (GTK_WINDOW(window), 320, 200);
     
            /* Cette boite de dialogue doit être affichée lorsque l'on clique sur la
             * croix rouge de la fenetre. Sinon, elle est cachée.
             */
    	dialog = gtk_message_dialog_new (NULL,
    		   GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
    		   GTK_MESSAGE_QUESTION,
    		   GTK_BUTTONS_YES_NO,
    		   "Voulez vous vraiment quitter\nl'application ?", NULL);
    	g_signal_connect (dialog, "response", G_CALLBACK(response_event_handler), NULL);
    	g_signal_connect (window, "delete-event", G_CALLBACK(delete_event_signal), NULL);
     
     
    	gtk_widget_show (window);
     
    	gtk_main ();
     
    	return 0;
    }
     
    static gboolean
    delete_event_signal (GtkWidget *widget, gpointer data)
    {
            /* La croix rouge a été cliquée, j'affiche le message */
    	gtk_widget_show_all (GTK_WIDGET(data));
    	return TRUE;
    }
     
    static void 
    response_event_handler (GtkWidget *widget, gint response_id, gpointer data)
    {
            /* L'utilisateur a répondu, je cache la boite de dialogue */
    	gtk_widget_hide_all (widget);
     
            /* On quitte l'application en cas de réponse positive */
    	if (response_id == GTK_RESPONSE_YES
                || response_id == GTK_RESPONSE_NONE) {
    		gtk_main_quit ();
    	}
    }
    Pourquoi mon parametre data, c'est plus un GtkWidget ?

  4. #4
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Peut être parce que tu as passé NULL comme valeur au paramètre data à la connexion du signal ?

  5. #5
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    J'aime bien l'émoticône que tu as choisis Liberforce . +1 Pour ca et pour le commentaire bien sûr.

  6. #6
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    Oups, belle étourderie, lol

    Par contre, même en passant la boite de dialogue en paramètre, j'ai toujours l'erreur

    Voici le code corrigé que j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #include <gtk/gtk.h>
     
    static gboolean delete_event_signal (GtkWidget *widget, gpointer data);
    static void response_event_handler (GtkWidget *widget, gint response_id, gpointer data);
     
    int main (int argc, char *argv[])
    {
    	GtkWidget *window;
    	GtkWidget *dialog;
     
    	gtk_init (&argc, &argv);
     
    	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    	gtk_window_set_default_size (GTK_WINDOW(window), 320, 200);
     
    	/* Cette boite de dialogue doit être affichée lorsque l'on clique sur la
    	 * croix rouge de la fenetre. Sinon, elle est cachée.
    	 */
    	dialog = gtk_message_dialog_new (NULL,
    			GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
    			GTK_MESSAGE_QUESTION,
    			GTK_BUTTONS_YES_NO,
    			"Voulez vous vraiment quitter\nl'application ?", NULL);
    	g_signal_connect (dialog, "response", G_CALLBACK(response_event_handler), NULL);
    	g_signal_connect (window, "delete-event", G_CALLBACK(delete_event_signal), dialog);
     
     
    	gtk_widget_show (window);
     
    	gtk_main ();
     
    	return 0;
    }
     
    	static gboolean
    delete_event_signal (GtkWidget *widget, gpointer data)
    {
    	/* La croix rouge a été cliquée, j'affiche le message */
    	gtk_widget_show_all (GTK_WIDGET(data));
    	return TRUE;
    }
     
    	static void 
    response_event_handler (GtkWidget *widget, gint response_id, gpointer data)
    {
    	/* L'utilisateur a répondu, je cache la boite de dialogue */
    	gtk_widget_hide_all (widget);
     
    	/* On quitte l'application en cas de réponse positive */
    	if (response_id == GTK_RESPONSE_YES
    			|| response_id == GTK_RESPONSE_NONE) {
    		gtk_main_quit ();
    	}
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. faire tourner un script en tache de fond
    Par suzan_ dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 25/09/2010, 08h38
  2. [VB6] Faire tourner une appli en tache non bloquante
    Par hirochirak dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 01/06/2006, 11h56
  3. Faire tourner une Application en Taches de fond
    Par ArkAng3 dans le forum MFC
    Réponses: 3
    Dernier message: 26/08/2005, 14h06
  4. executer une page en tache de fond
    Par Invité(e) dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/01/2005, 16h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo