Bonsoir à tous !

Voilà, j'ai un petit soucis actuellement avec un projet que je développe. Le but est simple, afficher une image dont on récupère l'emplacement à intervalle régulier, c'est-à-dire que l'image change parfois, donc son chemin aussi. J'ai un bout de code qui récupère cet emplacement et me le renvoie. A la base j'utilisais Xlib et Imlib2 pour afficher l'image dans une fenêtre, mais j'aimerai utiliser Gtk. Or je débute ...

Afficher l'image n'est pas un problème, en revanche, je n'arrive pas à l'actualiser ... Voilà mon code de base, sans fioriture ni test de sécurité :

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
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <gtk/gtk.h>
 
int inter, pos_x, pos_y;
char *fname;
 
gint x, y;
GtkWidget *fen, *img, *box, *label;
 
/* La fonction qui nous sert à afficher l'image dont le chemin
   est passé en argument. */
 
void imageDisplay( char *image )
{
        /* On charge l'image */
        img = gtk_image_new_from_file(image);
        if(!img)
        {
                fprintf(stderr,"imageDisplay() : error loading image\n");
                sortie(1);
        }
 
        gtk_box_pack_start(GTK_BOX(box), img, FALSE, FALSE, 5);
}
 
void windowDisplay(char *image, int x, int y)
{
        // Crée la fenêtre
        fen = gtk_window_new (GTK_WINDOW_POPUP);
        gtk_window_move (GTK_WINDOW(fen), x, y);
        g_signal_connect(G_OBJECT(fen),"destroy",G_CALLBACK(gtk_main_quit),NULL);
        gtk_window_set_default_size (GTK_WINDOW(fen), 200, 200);
 
        box = gtk_vbox_new (FALSE, 10);
        gtk_container_add (GTK_CONTAINER (fen), box);
 
        imageDisplay(image);
 
        gtk_widget_show_all (fen);
}
 
int main ( int argc, char **argv )
{
        inter = atoi( argv[1] );
	pos_x = atoi( argv[2] );
	pos_y = atoi( argv[3] );
 
        gtk_init(&argc, &argv);
 
        fname = getImagePath();
        windowDisplay(fname,pos_x,pos_y);
 
	gtk_main();
 
	return 0;
}
Précision : je ne colle pas ma fonction getImagePath qui n'apporte rien au problème, elle a juste le prototype suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
const char * amarokCover();
Elle me renvoie l'emplacement de l'image dans une chaine.

Là tout fonctionne, le programme ouvre une fenêtre et m'affiche l'image. Seulement je suis incapable de faire en sorte que l'image s'actualise. En utilisant Xlib je passais par une boucle infinie qui tournait avec un sleep(intervalle); et cela fonctionnait nickel. Mais avec GTK, le problème est que pour afficher l'image, j'ai besoin de gtk_main() je crois, et je n'arrive pas à me débrouiller avec ...

Quelqu'un aurait une idée ? merci d'avance