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 :

Problème avec onglets "à la Firefox"


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Problème avec onglets "à la Firefox"
    Bonjour,

    Je désirerai créer des onglets "à la Firefox", c'est-à-dire avoir la possibilité de fermer chaque onglet indépendamment même ceux non actifs avec un bouton de fermeture sur chacun d'eux.

    J'ai réussi à coder sur un code test cette fonctionnalité mais j'obtiens un comportement étrange lors de la fermeture des onglets. Fermé dans l'ordre de 5 à 0, il n'y a aucun problème mais de 0 à 5 ou aléatoirement, l'onglet 3 ferme l'onglet 5, et etc...

    D'où pourrait provenir ce problème? et comment pourrait-on le résoudre?

    constante.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    GList *list = NULL;
     
    typedef struct _pages {
        gint page_num;
        GtkWidget *icon;
        GtkWidget *label;
        GtkWidget *onglet_box;
        GtkWidget *box;
        GtkWidget *button;
    } t_pages;
    main.c :
    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
    58
    59
    60
    61
    62
    63
    64
    int main (int argc, char **argv)
    {
        gint i = 0;
     
        gchar *string           = NULL;
        GtkWidget *win          = NULL;
        GtkWidget *notebook     = NULL;
     
        t_pages *nouvelle = (t_pages *)malloc(6 * sizeof(t_pages));
     
        /* Initialize GTK+ */
        gtk_init (&argc, &argv);
     
        /* Create the main window */
        win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_default_size(GTK_WINDOW(win), 320, 200);
        gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
        g_signal_connect (win, "destroy", gtk_main_quit, NULL);
     
        notebook = gtk_notebook_new();
        gtk_container_add(GTK_CONTAINER(win), notebook);
     
        /* Create 6 pages with close button */
        for(i = 0; i < 6; i++)
        {
            fprintf(stderr,"adresse p>>%p\n",&nouvelle[i]);
     
            nouvelle[i].page_num = i;
            string = g_strdup_printf("page %d", i);
            nouvelle[i].label       = gtk_label_new(string);
            nouvelle[i].box         = gtk_vbox_new(FALSE, 0);
            nouvelle[i].onglet_box  = gtk_hbox_new(FALSE, 0);
     
            gtk_box_pack_start (GTK_BOX(nouvelle[i].onglet_box), nouvelle[i].label, TRUE, TRUE, 0);
     
            nouvelle[i].button  = gtk_button_new ();
            nouvelle[i].icon    = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
            gtk_button_set_image (GTK_BUTTON(nouvelle[i].button), nouvelle[i].icon);
            gtk_button_set_relief (GTK_BUTTON(nouvelle[i].button), GTK_RELIEF_NONE);
     
            /* Associate button with the "num page" */
            g_object_set_data (G_OBJECT(nouvelle[i].button), "str", (gpointer)i);
     
            gtk_box_pack_start (GTK_BOX(nouvelle[i].onglet_box), nouvelle[i].button, TRUE, TRUE, 0);
     
            /* Add the structure _pages in Glist */
            list = g_list_append (list, &nouvelle[i]);
            g_free(string);
     
            gtk_notebook_append_page(GTK_NOTEBOOK(notebook), nouvelle[i].box, nouvelle[i].onglet_box);
            g_signal_connect (G_OBJECT(nouvelle[i].button), "clicked", G_CALLBACK(DeleteOnglet), notebook);
     
            gtk_widget_show_all(nouvelle[i].onglet_box);
        }
     
        g_free(string);
     
        gtk_widget_show_all (win);
        gtk_main ();
     
        free(nouvelle);
     
        return EXIT_SUCCESS;
    }
    La fonction de suppression :
    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
    void DeleteOnglet (GtkWidget *widget, gpointer data)
    {
        gint n      = 0;
        gint i      = 0;
        gint num    = 0;
        gint nb     = 0;
     
        gpointer p  = NULL;
        t_pages *element;
     
        n = gtk_notebook_get_n_pages(GTK_NOTEBOOK(data));
     
        while(n>0)
        {
            /* Recovers structure _pages in position i in the Glist *
             * then the num of the page associate                   */
            element = (t_pages *)g_list_nth_data(list, i);
            num = (gint)element->page_num;
     
            /* Recovers the num of clicked button */
            p   = g_object_get_data(G_OBJECT(widget), "str");
            nb  = (gint) p;
     
            fprintf(stderr,"nb button >> %d >> %d\n",nb,i);
            fprintf(stderr,"num onglet >> %d\n",num);
     
            if (num == nb)
            {
                gtk_notebook_remove_page (GTK_NOTEBOOK(data), num);
                list = g_list_remove(list, element);
                break;
            }
            i++;
        }
    }
    Merci d'avance de votre aide !

  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
    Points : 2 002
    Points
    2 002
    Par défaut
    C'est parce que tu gères mal tes numéros de page avec ton indice i:
    Tes pages sont numérotées de 0 à 5. Si tu supprimes la page 0, que se passe-t-il ? Hé bien la page 1 devient la page 0, la page 2 devient la page 1, etc.

    A l'itération suivante, tu demandes à supprimer la page 1, qui en fait était auparavant la page 2. Bref, ça ne peut pas fonctionner de cette manière.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci de votre réponse ! Toutefois, après avoir étudié la question, je ne vois pas où ce trouve l'erreur car :

    La liste chainée se décale au fur et à mesure de la suppression des éléments, lorsque je supprime l'élément en position 0, l'élément en position 1 passe en 0, etc.
    Les éléments restant possèdent tous un numéro unique (avec "page_num") et chaque bouton ont eux aussi un numéro mais ceux-ci ne changent pas.
    Donc "page_num" et le numéro du bouton, quand ils sont égaux applique bien la condition de suppression même avec le décalage.

    Est-ce que le notebook associerai le numéro 0 à la page 1 une fois la page 0 supprimée? Donc le problème viendrait des numéros d'onglets non remis à jour?

  4. #4
    Membre habitué

    Inscrit en
    Mai 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 132
    Points : 171
    Points
    171
    Par défaut
    Salut,

    je vais essayer expliquer le problème (a mon avis), mais je ne sait pas s'il sera clair, parce que je (ne) suis pas français :-)

    Ok, il y a plusieurs problèmes:
    1. on peut supprimer la page, qui n'est pas active (et je ne suis pas sur si c'est bonne solution)
    2. il n'y a pas de correspondance entre les onglets et les articles (postes?) dans struct nouvelle
    3. la position de page est toujours la même
    p = g_object_get_data(G_OBJECT(widget), "str"); ( je crois )

    Alors, après ajouter le code suivant

    gint g_page_num = 0;

    void
    on_notebook_switch_page (GtkNotebook *notebook,
    GtkNotebookPage *page,
    guint page_num,
    gpointer user_data)
    {
    g_page_num = page_num;
    // g_print ( "on_notebook_switch_page %u\n", page_num );
    }


    void DeleteOnglet (GtkWidget *widget, gpointer data)
    {
    gtk_notebook_remove_page ( GTK_NOTEBOOK (data), g_page_num );
    }


    int main (int argc, char **argv)
    {
    ....

    g_signal_connect ((gpointer) notebook, "switch_page",
    G_CALLBACK (on_notebook_switch_page), NULL);

    ......
    }

    ca marche bien. Avant supprimer une page il faut la sélectionner (activer).

    Fredy "Kruger" Pumpicka

    (je dois dire que ta réalisation est très sympa :-) )

    Apres un peu joue avec ton code je proposerais que chacque onglet aiet son struct t_pages, mais comment le faire ?

  5. #5
    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
    Points : 2 002
    Points
    2 002
    Par défaut
    Citation Envoyé par DarkFerret Voir le message
    Est-ce que le notebook associerai le numéro 0 à la page 1 une fois la page 0 supprimée? Donc le problème viendrait des numéros d'onglets non remis à jour?
    Le notebook gère lui même en interne ses propres numéros de page. Tu as beau lui dire que c'est la page 4 que tu veux supprimer, cela ne correspond plus à rien si tu as déjà supprimé une page, sa numérotation en interne ne correspond plus à la tienne. C'est pour cela que tu ne dois pas gérer toi même la numérotation. Ne stocke pas tes numéros de pages dans page_num, cela ne sert à rien. Ne fais pas de g_object_set_data pour stocker le numéro de page dans le bouton, cela ne sert à rien non plus !

    Utilise plutôt gtk_notebook_get_current_page qui te donnera le numéro de la page active (celle que tu essaies de supprimer en cliquant sur un bouton), ou gtk_notebook_page_num qui à partir d'un pointeur vers le widget qui représente ta page peut te fournir son numéro.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci beaucoup pour vos réponses !

    J'ai déjà utilisé gtk_notebook_get_current_page et gtk_notebook_page_num, seulement soit la current page est supprimée soit la toute dernière (ils ont tous le même widget), c'est pour cela que j'ai cherché à garder la numérotation...

    Donc je ne vois pas comment pourrait être codé les onglets de Firefox.

  7. #7
    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
    Points : 2 002
    Points
    2 002
    Par défaut
    Citation Envoyé par DarkFerret Voir le message
    J'ai déjà utilisé gtk_notebook_get_current_page et gtk_notebook_page_num, seulement soit la current page est supprimée soit la toute dernière (ils ont tous le même widget), c'est pour cela que j'ai cherché à garder la numérotation...

    Donc je ne vois pas comment pourrait être codé les onglets de Firefox.
    1. L'interface graphique de Firefox n'est pas en GTK, mais en XUL.
    2. Tes pages n'ont absolument pas toutes le même widget, celui qui compte c'est celui que tu as passé en paramètre child à gtk_notebook_append_page, c'est à dire ta GtkVbox.

  8. #8
    Membre habitué

    Inscrit en
    Mai 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 132
    Points : 171
    Points
    171
    Par défaut
    Salut,

    le code svuivant marche bien :


    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
     
    #include "gtk/gtk.h"
    #include <stdlib.h>
     
     
    GList *list = NULL;
    gint	g_page_num_last = 0;
     
     
    typedef struct _pages
    {
        gint page_num;
        GtkWidget *icon;
        GtkWidget *label;
        GtkWidget *onglet_box;
        GtkWidget *box;
        GtkWidget *button;
    } t_pages;
     
     
     
     
     
     
    void
    on_notebook_switch_page            (GtkNotebook     *notebook,
                                            GtkNotebookPage *page,
                                            guint            page_num,
                                            gpointer         user_data)
    {
    //	g_print ( "on_notebook_switch_page from old %u to new %u\n", g_page_num_last, page_num );
     
    	GtkWidget *nb_page	= gtk_notebook_get_nth_page ( notebook, g_page_num_last );
      t_pages *nouvelle		= (t_pages *)g_object_get_data ( G_OBJECT ( nb_page ), "objects" );
    	gtk_widget_set_sensitive ( nouvelle->button, false );
     
    	g_page_num_last = page_num;
     
    	nb_page	= gtk_notebook_get_nth_page ( notebook, page_num );
      nouvelle		= (t_pages *)g_object_get_data ( G_OBJECT ( nb_page ), "objects" );
    	gtk_widget_set_sensitive ( nouvelle->button, true );
     
    }
     
     
    void DeleteOnglet (GtkWidget *widget, gpointer data)
    {
    	gtk_notebook_remove_page ( GTK_NOTEBOOK (data), g_page_num_last );
    }
     
     
    void
    on_notebook_page_removed           (GtkNotebook     *notebook,
                                            GtkWidget       *widget,
                                            guint            page_num,
                                            gpointer         user_data)
    {
      t_pages *nouvelle		= (t_pages *)g_object_get_data ( G_OBJECT ( widget ), "objects" );
      free ( nouvelle );
     
    //	g_print ( "on_notebook_page_removed %u\n", page_num );
    }
     
     
     
    int main (int argc, char **argv)
    {
        gint i = 0;
     
        gchar *string           = NULL;
        GtkWidget *win          = NULL;
        GtkWidget *notebook     = NULL;
     
     
        /* Initialize GTK+ */
        gtk_init (&argc, &argv);
     
        /* Create the main window */
        win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_default_size(GTK_WINDOW(win), 320, 200);
        gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
        g_signal_connect (win, "destroy", gtk_main_quit, NULL );
     
        notebook = gtk_notebook_new ();
        gtk_container_add(GTK_CONTAINER(win), notebook);
     
        /* Create 6 pages with close button */
        for(i = 0; i < 6; i++)
        {
     
    		    t_pages *nouvelle = (t_pages *)malloc( sizeof(t_pages) );
     
            fprintf ( stderr, "adresse p>>%p\n", nouvelle );
     
            nouvelle->page_num = i;
            string = g_strdup_printf("page %d", i);
            nouvelle->label       = gtk_label_new(string);
            nouvelle->box         = gtk_vbox_new(FALSE, 0);
            nouvelle->onglet_box  = gtk_hbox_new(FALSE, 0);
     
            gtk_box_pack_start (GTK_BOX(nouvelle->onglet_box), nouvelle->label, TRUE, TRUE, 0);
     
            nouvelle->button  = gtk_button_new ();
            nouvelle->icon    = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
            gtk_button_set_image (GTK_BUTTON(nouvelle->button), nouvelle->icon);
            gtk_button_set_relief (GTK_BUTTON(nouvelle->button), GTK_RELIEF_NONE);
     
            /* Associate button with the "num page" */
            g_object_set_data ( G_OBJECT(nouvelle->box), "objects", nouvelle );
     
            gtk_box_pack_start (GTK_BOX(nouvelle->onglet_box), nouvelle->button, TRUE, TRUE, 0);
     
            /* Add the structure _pages in Glist */
            list = g_list_append (list, &nouvelle);
     
            gtk_notebook_append_page(GTK_NOTEBOOK(notebook), nouvelle->box, nouvelle->onglet_box);
            g_signal_connect (G_OBJECT(nouvelle->button), "clicked", G_CALLBACK(DeleteOnglet), notebook);
     
     
            gtk_widget_show_all ( nouvelle->onglet_box );
            gtk_widget_set_sensitive ( nouvelle->button, false );
        }
     
    	  g_signal_connect ((gpointer) notebook, "switch_page",
    	                    G_CALLBACK (on_notebook_switch_page), NULL );
    	  g_signal_connect ((gpointer) notebook, "page_removed",
    	                    G_CALLBACK (on_notebook_page_removed), NULL );
     
     
        gtk_widget_show_all (win);
        gtk_main ();
     
        return EXIT_SUCCESS;
    }
    Fredy

    (desole mais ce soir je suis tres fatigue pour l'expliquer en francais ...)

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour ton code qui m'a appris beaucoup de chose Toutefois, il se cachait un petit bug lors de la suppression de la dernière page.

    Voici comment j'ai réglé ce petit bug ^^ :

    (c'est dans la fonction "on_notebook_switch_page")
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
     
    #include "gtk/gtk.h"
    #include <stdlib.h>
     
     
    GList *list = NULL;
    gint	g_page_num_last = 0;
     
    typedef struct _pages
    {
        gint page_num;
        GtkWidget *icon;
        GtkWidget *label;
        GtkWidget *onglet_box;
        GtkWidget *box;
        GtkWidget *button;
    } t_pages;
     
    void
    on_notebook_switch_page            (GtkNotebook     *notebook,
                                            GtkNotebookPage *page,
                                            guint            page_num,
                                            gpointer         user_data)
    {
        GtkWidget *nb_page  = NULL;
        t_pages *nouvelle   = NULL;
     
    //	g_print ( "on_notebook_switch_page from old %u to new %u\n", g_page_num_last, page_num );
     
        gint n = gtk_notebook_get_n_pages(notebook);
        if (g_page_num_last != n)
        {
    	nb_page	= gtk_notebook_get_nth_page ( notebook, g_page_num_last );
            nouvelle	= (t_pages *)g_object_get_data ( G_OBJECT ( nb_page ), "objects" );
    	gtk_widget_set_sensitive ( nouvelle->button, false );
        }
     
    	g_page_num_last = page_num;
     
    	nb_page	= gtk_notebook_get_nth_page ( notebook, page_num );
            nouvelle     = (t_pages *)g_object_get_data ( G_OBJECT ( nb_page ), "objects" );
    	gtk_widget_set_sensitive ( nouvelle->button, true );
     
    }
     
    void DeleteOnglet (GtkWidget *widget, gpointer data)
    {
    	gtk_notebook_remove_page ( GTK_NOTEBOOK (data), g_page_num_last );
    }
     
    void
    on_notebook_page_removed           (GtkNotebook     *notebook,
                                            GtkWidget       *widget,
                                            guint            page_num,
                                            gpointer         user_data)
    {
      t_pages *nouvelle		= (t_pages *)g_object_get_data ( G_OBJECT ( widget ), "objects" );
      free ( nouvelle );
     
    //	g_print ( "on_notebook_page_removed %u\n", page_num );
    }
     
    int main (int argc, char **argv)
    {
        gint i = 0;
     
        gchar *string           = NULL;
        GtkWidget *win          = NULL;
        GtkWidget *notebook     = NULL;
     
     
        /* Initialize GTK+ */
        gtk_init (&argc, &argv);
     
        /* Create the main window */
        win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_default_size(GTK_WINDOW(win), 320, 200);
        gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
        g_signal_connect (win, "destroy", gtk_main_quit, NULL );
     
        notebook = gtk_notebook_new ();
        gtk_container_add(GTK_CONTAINER(win), notebook);
     
        /* Create 6 pages with close button */
        for(i = 0; i < 6; i++)
        {
     
            t_pages *nouvelle = (t_pages *)malloc( sizeof(t_pages) );
     
            fprintf ( stderr, "adresse p>>%p\n", nouvelle );
     
            nouvelle->page_num = i;
            string = g_strdup_printf("page %d", i);
            nouvelle->label       = gtk_label_new(string);
            nouvelle->box         = gtk_vbox_new(FALSE, 0);
            nouvelle->onglet_box  = gtk_hbox_new(FALSE, 0);
     
            gtk_box_pack_start (GTK_BOX(nouvelle->onglet_box), nouvelle->label, TRUE, TRUE, 0);
     
            nouvelle->button  = gtk_button_new ();
            nouvelle->icon    = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
            gtk_button_set_image (GTK_BUTTON(nouvelle->button), nouvelle->icon);
            gtk_button_set_relief (GTK_BUTTON(nouvelle->button), GTK_RELIEF_NONE);
     
            /* Associate button with the "num page" */
            g_object_set_data ( G_OBJECT(nouvelle->box), "objects", nouvelle );
     
            gtk_box_pack_start (GTK_BOX(nouvelle->onglet_box), nouvelle->button, TRUE, TRUE, 0);
     
            /* Add the structure _pages in Glist */
            list = g_list_append (list, &nouvelle);
     
            gtk_notebook_append_page(GTK_NOTEBOOK(notebook), nouvelle->box, nouvelle->onglet_box);
            g_signal_connect (G_OBJECT(nouvelle->button), "clicked", G_CALLBACK(DeleteOnglet), notebook);
     
     
            gtk_widget_show_all ( nouvelle->onglet_box );
            gtk_widget_set_sensitive ( nouvelle->button, false );
        }
     
    	  g_signal_connect ((gpointer) notebook, "switch_page",
    	                    G_CALLBACK (on_notebook_switch_page), NULL );
    	  g_signal_connect ((gpointer) notebook, "page_removed",
    	                    G_CALLBACK (on_notebook_page_removed), NULL );
     
     
        gtk_widget_show_all (win);
        gtk_main ();
     
        return EXIT_SUCCESS;
    }

Discussions similaires

  1. Problème avec Overflow:auto sur Firefox.
    Par psychoBob dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 23/05/2006, 16h46
  2. [CSS] Problème avec onglets
    Par jehlg dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 28/03/2006, 11h15
  3. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 15h59
  4. problème avec z-index sous firefox ???
    Par SpaceFrog dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 22/09/2005, 20h39

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