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 15/05/2012, à 11:54

Spitfire 95

Problème passage de GtkFileFIlter à une function callback

Bonjour,
J'ai un problème de passage de GtkFileFilter en argument à une fonction callback d'un entry, qui s'active lorsque l'on clique dessus.
Le code fonctionne sans l'ajout du GtkFileFilter au GtkFileChooserDialog, et l'ajout du filtre fonctionne si je le met l'appel de la fenêtre lors du chargement du programme dans la fonction parente donc ce n'est pas mon GtkFileChooser qui est en cause.
Donc je pense que c'est le passage d'argument qui est en cause.

#define DO_TMPBOX(label, tooltip)                                                        \
    tmpBox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);                                 \
    /* Add the tooltip to the box */                                                    \
        gtk_widget_set_tooltip_text (tmpBox, tooltip);                                    \
    gtk_box_pack_start (GTK_BOX(pBox), tmpBox, FALSE, FALSE, 0);                        \
                                                                                        \
    /* Add the label */                                                                    \
    gtk_box_pack_start (GTK_BOX(tmpBox), gtk_label_new (label), FALSE, FALSE, 8);

#define DO_FILE(key, label, tooltip)                                                    \
    DO_TMPBOX(label, tooltip)                                                            \
    ctl = gtk_entry_new ();                                                                \
    /* Disallow entry edition */                                                        \
        g_object_set (ctl, "editable", FALSE, NULL);                                    \
    /* Call filechooser onclick */                                                        \
        g_signal_connect (ctl, "button-press-event", G_CALLBACK (filechooser), filter);    \
    g_settings_bind (settings, key, ctl, "text", G_SETTINGS_BIND_DEFAULT);                \
    gtk_box_pack_end (GTK_BOX(tmpBox), ctl, TRUE, TRUE, 0);
GtkFileFilter *filter;
        filter = gtk_file_filter_new ();
            gtk_file_filter_add_pattern (filter, ".png");
            gtk_file_filter_add_pattern (filter, ".jpg");
            gtk_file_filter_add_pattern (filter, ".gif");
            gtk_file_filter_set_name (filter, _("Images"));
        DO_FILE( "bg-image", _("Background Image"), "")
void
filechooser (GtkEntry *w, GtkFileFilter *filter)
{
    static short running = 0;

    /* If a file selector is already running, we won't open another one */
    if (!running)
    {
        GtkWidget *dialog;
        char *filename = NULL;
    
        running = 1;
        
        dialog = gtk_file_chooser_dialog_new (NULL, NULL, GTK_FILE_CHOOSER_ACTION_OPEN,
                                              GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                                              GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
                                              NULL);

        gtk_file_chooser_set_filter (GTK_FILE_CHOOSER(dialog), filter);

        if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
        {
            filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(dialog));
            if(filename)
                gtk_entry_set_text (w, filename);
        }
        
        gtk_widget_destroy (dialog);
        g_free(filename);
        
        running = 0;
    }
}

À l'exécution, ça crash (segfault), mais ni la compilation (tous les warnings de GCC activés) ni GTK ne me rapportent un problème de type.
GDB me confirme bien que le crash est dû à gtk_file_chooser_set_filter (GTK_FILE_CHOOSER(dialog), filter);

Quelqu'un a une idée ?
Merci beaucoup.

(message original : http://www.developpez.net/forums/d12199 … callback/)


Trisquel GNU/Linux 6.0 / Fedora 19 & rawhide.
joueur ryzom et wesnoth
Développeur livewallpaper
Membre déserteur et traître de la brigade des S.

Hors ligne