src/ticker.c

changeset 432
497a46b74642
parent 430
39105dbbbc21
child 433
9572b183255a
equal deleted inserted replaced
431:a4d63cdcba4f 432:497a46b74642
33 GtkWidget *label; 33 GtkWidget *label;
34 GtkWidget *pix; 34 GtkWidget *pix;
35 } TickerData; 35 } TickerData;
36 36
37 static GList *tickerbuds = (GList *) NULL; 37 static GList *tickerbuds = (GList *) NULL;
38 static gboolean userclose = FALSE;
38 39
39 void BuddyTickerDestroyWindow( GtkWidget *window ); 40 void BuddyTickerDestroyWindow( GtkWidget *window );
40 void BuddyTickerCreateWindow( void ); 41 void BuddyTickerCreateWindow( void );
41 void BuddyTickerAddUser( char *name, GdkPixmap *pm, GdkBitmap *bm ); 42 void BuddyTickerAddUser( char *name, GdkPixmap *pm, GdkBitmap *bm );
42 void BuddyTickerRemoveUser( char *name ); 43 void BuddyTickerRemoveUser( char *name );
43 void BuddyTickerSetPixmap( char *name, GdkPixmap *pm, GdkBitmap *bm ); 44 void BuddyTickerSetPixmap( char *name, GdkPixmap *pm, GdkBitmap *bm );
45 void BuddyTickerClearList( void );
46 void BuddyTickerSignOff( void );
44 GList * BuddyTickerFindUser( char *name ); 47 GList * BuddyTickerFindUser( char *name );
45 48
46 void 49 void
47 BuddyTickerDestroyWindow( GtkWidget *window ) 50 BuddyTickerDestroyWindow( GtkWidget *window )
48 { 51 {
52 BuddyTickerClearList();
49 gtk_ticker_stop_scroll( GTK_TICKER( ticker ) ); 53 gtk_ticker_stop_scroll( GTK_TICKER( ticker ) );
50 gtk_widget_destroy( window ); 54 gtk_widget_destroy( window );
51 ticker = tickerwindow = (GtkWidget *) NULL; 55 ticker = tickerwindow = (GtkWidget *) NULL;
56 userclose = TRUE;
52 } 57 }
53 58
54 void 59 void
55 BuddyTickerCreateWindow() 60 BuddyTickerCreateWindow()
56 { 61 {
75 void 80 void
76 BuddyTickerAddUser( char *name, GdkPixmap *pm, GdkBitmap *bm ) 81 BuddyTickerAddUser( char *name, GdkPixmap *pm, GdkBitmap *bm )
77 { 82 {
78 GtkWidget *hbox, *label, *pmap; 83 GtkWidget *hbox, *label, *pmap;
79 TickerData *p; 84 TickerData *p;
85 GList *q;
86
87 if ( userclose == TRUE )
88 return;
89 q = (GList *) BuddyTickerFindUser( name );
90 if ( q != (GList *) NULL )
91 return;
80 92
81 BuddyTickerCreateWindow(); 93 BuddyTickerCreateWindow();
82 p = (TickerData *) malloc( sizeof( TickerData ) ); 94 p = (TickerData *) malloc( sizeof( TickerData ) );
83 p->hbox = (GtkWidget *) NULL; 95 p->hbox = (GtkWidget *) NULL;
84 p->label = (GtkWidget *) NULL; 96 p->label = (GtkWidget *) NULL;
103 BuddyTickerRemoveUser( char *name ) 115 BuddyTickerRemoveUser( char *name )
104 { 116 {
105 GList *p = (GList *) BuddyTickerFindUser( name ); 117 GList *p = (GList *) BuddyTickerFindUser( name );
106 TickerData *data = (TickerData *) p->data; 118 TickerData *data = (TickerData *) p->data;
107 119
120 if ( userclose == TRUE )
121 return;
108 if ( data ) { 122 if ( data ) {
109 gtk_ticker_remove( GTK_TICKER( ticker ), data->hbox ); 123 gtk_ticker_remove( GTK_TICKER( ticker ), data->hbox );
110 tickerbuds = g_list_remove( tickerbuds, data ); 124 tickerbuds = g_list_remove( tickerbuds, data );
111 free( data ); 125 free( data );
112 } 126 }
113 } 127 }
114 128
115 void 129 void
116 BuddyTickerSetPixmap( char *name, GdkPixmap *pm, GdkBitmap *bm ) 130 BuddyTickerSetPixmap( char *name, GdkPixmap *pm, GdkBitmap *bm )
117 { 131 {
118 GList *p = (GList *) BuddyTickerFindUser( name ); 132 GList *p;
119 TickerData *data = (TickerData *) p->data; 133 TickerData *data;
120 134
135 if ( userclose == TRUE )
136 return;
137 p = (GList *) BuddyTickerFindUser( name );
138 data = (TickerData *) p->data;
121 if ( data->pix == (GtkWidget *) NULL ) { 139 if ( data->pix == (GtkWidget *) NULL ) {
122 data->pix = gtk_pixmap_new( pm, bm ); 140 data->pix = gtk_pixmap_new( pm, bm );
123 gtk_box_pack_start_defaults( GTK_BOX( data->hbox ), data->pix ); 141 gtk_box_pack_start_defaults( GTK_BOX( data->hbox ), data->pix );
124 } else { 142 } else {
125 gtk_widget_hide( data->pix ); 143 gtk_widget_hide( data->pix );
143 } 161 }
144 162
145 int 163 int
146 BuddyTickerLogonTimeout( gpointer data ) 164 BuddyTickerLogonTimeout( gpointer data )
147 { 165 {
148 char *name = (char *) data; 166 // XXX
149
150 GList *p = (GList *) BuddyTickerFindUser( name );
151 TickerData *q = (TickerData *) p->data;
152
153 if ( q ) {
154
155 }
156 167
157 return FALSE; 168 return FALSE;
158 } 169 }
159 170
160 int 171 int
161 BuddyTickerLogoutTimeout( gpointer data ) 172 BuddyTickerLogoutTimeout( gpointer data )
162 { 173 {
163 char *name = (char *) data; 174 char *name = (char *) data;
164 175
176 if ( userclose == TRUE )
177 return FALSE;
165 BuddyTickerRemoveUser( name ); 178 BuddyTickerRemoveUser( name );
166 179
167 return FALSE; 180 return FALSE;
168 } 181 }
182
183 void
184 BuddyTickerSignoff( void )
185 {
186 GList *p = tickerbuds;
187 TickerData *q;
188
189 while ( p ) {
190 q = (TickerData *) p->data;
191 BuddyTickerRemoveUser( q->buddy );
192 p = tickerbuds;
193 }
194 userclose = FALSE;
195 }
196
197 void
198 BuddyTickerClearList( void )
199 {
200 GList *p = tickerbuds;
201 TickerData *q;
202
203 while ( p ) {
204 q = (TickerData *) p->data;
205 p = g_list_remove( p, p->data );
206 }
207 tickerbuds = (GList *) NULL;
208 }
209
210

mercurial