| 182 if (media->priv->media) |
182 if (media->priv->media) |
| 183 purple_media_hangup(media->priv->media); |
183 purple_media_hangup(media->priv->media); |
| 184 return FALSE; |
184 return FALSE; |
| 185 } |
185 } |
| 186 |
186 |
| |
187 static int |
| |
188 pidgin_x_error_handler(Display *display, XErrorEvent *event) |
| |
189 { |
| |
190 const gchar *error_type; |
| |
191 switch (event->error_code) { |
| |
192 #define XERRORCASE(type) case type: error_type = #type; break |
| |
193 XERRORCASE(BadAccess); |
| |
194 XERRORCASE(BadAlloc); |
| |
195 XERRORCASE(BadAtom); |
| |
196 XERRORCASE(BadColor); |
| |
197 XERRORCASE(BadCursor); |
| |
198 XERRORCASE(BadDrawable); |
| |
199 XERRORCASE(BadFont); |
| |
200 XERRORCASE(BadGC); |
| |
201 XERRORCASE(BadIDChoice); |
| |
202 XERRORCASE(BadImplementation); |
| |
203 XERRORCASE(BadLength); |
| |
204 XERRORCASE(BadMatch); |
| |
205 XERRORCASE(BadName); |
| |
206 XERRORCASE(BadPixmap); |
| |
207 XERRORCASE(BadRequest); |
| |
208 XERRORCASE(BadValue); |
| |
209 XERRORCASE(BadWindow); |
| |
210 #undef XERRORCASE |
| |
211 default: |
| |
212 error_type = "unknown"; |
| |
213 break; |
| |
214 } |
| |
215 purple_debug_error("media", "A %s Xlib error has occurred. " |
| |
216 "The program would normally crash now.\n", |
| |
217 error_type); |
| |
218 return 0; |
| |
219 } |
| |
220 |
| 187 static void |
221 static void |
| 188 pidgin_media_init (PidginMedia *media) |
222 pidgin_media_init (PidginMedia *media) |
| 189 { |
223 { |
| 190 GtkWidget *vbox, *hbox; |
224 GtkWidget *vbox, *hbox; |
| 191 media->priv = PIDGIN_MEDIA_GET_PRIVATE(media); |
225 media->priv = PIDGIN_MEDIA_GET_PRIVATE(media); |
| |
226 |
| |
227 XSetErrorHandler(pidgin_x_error_handler); |
| 192 |
228 |
| 193 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
229 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
| 194 gtk_container_add(GTK_CONTAINER(media), vbox); |
230 gtk_container_add(GTK_CONTAINER(media), vbox); |
| 195 |
231 |
| 196 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
232 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |