| 36 #include "gtkutils.h" |
36 #include "gtkutils.h" |
| 37 |
37 |
| 38 #ifdef USE_VV |
38 #ifdef USE_VV |
| 39 #include "media-gst.h" |
39 #include "media-gst.h" |
| 40 |
40 |
| |
41 #ifdef _WIN32 |
| |
42 #include <gdk/gdkwin32.h> |
| |
43 #endif |
| |
44 |
| 41 #include <gst/interfaces/xoverlay.h> |
45 #include <gst/interfaces/xoverlay.h> |
| 42 |
46 |
| 43 #define PIDGIN_TYPE_MEDIA (pidgin_media_get_type()) |
47 #define PIDGIN_TYPE_MEDIA (pidgin_media_get_type()) |
| 44 #define PIDGIN_MEDIA(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PIDGIN_TYPE_MEDIA, PidginMedia)) |
48 #define PIDGIN_MEDIA(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PIDGIN_TYPE_MEDIA, PidginMedia)) |
| 45 #define PIDGIN_MEDIA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PIDGIN_TYPE_MEDIA, PidginMediaClass)) |
49 #define PIDGIN_MEDIA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PIDGIN_TYPE_MEDIA, PidginMediaClass)) |
| 211 purple_media_stream_info(media->priv->media, |
215 purple_media_stream_info(media->priv->media, |
| 212 PURPLE_MEDIA_INFO_HANGUP, NULL, NULL, TRUE); |
216 PURPLE_MEDIA_INFO_HANGUP, NULL, NULL, TRUE); |
| 213 return FALSE; |
217 return FALSE; |
| 214 } |
218 } |
| 215 |
219 |
| |
220 #ifdef HAVE_X11 |
| 216 static int |
221 static int |
| 217 pidgin_x_error_handler(Display *display, XErrorEvent *event) |
222 pidgin_x_error_handler(Display *display, XErrorEvent *event) |
| 218 { |
223 { |
| 219 const gchar *error_type; |
224 const gchar *error_type; |
| 220 switch (event->error_code) { |
225 switch (event->error_code) { |
| 244 purple_debug_error("media", "A %s Xlib error has occurred. " |
249 purple_debug_error("media", "A %s Xlib error has occurred. " |
| 245 "The program would normally crash now.\n", |
250 "The program would normally crash now.\n", |
| 246 error_type); |
251 error_type); |
| 247 return 0; |
252 return 0; |
| 248 } |
253 } |
| |
254 #endif |
| 249 |
255 |
| 250 static void |
256 static void |
| 251 menu_hangup(gpointer data, guint action, GtkWidget *item) |
257 menu_hangup(gpointer data, guint action, GtkWidget *item) |
| 252 { |
258 { |
| 253 PidginMedia *gtkmedia = PIDGIN_MEDIA(data); |
259 PidginMedia *gtkmedia = PIDGIN_MEDIA(data); |
| 301 pidgin_media_init (PidginMedia *media) |
307 pidgin_media_init (PidginMedia *media) |
| 302 { |
308 { |
| 303 GtkWidget *vbox; |
309 GtkWidget *vbox; |
| 304 media->priv = PIDGIN_MEDIA_GET_PRIVATE(media); |
310 media->priv = PIDGIN_MEDIA_GET_PRIVATE(media); |
| 305 |
311 |
| |
312 #ifdef HAVE_X11 |
| 306 XSetErrorHandler(pidgin_x_error_handler); |
313 XSetErrorHandler(pidgin_x_error_handler); |
| |
314 #endif |
| 307 |
315 |
| 308 vbox = gtk_vbox_new(FALSE, 0); |
316 vbox = gtk_vbox_new(FALSE, 0); |
| 309 gtk_container_add(GTK_CONTAINER(media), vbox); |
317 gtk_container_add(GTK_CONTAINER(media), vbox); |
| 310 |
318 |
| 311 media->priv->statusbar = gtk_statusbar_new(); |
319 media->priv->statusbar = gtk_statusbar_new(); |
| 448 realize_cb_cb(PidginMediaRealizeData *data) |
456 realize_cb_cb(PidginMediaRealizeData *data) |
| 449 { |
457 { |
| 450 PidginMediaPrivate *priv = data->gtkmedia->priv; |
458 PidginMediaPrivate *priv = data->gtkmedia->priv; |
| 451 gulong window_id; |
459 gulong window_id; |
| 452 |
460 |
| |
461 #ifdef _WIN32 |
| |
462 if (data->participant == NULL) |
| |
463 window_id = GDK_WINDOW_HWND(priv->local_video->window); |
| |
464 else |
| |
465 window_id = GDK_WINDOW_HWND(priv->remote_video->window); |
| |
466 #elif defined(HAVE_X11) |
| 453 if (data->participant == NULL) |
467 if (data->participant == NULL) |
| 454 window_id = GDK_WINDOW_XWINDOW(priv->local_video->window); |
468 window_id = GDK_WINDOW_XWINDOW(priv->local_video->window); |
| 455 else |
469 else |
| 456 window_id = GDK_WINDOW_XWINDOW(priv->remote_video->window); |
470 window_id = GDK_WINDOW_XWINDOW(priv->remote_video->window); |
| |
471 #else |
| |
472 # error "Unsupported windowing system" |
| |
473 #endif |
| 457 |
474 |
| 458 purple_media_set_output_window(priv->media, data->session_id, |
475 purple_media_set_output_window(priv->media, data->session_id, |
| 459 data->participant, window_id); |
476 data->participant, window_id); |
| 460 |
477 |
| 461 g_free(data->session_id); |
478 g_free(data->session_id); |