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
135
|
/* Tests the multithreaded UI code */
#include "config.h"
#include <unistd.h>
#include <glib.h>
#include <gtk/gtk.h>
#include <libgnomeui/libgnomeui.h>
#include <stdio.h>
#include "mail-threads.h"
static void op_1( gpointer userdata );
static void op_2( gpointer userdata );
static void op_3( gpointer userdata );
static void op_4( gpointer userdata );
static void op_5( gpointer userdata );
static gboolean queue_ops( void );
static gboolean queue_ops( void )
{
int i;
gchar buf[32];
g_message( "Top of queue_ops" );
mail_operation_try( "The Crawling Progress Bar of Doom", op_1, NULL );
mail_operation_try( "The Mysterious Message Setter", op_2, NULL );
mail_operation_try( "The Error Dialog of No Return", op_3, NULL );
for( i = 0; i < 3; i++ ) {
sprintf( buf, "Queue Filler %d", i );
mail_operation_try( buf, op_4, GINT_TO_POINTER( i ) );
}
g_message( "Waiting for finish..." );
mail_operation_wait_for_finish();
g_message( "Ops done -- queue some more!" );
mail_operation_try( "Progress Bar Redux", op_1, NULL );
g_message( "Waiting for finish again..." );
mail_operation_wait_for_finish();
g_message( "Ops done -- more, more!" );
mail_operation_try( "Dastardly Password Stealer", op_5, NULL );
for( i = 0; i < 3; i++ ) {
sprintf( buf, "Queue Filler %d", i );
mail_operation_try( buf, op_4, GINT_TO_POINTER( i ) );
}
g_message( "Waiting for finish AGAIN..." );
mail_operation_wait_for_finish();
g_message( "Ops done again. Exiting 0" );
gtk_exit( 0 );
return FALSE;
}
static void op_1( gpointer userdata )
{
gfloat pct;
mail_op_show_progressbar();
mail_op_set_message( "Watch the progress bar!" );
for( pct = 0.0; pct < 1.0; pct += 0.2 ) {
sleep( 1 );
mail_op_set_percentage( pct );
}
}
static void op_2( gpointer userdata )
{
int i;
mail_op_hide_progressbar();
for( i = 5; i > 0; i-- ) {
mail_op_set_message( "%d", i );
sleep( 1 );
}
mail_op_set_message( "BOOOM!" );
sleep( 1 );
}
static void op_3( gpointer userdata )
{
gfloat pct;
mail_op_show_progressbar();
mail_op_set_message( "Frobulating the foosamatic" );
for( pct = 0.0; pct < 0.3; pct += 0.1 ) {
mail_op_set_percentage( pct );
sleep( 1 );
}
mail_op_error( "Oh no! The foosamatic was booby-trapped!" );
sleep( 1 );
}
static void op_4( gpointer userdata )
{
mail_op_hide_progressbar();
mail_op_set_message( "Filler # %d", GPOINTER_TO_INT( userdata ) );
sleep( 1 );
}
static void op_5( gpointer userdata )
{
gchar *pass;
gboolean ret;
mail_op_show_progressbar();
mail_op_set_percentage( 0.5 );
ret = mail_op_get_password( "What is your super-secret password?", TRUE, &pass );
if( ret == FALSE )
mail_op_set_message( "Oh no, you cancelled! : %s", pass );
else
mail_op_set_message( "\"%s\", you said?", pass );
sleep( 1 );
}
int main( int argc, char **argv )
{
g_thread_init( NULL );
gnome_init( "test-thread", "0.0", argc, argv );
gtk_idle_add( (GtkFunction) queue_ops, NULL );
gtk_main();
return 0;
}
|