263
menu_hangup(gpointer data, guint action, GtkWidget *item)
263
menu_hangup(GtkAction *action, gpointer data)
265
265
PidginMedia *gtkmedia = PIDGIN_MEDIA(data);
266
266
purple_media_stream_info(gtkmedia->priv->media,
267
267
PURPLE_MEDIA_INFO_HANGUP, NULL, NULL, TRUE);
270
static GtkItemFactoryEntry menu_items[] = {
271
{ N_("/_Media"), NULL, NULL, 0, "<Branch>", NULL },
272
{ N_("/Media/_Hangup"), NULL, menu_hangup, 0, "<Item>", NULL },
270
static const GtkActionEntry menu_entries[] = {
271
{ "MediaMenu", NULL, N_("_Media"), NULL, NULL, NULL },
272
{ "Hangup", NULL, N_("_Hangup"), NULL, NULL, G_CALLBACK(menu_hangup) },
275
static gint menu_item_count = sizeof(menu_items) / sizeof(menu_items[0]);
278
item_factory_translate_func (const char *path, gpointer func_data)
275
static const char *media_menu =
277
"<menubar name='Media'>"
278
"<menu action='MediaMenu'>"
279
"<menuitem action='Hangup'/>"
283
284
static GtkWidget *
284
285
setup_menubar(PidginMedia *window)
287
GtkActionGroup *action_group;
286
289
GtkAccelGroup *accel_group;
289
accel_group = gtk_accel_group_new ();
292
action_group = gtk_action_group_new("MediaActions");
293
gtk_action_group_add_actions(action_group,
295
G_N_ELEMENTS(menu_entries),
298
gtk_action_group_set_translation_domain(action_group,
302
window->priv->ui = gtk_ui_manager_new();
303
gtk_ui_manager_insert_action_group(window->priv->ui, action_group, 0);
305
accel_group = gtk_ui_manager_get_accel_group(window->priv->ui);
290
306
gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
291
g_object_unref(accel_group);
293
window->priv->item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR,
294
"<main>", accel_group);
296
gtk_item_factory_set_translate_func(window->priv->item_factory,
297
(GtkTranslateFunc)item_factory_translate_func,
300
gtk_item_factory_create_items(window->priv->item_factory,
301
menu_item_count, menu_items, window);
302
g_signal_connect(G_OBJECT(accel_group), "accel-changed",
303
G_CALLBACK(pidgin_save_accels_cb), NULL);
305
menu = gtk_item_factory_get_widget(
306
window->priv->item_factory, "<main>");
309
if (!gtk_ui_manager_add_ui_from_string(window->priv->ui, media_menu, -1, &error))
311
g_message("building menus failed: %s", error->message);
316
menu = gtk_ui_manager_get_widget(window->priv->ui, "/Media");
308
318
gtk_widget_show(menu);
629
639
gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display),
630
640
recv_widget, TRUE, TRUE, 0);
631
641
gtk_widget_show(recv_widget);
633
643
recv_widget = gtkmedia->priv->recv_widget;
634
645
if (gtkmedia->priv->send_widget == NULL
635
646
&& type & (PURPLE_MEDIA_SEND_VIDEO |
636
647
PURPLE_MEDIA_SEND_AUDIO)) {
637
648
send_widget = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
638
649
gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display),
639
send_widget, TRUE, TRUE, 0);
650
send_widget, FALSE, TRUE, 0);
640
651
button_widget = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
641
gtk_box_pack_end(GTK_BOX(send_widget), button_widget,
643
gtk_widget_show(GTK_WIDGET(button_widget));
652
gtk_box_pack_end(GTK_BOX(recv_widget), button_widget,
644
654
gtk_widget_show(send_widget);
646
656
/* Hold button */
647
657
gtkmedia->priv->hold =
648
658
gtk_toggle_button_new_with_mnemonic("_Hold");
659
gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->hold,
661
gtk_widget_show(gtkmedia->priv->hold);
649
662
g_signal_connect(gtkmedia->priv->hold, "toggled",
650
663
G_CALLBACK(pidgin_media_hold_toggled),
652
gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->hold,
654
gtk_widget_show(gtkmedia->priv->hold);
656
666
send_widget = gtkmedia->priv->send_widget;
657
667
button_widget = gtkmedia->priv->button_widget;
663
673
GtkWidget *remote_video;
664
674
GdkColor color = {0, 0, 0, 0};
666
aspect = gtk_aspect_frame_new(NULL, 0.5, 0.5, 4.0/3.0, FALSE);
676
aspect = gtk_aspect_frame_new(NULL, 0, 0, 4.0/3.0, FALSE);
667
677
gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN);
668
678
gtk_box_pack_start(GTK_BOX(recv_widget), aspect, TRUE, TRUE, 0);
684
694
gtkmedia->priv->remote_video = remote_video;
686
697
if (type & PURPLE_MEDIA_SEND_VIDEO) {
687
698
PidginMediaRealizeData *data;
688
699
GtkWidget *aspect;
689
700
GtkWidget *local_video;
690
701
GdkColor color = {0, 0, 0, 0};
692
aspect = gtk_aspect_frame_new(NULL, 0.5, 0.5, 4.0/3.0, FALSE);
703
aspect = gtk_aspect_frame_new(NULL, 0, 0, 4.0/3.0, TRUE);
693
704
gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN);
694
gtk_box_pack_start(GTK_BOX(send_widget), aspect, TRUE, TRUE, 0);
705
gtk_box_pack_start(GTK_BOX(send_widget), aspect, FALSE, TRUE, 0);
696
707
data = g_new0(PidginMediaRealizeData, 1);
697
708
data->gtkmedia = gtkmedia;
703
714
g_signal_connect(G_OBJECT(local_video), "realize",
704
715
G_CALLBACK(realize_cb), data);
705
716
gtk_container_add(GTK_CONTAINER(aspect), local_video);
706
gtk_widget_set_size_request (GTK_WIDGET(local_video), 160, 120);
717
gtk_widget_set_size_request (GTK_WIDGET(local_video), 80, 60);
708
719
gtk_widget_show(local_video);
709
720
gtk_widget_show(aspect);
711
722
gtkmedia->priv->pause =
712
723
gtk_toggle_button_new_with_mnemonic(_("_Pause"));
724
gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->pause,
726
gtk_widget_show(gtkmedia->priv->pause);
713
727
g_signal_connect(gtkmedia->priv->pause, "toggled",
714
728
G_CALLBACK(pidgin_media_pause_toggled),
716
gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->pause,
718
gtk_widget_show(gtkmedia->priv->pause);
720
731
gtkmedia->priv->local_video = local_video;
723
733
if (type & PURPLE_MEDIA_RECV_AUDIO) {
724
734
gtk_box_pack_end(GTK_BOX(recv_widget),
725
735
pidgin_media_add_audio_widget(gtkmedia,
726
736
PURPLE_MEDIA_RECV_AUDIO), FALSE, FALSE, 0);
728
739
if (type & PURPLE_MEDIA_SEND_AUDIO) {
729
740
gtkmedia->priv->mute =
730
741
gtk_toggle_button_new_with_mnemonic("_Mute");
742
gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->mute,
744
gtk_widget_show(gtkmedia->priv->mute);
731
745
g_signal_connect(gtkmedia->priv->mute, "toggled",
732
746
G_CALLBACK(pidgin_media_mute_toggled),
734
gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->mute,
736
gtk_widget_show(gtkmedia->priv->mute);
738
gtk_box_pack_end(GTK_BOX(send_widget),
749
gtk_box_pack_end(GTK_BOX(recv_widget),
739
750
pidgin_media_add_audio_widget(gtkmedia,
740
751
PURPLE_MEDIA_SEND_AUDIO), FALSE, FALSE, 0);
744
754
if (type & PURPLE_MEDIA_AUDIO &&
745
755
gtkmedia->priv->level_handler_id == 0) {
746
756
gtkmedia->priv->level_handler_id = g_signal_connect(