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 20/05/2007, à 23:22

brutor

Gtk envoi signal

Bonjour,
voici ce code :

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

GtkWidget* window;
GtkWidget* dialog;

void* getsignal(void* inutile)
{
	sleep(3);
	g_signal_emit_by_name(G_OBJECT(window),"destroy");
}

int main ( int argc , char** argv )
{
	pthread_t thread;

	gtk_init(&argc,&argv);
	
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);
	pthread_create (&thread, NULL, getsignal, NULL);
	gtk_widget_show(window);
	gtk_main();
	
	return EXIT_SUCCESS;
}

Qui crée une fenêtre qui doit être détruite 3 seconde après avec l'envoi d'un signal avec g_signal_emit_by_name(G_OBJECT(window),"destroy"); , seulement cette fonction revois cette erreur lors de l'execution: "(main:14254): Gtk-CRITICAL **: gtk_style_detach: assertion `style->attach_count > 0' failed" et la fenêtre se détruit et le programme  se termine que si la souris rentre ou quitte la fenêtre apres ces 3 secondes.

Comment faire pour que dès que les 3 secondes se sont écoulés, la fenêtre sa ferme sans intervantion extérieur et pour enlever ce message d'erreur?

Merci pour votre aide

Hors ligne

#2 Le 21/05/2007, à 05:46

marc31

Re : Gtk envoi signal

moi j'utiliserai gtk_timeout_add() et gtk_main_quit() ; je programme en php-gtk si tu veux la démo c'est faisable.


ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org

Hors ligne

#3 Le 21/05/2007, à 08:09

Watchwolf

Re : Gtk envoi signal

je pense que c'est parce que la fenetre est detruite. Tu ne peut donc pas y acceder dans ta fonction .

Hors ligne

#4 Le 21/05/2007, à 10:31

trucutu

Re : Gtk envoi signal

Si la fen^^etre doit être détruite 3 s après l'envoi du signal "destroy", tu n'es pas loin de la soluce je pense.

Dans le main, tu mets G_CALLBACK(getSignal) : getSignal va être appelée si "destroy" est lancé.
Dans getSignal, tu laisse ton sleep(3) (ou 3000, je sais plus trop), et tu fais un gtk_main_quit() : tu sort de la boucle de GTK au bout de 3 s.

Ca marche ??


La chanson du dimanche - "La pêche !"
PC acheté chez Novatux : entièrement satisfait.
Faire des recherches solidaires !

Hors ligne

#5 Le 21/05/2007, à 10:34

toto4455

Re : Gtk envoi signal

ou sinon tu utilise comme le dit marc31 gtk.timeout.add .

int main ( int argc , char** argv )
{
	gtk_init(&argc,&argv);
    
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);

	gtk_widget_show(window);
   
	gtk_timeout_add (3000, (GtkFunction)gtk_main_quit,0);
 
	gtk_main();
 	
    return EXIT_SUCCESS;
}

#6 Le 21/05/2007, à 17:51

brutor

Re : Gtk envoi signal

merci pour vos réponses

Hors ligne