Bonjour,

Je fais appel � vous apr�s des heures de recherche infructueuses!!

J'ai une application GTK dans laquelle est lanc� un timer appelant toutes les 500 ms une fonction qui �crit dans un GtkTextView.

Si je n'essaye pas de scroller automatiquement � la fin, pas de soucis le TextView se rempli. Si j'ajoute les fonctions de scroll (je les ai toutes essay�es!!!!), le timer semble s'arr�ter apr�s la 1ere it�ration

Voici les extrait de code (une partie g�n�r�e par glade) :

D�claration des widgets :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_show (scrolledwindow1);
gtk_container_add (GTK_CONTAINER (notebook1), scrolledwindow1);
GTK_WIDGET_UNSET_FLAGS (scrolledwindow1, GTK_CAN_FOCUS);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_SHADOW_IN);
 
textviewarincout = gtk_text_view_new ();
gtk_widget_show (textviewarincout);
gtk_container_add (GTK_CONTAINER (scrolledwindow1), textviewarincout);
gtk_container_set_border_width (GTK_CONTAINER (textviewarincout), 5);
gtk_text_view_set_editable (GTK_TEXT_VIEW (textviewarincout), FALSE);
Main avec les timers :
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
 
int main(int argc, char *argv[])
{
	int num;
 
	GtkWidget *mainwindow;
 
#ifdef ENABLE_NLS
	bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
	bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
	textdomain(GETTEXT_PACKAGE);
#endif
 
	gtk_set_locale();
	gtk_init(&argc, &argv);
 
	add_pixmap_directory(PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps");
 
	/*
	 * The following code was added by Glade to create one of each component
	 * (except popup menus), just so that you see something after building
	 * the project. Delete any components that you don't want shown initially.
	 */
	mainwindow = create_mainwindow();
	gtk_widget_show(mainwindow);
 
	/* Initialisation des fichiers mmap */
	printf("Depart de la simulation\n");
	TH_VM_MmapInit();
 
	/* Rafraichissement des discrets de sorties */
	g_timeout_add(10, (GSourceFunc) TH_EIUIHM_RefreshOutputDiscretes, NULL);
	/* Rafraichissement des sorties ARINC */
	g_timeout_add(500, (GSourceFunc) TH_EIUIHM_RefreshOutputARINC, NULL);
 
	/* Demarrage de la boucle principale */
	gtk_main();
	return 0;
}
Callbacks :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
 
void TH_EIUIHM_RefreshOutputARINC()
{
	int numARINC;
 
	for (numARINC = 1; numARINC <= OUT_ARINC_NUMINTS; numARINC++)
	{
		TH_EIUIHM_IOWriteOutputARINC(numARINC, rand());
	}
}
Fonction TH_EIUIHM_IOWriteOutputARINC :
t_ARINCMessage est un unsigned int
g_outputARINC est un GtkTextView*
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
 
void TH_EIUIHM_IOWriteOutputARINC(int numARINC, t_ARINCMessage value)
{
	char tmp_str[STRING_REPR_MAX_VALUE];
	char tmp_strToAdd[STRING_REPR_MAX_VALUE];
 
	GtkTextIter tmp_textIter;
	GtkTextBuffer *tmp_textBuffer = NULL;
	GtkTextMark *tmp_textMark = NULL;
 
	/* Preparation de la chaine a ajouter */
	TH_EIUIHM_IOARINCMessageToString(value, tmp_str);
 
	sprintf(tmp_strToAdd, "BUS %d : %s\n", numARINC, tmp_str);
 
	/* Ajout de la nouvelle ligne */
	tmp_textBuffer = gtk_text_view_get_buffer(g_outputARINC);
	gtk_text_buffer_get_end_iter(tmp_textBuffer, &tmp_textIter);
	gtk_text_buffer_insert(tmp_textBuffer, &tmp_textIter,
			(gchar *) tmp_strToAdd, -1);
	gtk_text_view_set_buffer(g_outputARINC, tmp_textBuffer);
 
	/* Defile jusqu'a la fin de la zone de texte */
	/* TODO defilement automatique a la fin de la zone de texte */
	tmp_textMark = gtk_text_buffer_create_mark(tmp_textBuffer, NULL, &tmp_textIter, FALSE);
	gtk_text_view_scroll_to_mark(g_outputARINC, tmp_textMark, 0, FALSE, 0, 0);
}
Merci d'avance pour votre aide.