Mercurial > pidgin.yaz
comparison pidgin/gtkmedia.c @ 26089:6c8eabbef4d3
Fix crash when moving a tab with video.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Thu, 08 Jan 2009 00:24:11 +0000 |
parents | 83704757fa36 |
children | 4859b0b82289 |
comparison
equal
deleted
inserted
replaced
26088:d703474d6b81 | 26089:6c8eabbef4d3 |
---|---|
360 pidgin_media_error_cb(PidginMedia *media, const char *error, PidginMedia *gtkmedia) | 360 pidgin_media_error_cb(PidginMedia *media, const char *error, PidginMedia *gtkmedia) |
361 { | 361 { |
362 g_signal_emit(gtkmedia, pidgin_media_signals[ERROR], 0, error); | 362 g_signal_emit(gtkmedia, pidgin_media_signals[ERROR], 0, error); |
363 } | 363 } |
364 | 364 |
365 static gboolean | |
366 plug_delete_event_cb(GtkWidget *widget, gpointer data) | |
367 { | |
368 return TRUE; | |
369 } | |
370 | |
371 static gboolean | |
372 plug_removed_cb(GtkWidget *widget, gpointer data) | |
373 { | |
374 return TRUE; | |
375 } | |
376 | |
377 static void | |
378 socket_realize_cb(GtkWidget *widget, gpointer data) | |
379 { | |
380 gtk_socket_add_id(GTK_SOCKET(widget), | |
381 gtk_plug_get_id(GTK_PLUG(data))); | |
382 } | |
383 | |
365 static void | 384 static void |
366 pidgin_media_ready_cb(PurpleMedia *media, PidginMedia *gtkmedia) | 385 pidgin_media_ready_cb(PurpleMedia *media, PidginMedia *gtkmedia) |
367 { | 386 { |
368 GstElement *pipeline = purple_media_get_pipeline(media); | 387 GstElement *pipeline = purple_media_get_pipeline(media); |
369 GtkWidget *send_widget = NULL, *recv_widget = NULL; | 388 GtkWidget *send_widget = NULL, *recv_widget = NULL; |
411 } | 430 } |
412 | 431 |
413 if (videorecvbool) { | 432 if (videorecvbool) { |
414 GtkWidget *aspect; | 433 GtkWidget *aspect; |
415 GtkWidget *remote_video; | 434 GtkWidget *remote_video; |
435 GtkWidget *plug; | |
436 GtkWidget *socket; | |
416 | 437 |
417 aspect = gtk_aspect_frame_new(NULL, 0.5, 0.5, 4.0/3.0, FALSE); | 438 aspect = gtk_aspect_frame_new(NULL, 0.5, 0.5, 4.0/3.0, FALSE); |
418 gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN); | 439 gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN); |
419 gtk_box_pack_start(GTK_BOX(recv_widget), aspect, TRUE, TRUE, 0); | 440 gtk_box_pack_start(GTK_BOX(recv_widget), aspect, TRUE, TRUE, 0); |
420 | 441 |
442 plug = gtk_plug_new(0); | |
443 g_signal_connect(G_OBJECT(plug), "delete-event", | |
444 G_CALLBACK(plug_delete_event_cb), plug); | |
445 gtk_widget_show(plug); | |
446 | |
447 socket = gtk_socket_new(); | |
448 g_signal_connect(G_OBJECT(socket), "realize", | |
449 G_CALLBACK(socket_realize_cb), plug); | |
450 g_signal_connect(G_OBJECT(socket), "plug-removed", | |
451 G_CALLBACK(plug_removed_cb), NULL); | |
452 gtk_container_add(GTK_CONTAINER(aspect), socket); | |
453 gtk_widget_show(socket); | |
454 | |
421 remote_video = gtk_drawing_area_new(); | 455 remote_video = gtk_drawing_area_new(); |
422 gtk_container_add(GTK_CONTAINER(aspect), remote_video); | 456 gtk_container_add(GTK_CONTAINER(plug), remote_video); |
423 gtk_widget_set_size_request (GTK_WIDGET(remote_video), 100, -1); | 457 gtk_widget_set_size_request (GTK_WIDGET(remote_video), 100, -1); |
424 gtk_widget_show(remote_video); | 458 gtk_widget_show(remote_video); |
425 gtk_widget_show(aspect); | 459 gtk_widget_show(aspect); |
426 | 460 |
427 gtkmedia->priv->remote_video = remote_video; | 461 gtkmedia->priv->remote_video = remote_video; |
428 } | 462 } |
429 if (videosendbin) { | 463 if (videosendbin) { |
430 GtkWidget *aspect; | 464 GtkWidget *aspect; |
431 GtkWidget *local_video; | 465 GtkWidget *local_video; |
466 GtkWidget *plug; | |
467 GtkWidget *socket; | |
432 | 468 |
433 aspect = gtk_aspect_frame_new(NULL, 0.5, 0.5, 4.0/3.0, FALSE); | 469 aspect = gtk_aspect_frame_new(NULL, 0.5, 0.5, 4.0/3.0, FALSE); |
434 gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN); | 470 gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN); |
435 gtk_box_pack_start(GTK_BOX(send_widget), aspect, TRUE, TRUE, 0); | 471 gtk_box_pack_start(GTK_BOX(send_widget), aspect, TRUE, TRUE, 0); |
436 | 472 |
473 plug = gtk_plug_new(0); | |
474 g_signal_connect(G_OBJECT(plug), "delete-event", | |
475 G_CALLBACK(plug_delete_event_cb), plug); | |
476 gtk_widget_show(plug); | |
477 | |
478 socket = gtk_socket_new(); | |
479 g_signal_connect(G_OBJECT(socket), "realize", | |
480 G_CALLBACK(socket_realize_cb), plug); | |
481 g_signal_connect(G_OBJECT(socket), "plug-removed", | |
482 G_CALLBACK(plug_removed_cb), NULL); | |
483 gtk_container_add(GTK_CONTAINER(aspect), socket); | |
484 gtk_widget_show(socket); | |
485 | |
437 local_video = gtk_drawing_area_new(); | 486 local_video = gtk_drawing_area_new(); |
438 g_signal_connect(G_OBJECT(local_video), "realize", | 487 g_signal_connect(G_OBJECT(local_video), "realize", |
439 G_CALLBACK(realize_cb), videosendbin); | 488 G_CALLBACK(realize_cb), videosendbin); |
440 | 489 gtk_container_add(GTK_CONTAINER(plug), local_video); |
441 gtk_container_add(GTK_CONTAINER(aspect), local_video); | |
442 gtk_widget_set_size_request (GTK_WIDGET(local_video), 100, -1); | 490 gtk_widget_set_size_request (GTK_WIDGET(local_video), 100, -1); |
443 | 491 |
444 gtk_widget_show(local_video); | 492 gtk_widget_show(local_video); |
445 gtk_widget_show(aspect); | 493 gtk_widget_show(aspect); |
446 | 494 |