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 :

callback et paramètres


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut callback et paramètres
    bonjour,

    je sais que j'ai une erreur bête dans le bout de code qui suit mais la je ne la vois pas :

    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
    57
    gboolean MAJ(gpointer d)
     {
     	Tcb *P=(Tcb *) d;
     	gchar min[5];
     
     	(P->nb_min)++;
     	g_sprintf(min,"%2d min",P->nb_min);
     	gtk_status_icon_set_tooltip(P->icon,min);
     
     	if ( P->nb_min >= 45 && P->pause==FALSE )
     	{
     		P->pause=TRUE;
     		P->nb_min=0;
     		printf("STOP !\n");
     	}
     	else
     	{
     		if (P->pause!=TRUE && P->nb_min==15)
     		{
     			P->pause=FALSE;
     			P->nb_min=0;
     			printf("Au BOULOT !\n");
     		}
     		else
     		{
     			printf("Tout est normal : %d min\n",P->nb_min);
     		}
     	}
     
     	return TRUE;
     }
     
    int main (int argc, char ** argv)
    {
      Tcb P;
      int id_thread;
      gchar min[5];
     
      P.nb_min=0;
      P.pause=FALSE;
     
      gtk_init (&argc, &argv);
     
      // Creation de l'icone et d'une info-bulle.
      P.icon = gtk_status_icon_new_from_file (ICONE);
      g_sprintf(min,"%2d min",P.nb_min);
      gtk_status_icon_set_tooltip (GTK_STATUS_ICON (P.icon),min);
     
    // On attache un callback sur le widget GtkStatusIcon.
      g_signal_connect (G_OBJECT(P.icon),"popup-menu",G_CALLBACK(popup_menu_function),NULL);
     
      id_thread=g_timeout_add(1000,(GSourceFunc)MAJ,&P);
     
      gtk_main ();/*g_timer_destroy (timer);*/
     
      return 0;
    }
    le problème est que lors de l'appel à la fonction MAJ j'obtient :

    (test:9028): Gtk-CRITICAL **: gtk_status_icon_set_tooltip: assertion `GTK_IS_STATUS_ICON (status_icon)' failed
    Tout est normal : 0 min

  2. #2
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Tout est dans le message : est ce que tu est certain de passer le bon type de widget (P->icon) à la fonction gtk_status_icon_set_tooltip ?

  3. #3
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    oui, l'utilisation de cette fonction dans le main ne pose pas de problème.

    Je pense que le problème est ailleurs : ce que je trouve bizarre est que dans MAJ(), P->nb_min est bon avant les if (testé par des printf) mais il m'affiche 0 dans le else.

    edit : les valeurs des champs de ma structure ne semble pas initialisés ! P->pause et P->nb_min ne me renvoi pas ce qu'il faudrait donc P->icon aussi je pense. Mais je ne vois pas ou je l'utilise mal

  4. #4
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Si MAJ est un callback, lors de son enregistrement tu lui passe le bon paramètre ?

    Sinon, tu l'appelles bien avec l'adresse de ton instance de structure ?

  5. #5
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    le lancement du callback se fait avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id_thread=g_timeout_add(1000,(GSourceFunc)MAJ,&(P));
    P étant du type de ma structure (Tcb) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct
    {
    	int nb_min;
    	gboolean pause;
    	GtkStatusIcon *icon;
    }Tcb;
    et MAJ n'a que la structure en paramètre est :

    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
     gboolean MAJ(gpointer d)
     {
     	Tcb *P=(Tcb *) d;
     	gchar min[6];
     
    	(P->nb_min)++;
     	sprintf(min,"%2.0d min",P->nb_min);
     	//gtk_status_icon_set_tooltip(P->icon,min);
     
     	if (P->pause==FALSE)
     		printf("FALSE ");
     	else
     		printf("TRUE ");
     
     	if ( (P->pause)==FALSE && (P->nb_min)>= 45 )
     	{
     		P->pause=TRUE;
     		P->nb_min=0;
     		printf("STOP !\n");
     	}
     	else
     	{
     		if ( (P->pause)==TRUE && (P->nb_min)>=15 )
     		{
     			P->pause=FALSE;
     			P->nb_min=0;
     			printf("AU BOULOT !\n");
     		}
     		else
     		{
     			printf("Tout est normal : %d min\n",P->nb_min);
     		}
     	}
     
     	return TRUE;
     }

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Quelle idée d'inventer un prototype de fonction de rappel quand on nous le donne : popup-menu

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

Discussions similaires

  1. Fonctions CallBack et paramètre
    Par myred dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 22/04/2012, 17h15
  2. Appel d'un callback avec paramètres
    Par Anduriel dans le forum MATLAB
    Réponses: 2
    Dernier message: 23/08/2011, 15h59
  3. Callback et paramètre
    Par grunk dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/11/2010, 18h15
  4. appel à un callback avec paramètres
    Par kawther dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 13/03/2009, 00h04
  5. Réponses: 4
    Dernier message: 14/09/2006, 12h25

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