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 :

Ajout d'un onglet a la volee


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 Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut Ajout d'un onglet a la volee
    Je suis toujours sur mon IRC fait maison. J'ai cree uen fonction permettant de creer des onglets pour ajouter un nouveau channel ou message prive.
    Quand je le fais en dur dans mon programme avec des onglets test, ca fonctionne parfaitement, mais quand je fais appelle a cette meme fonction lorsque je clique sur un bouton, alors un joli segmentation fault se produit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct  s_interface
    {
      GtkWidget     *window;
      GtkWidget     *notebook;
      GtkWidget     *vbox1;
      GtkWidget     *label1;
      GSList        *channels;
    }               t_interface;
    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
    typedef struct  s_channel
    {
      GtkWidget     *title;
      GtkWidget     *hbox1;
      GtkWidget     *hbox2;
      GtkWidget     *vbox2;
      GtkWidget     *vbox3;
      GtkWidget     *scrolledwindow;
      GtkWidget     *textview;
      GtkWidget     *entry;
      GtkWidget     *label1;
      GtkWidget     *label2;
      GtkWidget     *menu;
      GSList        *pseudos;
    }               t_channel;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void            on_click_pseudo(GtkWidget *widget, gpointer data)
    {
      t_interface   *interface;
     
      interface = (t_interface *) data;
      add_channel(interface);
      printf("Ajout d'un message prive\n");
      widget = NULL;
    }
    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
    void            add_channel(t_interface *interface)
    {
      t_channel     *channel;
      gchar         *str;
      static gint   i = 0;
     
      channel = g_malloc(sizeof(t_channel));
      str = g_strdup_printf("#Channel %d", i + 1);
      channel->title = gtk_label_new(str);
      str = g_strdup_printf("Menu -> #Channel %d", i + 1);
      channel->menu = gtk_label_new(str);
      channel->hbox1 = gtk_hbox_new(FALSE, 0);
      create_pseudos_list(channel);
      gtk_box_pack_start(GTK_BOX(channel->hbox1), channel->vbox2, FALSE, TRUE, 0);
      create_display_zone(channel);
      gtk_box_pack_start(GTK_BOX(channel->hbox1), channel->vbox3, TRUE, TRUE, 0);
      gtk_notebook_append_page_menu(GTK_NOTEBOOK(interface->notebook), channel->hbox1, channel->title, channel->menu);
      interface->channels = g_slist_append(interface->channels, (gpointer) channel);
      g_free(str);
      i++;
    }

  2. #2
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Voici le message d'erreur que ca genere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (client:13619): GLib-GObject-WARNING **: invalid cast from `GdkWindow' to `GtkNotebook'
     
    (client:13619): Gtk-CRITICAL **: gtk_notebook_append_page_menu: assertion `GTK_IS_NOTEBOOK (notebook)' failed
    Pourtant, si je fait appel a cette fonction directement dans le code (sans faire un click sur un label), ca fonctionne bien.

    Peut etre que ca un rapport avec le fait que la fenetre est deja affiche a l'ecran, l'application est deja genere, non?

  3. #3
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    J'ai localise le probleme.

    Je fais un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(G_OBJECT(pseudo->eventbox), "button_press_event", G_CALLBACK(on_click_pseudo), (gpointer) interface);
    Puis dans ma fonction on_click_pseudo(), je regarde l'adresse du pointeur data, et elle est differente de celle de interface !!!

  4. #4
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Si j'utilise des boutons au lieu d'utiliser des labels cliquables, la donnee data recupere bien l'adresse du pointeur de interface.
    Cependant, meme si un appel de al fonction qui permet de rajouter un onglet a ete fait, rien n'apparait, comme si cette fonction n'a pas ete appelee ...
    Je compte le nombre d'onglets, et il est bien incremente. Faut-il redessiner la fenetre, ou un truc de ce genre?

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/02/2008, 12h03
  2. ajout de l'onglet perspective dans un RCP
    Par gama2ee dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 21/08/2007, 11h45
  3. [VBA] - Ajout d'un onglet
    Par rehren dans le forum IHM
    Réponses: 2
    Dernier message: 23/04/2007, 12h27
  4. [VBA-E] ajout d'un onglet dans plusieurs fics
    Par elkhy dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 17/05/2006, 19h22

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