comparison pidgin/gtkmedia.c @ 30678:5ec2d3617538

pidgin: Re-arrange media window. Layout remote and local video side-by-side. Prevent local video to not scale up when resizing. Refs #11675
author Marcus Lundblad <ml@update.uu.se>
date Wed, 07 Jul 2010 20:04:06 +0000
parents f1437342cc0e
children b6c3000eec60
comparison
equal deleted inserted replaced
30655:16738cb6bb6b 30678:5ec2d3617538
331 331
332 media->priv->menubar = setup_menubar(media); 332 media->priv->menubar = setup_menubar(media);
333 gtk_box_pack_start(GTK_BOX(vbox), media->priv->menubar, 333 gtk_box_pack_start(GTK_BOX(vbox), media->priv->menubar,
334 FALSE, TRUE, 0); 334 FALSE, TRUE, 0);
335 335
336 media->priv->display = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); 336 media->priv->display = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
337 gtk_container_set_border_width(GTK_CONTAINER(media->priv->display), 337 gtk_container_set_border_width(GTK_CONTAINER(media->priv->display),
338 PIDGIN_HIG_BOX_SPACE); 338 PIDGIN_HIG_BOX_SPACE);
339 gtk_box_pack_start(GTK_BOX(vbox), media->priv->display, 339 gtk_box_pack_start(GTK_BOX(vbox), media->priv->display,
340 TRUE, TRUE, PIDGIN_HIG_BOX_SPACE); 340 TRUE, TRUE, PIDGIN_HIG_BOX_SPACE);
341 gtk_widget_show(vbox); 341 gtk_widget_show(vbox);
627 PURPLE_MEDIA_RECV_AUDIO)) { 627 PURPLE_MEDIA_RECV_AUDIO)) {
628 recv_widget = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); 628 recv_widget = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
629 gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display), 629 gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display),
630 recv_widget, TRUE, TRUE, 0); 630 recv_widget, TRUE, TRUE, 0);
631 gtk_widget_show(recv_widget); 631 gtk_widget_show(recv_widget);
632 } else 632 } else {
633 recv_widget = gtkmedia->priv->recv_widget; 633 recv_widget = gtkmedia->priv->recv_widget;
634 }
634 if (gtkmedia->priv->send_widget == NULL 635 if (gtkmedia->priv->send_widget == NULL
635 && type & (PURPLE_MEDIA_SEND_VIDEO | 636 && type & (PURPLE_MEDIA_SEND_VIDEO |
636 PURPLE_MEDIA_SEND_AUDIO)) { 637 PURPLE_MEDIA_SEND_AUDIO)) {
637 send_widget = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); 638 send_widget = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
638 gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display), 639 gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display),
639 send_widget, TRUE, TRUE, 0); 640 send_widget, FALSE, TRUE, 0);
640 button_widget = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); 641 button_widget = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
641 gtk_box_pack_end(GTK_BOX(send_widget), button_widget, 642 gtk_box_pack_end(GTK_BOX(recv_widget), button_widget,
642 FALSE, FALSE, 0); 643 FALSE, TRUE, 0);
643 gtk_widget_show(GTK_WIDGET(button_widget));
644 gtk_widget_show(send_widget); 644 gtk_widget_show(send_widget);
645 645
646 /* Hold button */ 646 /* Hold button */
647 gtkmedia->priv->hold = 647 gtkmedia->priv->hold =
648 gtk_toggle_button_new_with_mnemonic("_Hold"); 648 gtk_toggle_button_new_with_mnemonic("_Hold");
649 gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->hold,
650 FALSE, FALSE, 0);
651 gtk_widget_show(gtkmedia->priv->hold);
649 g_signal_connect(gtkmedia->priv->hold, "toggled", 652 g_signal_connect(gtkmedia->priv->hold, "toggled",
650 G_CALLBACK(pidgin_media_hold_toggled), 653 G_CALLBACK(pidgin_media_hold_toggled),
651 gtkmedia); 654 gtkmedia);
652 gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->hold,
653 FALSE, FALSE, 0);
654 gtk_widget_show(gtkmedia->priv->hold);
655 } else { 655 } else {
656 send_widget = gtkmedia->priv->send_widget; 656 send_widget = gtkmedia->priv->send_widget;
657 button_widget = gtkmedia->priv->button_widget; 657 button_widget = gtkmedia->priv->button_widget;
658 } 658 }
659 659
661 PidginMediaRealizeData *data; 661 PidginMediaRealizeData *data;
662 GtkWidget *aspect; 662 GtkWidget *aspect;
663 GtkWidget *remote_video; 663 GtkWidget *remote_video;
664 GdkColor color = {0, 0, 0, 0}; 664 GdkColor color = {0, 0, 0, 0};
665 665
666 aspect = gtk_aspect_frame_new(NULL, 0.5, 0.5, 4.0/3.0, FALSE); 666 aspect = gtk_aspect_frame_new(NULL, 0, 0, 4.0/3.0, FALSE);
667 gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN); 667 gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN);
668 gtk_box_pack_start(GTK_BOX(recv_widget), aspect, TRUE, TRUE, 0); 668 gtk_box_pack_start(GTK_BOX(recv_widget), aspect, TRUE, TRUE, 0);
669 669
670 data = g_new0(PidginMediaRealizeData, 1); 670 data = g_new0(PidginMediaRealizeData, 1);
671 data->gtkmedia = gtkmedia; 671 data->gtkmedia = gtkmedia;
681 gtk_widget_show(remote_video); 681 gtk_widget_show(remote_video);
682 gtk_widget_show(aspect); 682 gtk_widget_show(aspect);
683 683
684 gtkmedia->priv->remote_video = remote_video; 684 gtkmedia->priv->remote_video = remote_video;
685 } 685 }
686
686 if (type & PURPLE_MEDIA_SEND_VIDEO) { 687 if (type & PURPLE_MEDIA_SEND_VIDEO) {
687 PidginMediaRealizeData *data; 688 PidginMediaRealizeData *data;
688 GtkWidget *aspect; 689 GtkWidget *aspect;
689 GtkWidget *local_video; 690 GtkWidget *local_video;
690 GdkColor color = {0, 0, 0, 0}; 691 GdkColor color = {0, 0, 0, 0};
691 692
692 aspect = gtk_aspect_frame_new(NULL, 0.5, 0.5, 4.0/3.0, FALSE); 693 aspect = gtk_aspect_frame_new(NULL, 0, 0, 4.0/3.0, TRUE);
693 gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN); 694 gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN);
694 gtk_box_pack_start(GTK_BOX(send_widget), aspect, TRUE, TRUE, 0); 695 gtk_box_pack_start(GTK_BOX(send_widget), aspect, FALSE, TRUE, 0);
695 696
696 data = g_new0(PidginMediaRealizeData, 1); 697 data = g_new0(PidginMediaRealizeData, 1);
697 data->gtkmedia = gtkmedia; 698 data->gtkmedia = gtkmedia;
698 data->session_id = g_strdup(sid); 699 data->session_id = g_strdup(sid);
699 data->participant = NULL; 700 data->participant = NULL;
701 local_video = gtk_drawing_area_new(); 702 local_video = gtk_drawing_area_new();
702 gtk_widget_modify_bg(local_video, GTK_STATE_NORMAL, &color); 703 gtk_widget_modify_bg(local_video, GTK_STATE_NORMAL, &color);
703 g_signal_connect(G_OBJECT(local_video), "realize", 704 g_signal_connect(G_OBJECT(local_video), "realize",
704 G_CALLBACK(realize_cb), data); 705 G_CALLBACK(realize_cb), data);
705 gtk_container_add(GTK_CONTAINER(aspect), local_video); 706 gtk_container_add(GTK_CONTAINER(aspect), local_video);
706 gtk_widget_set_size_request (GTK_WIDGET(local_video), 160, 120); 707 gtk_widget_set_size_request (GTK_WIDGET(local_video), 80, 60);
707 708
708 gtk_widget_show(local_video); 709 gtk_widget_show(local_video);
709 gtk_widget_show(aspect); 710 gtk_widget_show(aspect);
710 711
711 gtkmedia->priv->pause = 712 gtkmedia->priv->pause =
712 gtk_toggle_button_new_with_mnemonic(_("_Pause")); 713 gtk_toggle_button_new_with_mnemonic(_("_Pause"));
714 gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->pause,
715 FALSE, FALSE, 0);
716 gtk_widget_show(gtkmedia->priv->pause);
713 g_signal_connect(gtkmedia->priv->pause, "toggled", 717 g_signal_connect(gtkmedia->priv->pause, "toggled",
714 G_CALLBACK(pidgin_media_pause_toggled), 718 G_CALLBACK(pidgin_media_pause_toggled),
715 gtkmedia); 719 gtkmedia);
716 gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->pause,
717 FALSE, FALSE, 0);
718 gtk_widget_show(gtkmedia->priv->pause);
719 720
720 gtkmedia->priv->local_video = local_video; 721 gtkmedia->priv->local_video = local_video;
721 } 722 }
722
723 if (type & PURPLE_MEDIA_RECV_AUDIO) { 723 if (type & PURPLE_MEDIA_RECV_AUDIO) {
724 gtk_box_pack_end(GTK_BOX(recv_widget), 724 gtk_box_pack_end(GTK_BOX(recv_widget),
725 pidgin_media_add_audio_widget(gtkmedia, 725 pidgin_media_add_audio_widget(gtkmedia,
726 PURPLE_MEDIA_RECV_AUDIO), FALSE, FALSE, 0); 726 PURPLE_MEDIA_RECV_AUDIO), FALSE, FALSE, 0);
727 } 727 }
728
728 if (type & PURPLE_MEDIA_SEND_AUDIO) { 729 if (type & PURPLE_MEDIA_SEND_AUDIO) {
729 gtkmedia->priv->mute = 730 gtkmedia->priv->mute =
730 gtk_toggle_button_new_with_mnemonic("_Mute"); 731 gtk_toggle_button_new_with_mnemonic("_Mute");
732 gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->mute,
733 FALSE, FALSE, 0);
734 gtk_widget_show(gtkmedia->priv->mute);
731 g_signal_connect(gtkmedia->priv->mute, "toggled", 735 g_signal_connect(gtkmedia->priv->mute, "toggled",
732 G_CALLBACK(pidgin_media_mute_toggled), 736 G_CALLBACK(pidgin_media_mute_toggled),
733 gtkmedia); 737 gtkmedia);
734 gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->mute, 738
735 FALSE, FALSE, 0); 739 gtk_box_pack_end(GTK_BOX(recv_widget),
736 gtk_widget_show(gtkmedia->priv->mute);
737
738 gtk_box_pack_end(GTK_BOX(send_widget),
739 pidgin_media_add_audio_widget(gtkmedia, 740 pidgin_media_add_audio_widget(gtkmedia,
740 PURPLE_MEDIA_SEND_AUDIO), FALSE, FALSE, 0); 741 PURPLE_MEDIA_SEND_AUDIO), FALSE, FALSE, 0);
741 } 742 }
742
743 743
744 if (type & PURPLE_MEDIA_AUDIO && 744 if (type & PURPLE_MEDIA_AUDIO &&
745 gtkmedia->priv->level_handler_id == 0) { 745 gtkmedia->priv->level_handler_id == 0) {
746 gtkmedia->priv->level_handler_id = g_signal_connect( 746 gtkmedia->priv->level_handler_id = g_signal_connect(
747 media, "level", G_CALLBACK(level_message_cb), 747 media, "level", G_CALLBACK(level_message_cb),
750 750
751 if (send_widget != NULL) 751 if (send_widget != NULL)
752 gtkmedia->priv->send_widget = send_widget; 752 gtkmedia->priv->send_widget = send_widget;
753 if (recv_widget != NULL) 753 if (recv_widget != NULL)
754 gtkmedia->priv->recv_widget = recv_widget; 754 gtkmedia->priv->recv_widget = recv_widget;
755 if (button_widget != NULL) 755 if (button_widget != NULL) {
756 gtkmedia->priv->button_widget = button_widget; 756 gtkmedia->priv->button_widget = button_widget;
757 gtk_widget_show(GTK_WIDGET(button_widget));
758 }
757 759
758 if (purple_media_is_initiator(media, sid, NULL) == FALSE) { 760 if (purple_media_is_initiator(media, sid, NULL) == FALSE) {
759 if (gtkmedia->priv->timeout_id != 0) 761 if (gtkmedia->priv->timeout_id != 0)
760 g_source_remove(gtkmedia->priv->timeout_id); 762 g_source_remove(gtkmedia->priv->timeout_id);
761 gtkmedia->priv->request_type |= type; 763 gtkmedia->priv->request_type |= type;