| 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 |