Pages : 1
#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
Pages : 1