Mercurial > pidgin.yaz
comparison pidgin/gtkmedia.c @ 30909:25e200cb3532
propagate from branch 'im.pidgin.pidgin' (head dca20e09164518b0f7a773edd7e9649f41d8873d)
to branch 'im.pidgin.cpw.malu.xmpp.google_refactor' (head 7823c556f2d1bbca43f5ef9f0fea30cabc5d313f)
author | Marcus Lundblad <ml@update.uu.se> |
---|---|
date | Tue, 31 Aug 2010 18:28:10 +0000 |
parents | b6c3000eec60 |
children | 11211e6427ae |
comparison
equal
deleted
inserted
replaced
30908:c44ec533a48c | 30909:25e200cb3532 |
---|---|
82 { | 82 { |
83 PurpleMedia *media; | 83 PurpleMedia *media; |
84 gchar *screenname; | 84 gchar *screenname; |
85 gulong level_handler_id; | 85 gulong level_handler_id; |
86 | 86 |
87 GtkItemFactory *item_factory; | 87 GtkUIManager *ui; |
88 GtkWidget *menubar; | 88 GtkWidget *menubar; |
89 GtkWidget *statusbar; | 89 GtkWidget *statusbar; |
90 | 90 |
91 GtkWidget *hold; | 91 GtkWidget *hold; |
92 GtkWidget *mute; | 92 GtkWidget *mute; |
258 return 0; | 258 return 0; |
259 } | 259 } |
260 #endif | 260 #endif |
261 | 261 |
262 static void | 262 static void |
263 menu_hangup(gpointer data, guint action, GtkWidget *item) | 263 menu_hangup(GtkAction *action, gpointer data) |
264 { | 264 { |
265 PidginMedia *gtkmedia = PIDGIN_MEDIA(data); | 265 PidginMedia *gtkmedia = PIDGIN_MEDIA(data); |
266 purple_media_stream_info(gtkmedia->priv->media, | 266 purple_media_stream_info(gtkmedia->priv->media, |
267 PURPLE_MEDIA_INFO_HANGUP, NULL, NULL, TRUE); | 267 PURPLE_MEDIA_INFO_HANGUP, NULL, NULL, TRUE); |
268 } | 268 } |
269 | 269 |
270 static GtkItemFactoryEntry menu_items[] = { | 270 static const GtkActionEntry menu_entries[] = { |
271 { N_("/_Media"), NULL, NULL, 0, "<Branch>", NULL }, | 271 { "MediaMenu", NULL, N_("_Media"), NULL, NULL, NULL }, |
272 { N_("/Media/_Hangup"), NULL, menu_hangup, 0, "<Item>", NULL }, | 272 { "Hangup", NULL, N_("_Hangup"), NULL, NULL, G_CALLBACK(menu_hangup) }, |
273 }; | 273 }; |
274 | 274 |
275 static gint menu_item_count = sizeof(menu_items) / sizeof(menu_items[0]); | 275 static const char *media_menu = |
276 | 276 "<ui>" |
277 static const char * | 277 "<menubar name='Media'>" |
278 item_factory_translate_func (const char *path, gpointer func_data) | 278 "<menu action='MediaMenu'>" |
279 { | 279 "<menuitem action='Hangup'/>" |
280 return _(path); | 280 "</menu>" |
281 } | 281 "</menubar>" |
282 "</ui>"; | |
282 | 283 |
283 static GtkWidget * | 284 static GtkWidget * |
284 setup_menubar(PidginMedia *window) | 285 setup_menubar(PidginMedia *window) |
285 { | 286 { |
287 GtkActionGroup *action_group; | |
288 GError *error; | |
286 GtkAccelGroup *accel_group; | 289 GtkAccelGroup *accel_group; |
287 GtkWidget *menu; | 290 GtkWidget *menu; |
288 | 291 |
289 accel_group = gtk_accel_group_new (); | 292 action_group = gtk_action_group_new("MediaActions"); |
293 gtk_action_group_add_actions(action_group, | |
294 menu_entries, | |
295 G_N_ELEMENTS(menu_entries), | |
296 GTK_WINDOW(window)); | |
297 #ifdef ENABLE_NLS | |
298 gtk_action_group_set_translation_domain(action_group, | |
299 PACKAGE); | |
300 #endif | |
301 | |
302 window->priv->ui = gtk_ui_manager_new(); | |
303 gtk_ui_manager_insert_action_group(window->priv->ui, action_group, 0); | |
304 | |
305 accel_group = gtk_ui_manager_get_accel_group(window->priv->ui); | |
290 gtk_window_add_accel_group(GTK_WINDOW(window), accel_group); | 306 gtk_window_add_accel_group(GTK_WINDOW(window), accel_group); |
291 g_object_unref(accel_group); | 307 |
292 | 308 error = NULL; |
293 window->priv->item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, | 309 if (!gtk_ui_manager_add_ui_from_string(window->priv->ui, media_menu, -1, &error)) |
294 "<main>", accel_group); | 310 { |
295 | 311 g_message("building menus failed: %s", error->message); |
296 gtk_item_factory_set_translate_func(window->priv->item_factory, | 312 g_error_free(error); |
297 (GtkTranslateFunc)item_factory_translate_func, | 313 exit(EXIT_FAILURE); |
298 NULL, NULL); | 314 } |
299 | 315 |
300 gtk_item_factory_create_items(window->priv->item_factory, | 316 menu = gtk_ui_manager_get_widget(window->priv->ui, "/Media"); |
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); | |
304 | |
305 menu = gtk_item_factory_get_widget( | |
306 window->priv->item_factory, "<main>"); | |
307 | 317 |
308 gtk_widget_show(menu); | 318 gtk_widget_show(menu); |
309 return menu; | 319 return menu; |
310 } | 320 } |
311 | 321 |
331 | 341 |
332 media->priv->menubar = setup_menubar(media); | 342 media->priv->menubar = setup_menubar(media); |
333 gtk_box_pack_start(GTK_BOX(vbox), media->priv->menubar, | 343 gtk_box_pack_start(GTK_BOX(vbox), media->priv->menubar, |
334 FALSE, TRUE, 0); | 344 FALSE, TRUE, 0); |
335 | 345 |
336 media->priv->display = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); | 346 media->priv->display = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
337 gtk_container_set_border_width(GTK_CONTAINER(media->priv->display), | 347 gtk_container_set_border_width(GTK_CONTAINER(media->priv->display), |
338 PIDGIN_HIG_BOX_SPACE); | 348 PIDGIN_HIG_BOX_SPACE); |
339 gtk_box_pack_start(GTK_BOX(vbox), media->priv->display, | 349 gtk_box_pack_start(GTK_BOX(vbox), media->priv->display, |
340 TRUE, TRUE, PIDGIN_HIG_BOX_SPACE); | 350 TRUE, TRUE, PIDGIN_HIG_BOX_SPACE); |
341 gtk_widget_show(vbox); | 351 gtk_widget_show(vbox); |
382 pidgin_media_disconnect_levels(gtkmedia->priv->media, gtkmedia); | 392 pidgin_media_disconnect_levels(gtkmedia->priv->media, gtkmedia); |
383 g_object_unref(gtkmedia->priv->media); | 393 g_object_unref(gtkmedia->priv->media); |
384 gtkmedia->priv->media = NULL; | 394 gtkmedia->priv->media = NULL; |
385 } | 395 } |
386 | 396 |
387 if (gtkmedia->priv->item_factory) { | 397 if (gtkmedia->priv->ui) { |
388 g_object_unref(gtkmedia->priv->item_factory); | 398 g_object_unref(gtkmedia->priv->ui); |
389 gtkmedia->priv->item_factory = NULL; | 399 gtkmedia->priv->ui = NULL; |
390 } | 400 } |
391 | 401 |
392 G_OBJECT_CLASS(parent_class)->dispose(media); | 402 G_OBJECT_CLASS(parent_class)->dispose(media); |
393 } | 403 } |
394 | 404 |
627 PURPLE_MEDIA_RECV_AUDIO)) { | 637 PURPLE_MEDIA_RECV_AUDIO)) { |
628 recv_widget = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); | 638 recv_widget = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
629 gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display), | 639 gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display), |
630 recv_widget, TRUE, TRUE, 0); | 640 recv_widget, TRUE, TRUE, 0); |
631 gtk_widget_show(recv_widget); | 641 gtk_widget_show(recv_widget); |
632 } else | 642 } else { |
633 recv_widget = gtkmedia->priv->recv_widget; | 643 recv_widget = gtkmedia->priv->recv_widget; |
644 } | |
634 if (gtkmedia->priv->send_widget == NULL | 645 if (gtkmedia->priv->send_widget == NULL |
635 && type & (PURPLE_MEDIA_SEND_VIDEO | | 646 && type & (PURPLE_MEDIA_SEND_VIDEO | |
636 PURPLE_MEDIA_SEND_AUDIO)) { | 647 PURPLE_MEDIA_SEND_AUDIO)) { |
637 send_widget = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); | 648 send_widget = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
638 gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display), | 649 gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display), |
639 send_widget, TRUE, TRUE, 0); | 650 send_widget, FALSE, TRUE, 0); |
640 button_widget = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); | 651 button_widget = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
641 gtk_box_pack_end(GTK_BOX(send_widget), button_widget, | 652 gtk_box_pack_end(GTK_BOX(recv_widget), button_widget, |
642 FALSE, FALSE, 0); | 653 FALSE, TRUE, 0); |
643 gtk_widget_show(GTK_WIDGET(button_widget)); | |
644 gtk_widget_show(send_widget); | 654 gtk_widget_show(send_widget); |
645 | 655 |
646 /* Hold button */ | 656 /* Hold button */ |
647 gtkmedia->priv->hold = | 657 gtkmedia->priv->hold = |
648 gtk_toggle_button_new_with_mnemonic("_Hold"); | 658 gtk_toggle_button_new_with_mnemonic("_Hold"); |
659 gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->hold, | |
660 FALSE, FALSE, 0); | |
661 gtk_widget_show(gtkmedia->priv->hold); | |
649 g_signal_connect(gtkmedia->priv->hold, "toggled", | 662 g_signal_connect(gtkmedia->priv->hold, "toggled", |
650 G_CALLBACK(pidgin_media_hold_toggled), | 663 G_CALLBACK(pidgin_media_hold_toggled), |
651 gtkmedia); | 664 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 { | 665 } else { |
656 send_widget = gtkmedia->priv->send_widget; | 666 send_widget = gtkmedia->priv->send_widget; |
657 button_widget = gtkmedia->priv->button_widget; | 667 button_widget = gtkmedia->priv->button_widget; |
658 } | 668 } |
659 | 669 |
661 PidginMediaRealizeData *data; | 671 PidginMediaRealizeData *data; |
662 GtkWidget *aspect; | 672 GtkWidget *aspect; |
663 GtkWidget *remote_video; | 673 GtkWidget *remote_video; |
664 GdkColor color = {0, 0, 0, 0}; | 674 GdkColor color = {0, 0, 0, 0}; |
665 | 675 |
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 gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN); | 677 gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN); |
668 gtk_box_pack_start(GTK_BOX(recv_widget), aspect, TRUE, TRUE, 0); | 678 gtk_box_pack_start(GTK_BOX(recv_widget), aspect, TRUE, TRUE, 0); |
669 | 679 |
670 data = g_new0(PidginMediaRealizeData, 1); | 680 data = g_new0(PidginMediaRealizeData, 1); |
671 data->gtkmedia = gtkmedia; | 681 data->gtkmedia = gtkmedia; |
681 gtk_widget_show(remote_video); | 691 gtk_widget_show(remote_video); |
682 gtk_widget_show(aspect); | 692 gtk_widget_show(aspect); |
683 | 693 |
684 gtkmedia->priv->remote_video = remote_video; | 694 gtkmedia->priv->remote_video = remote_video; |
685 } | 695 } |
696 | |
686 if (type & PURPLE_MEDIA_SEND_VIDEO) { | 697 if (type & PURPLE_MEDIA_SEND_VIDEO) { |
687 PidginMediaRealizeData *data; | 698 PidginMediaRealizeData *data; |
688 GtkWidget *aspect; | 699 GtkWidget *aspect; |
689 GtkWidget *local_video; | 700 GtkWidget *local_video; |
690 GdkColor color = {0, 0, 0, 0}; | 701 GdkColor color = {0, 0, 0, 0}; |
691 | 702 |
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 gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN); | 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); |
695 | 706 |
696 data = g_new0(PidginMediaRealizeData, 1); | 707 data = g_new0(PidginMediaRealizeData, 1); |
697 data->gtkmedia = gtkmedia; | 708 data->gtkmedia = gtkmedia; |
698 data->session_id = g_strdup(sid); | 709 data->session_id = g_strdup(sid); |
699 data->participant = NULL; | 710 data->participant = NULL; |
701 local_video = gtk_drawing_area_new(); | 712 local_video = gtk_drawing_area_new(); |
702 gtk_widget_modify_bg(local_video, GTK_STATE_NORMAL, &color); | 713 gtk_widget_modify_bg(local_video, GTK_STATE_NORMAL, &color); |
703 g_signal_connect(G_OBJECT(local_video), "realize", | 714 g_signal_connect(G_OBJECT(local_video), "realize", |
704 G_CALLBACK(realize_cb), data); | 715 G_CALLBACK(realize_cb), data); |
705 gtk_container_add(GTK_CONTAINER(aspect), local_video); | 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); |
707 | 718 |
708 gtk_widget_show(local_video); | 719 gtk_widget_show(local_video); |
709 gtk_widget_show(aspect); | 720 gtk_widget_show(aspect); |
710 | 721 |
711 gtkmedia->priv->pause = | 722 gtkmedia->priv->pause = |
712 gtk_toggle_button_new_with_mnemonic(_("_Pause")); | 723 gtk_toggle_button_new_with_mnemonic(_("_Pause")); |
724 gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->pause, | |
725 FALSE, FALSE, 0); | |
726 gtk_widget_show(gtkmedia->priv->pause); | |
713 g_signal_connect(gtkmedia->priv->pause, "toggled", | 727 g_signal_connect(gtkmedia->priv->pause, "toggled", |
714 G_CALLBACK(pidgin_media_pause_toggled), | 728 G_CALLBACK(pidgin_media_pause_toggled), |
715 gtkmedia); | 729 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 | 730 |
720 gtkmedia->priv->local_video = local_video; | 731 gtkmedia->priv->local_video = local_video; |
721 } | 732 } |
722 | |
723 if (type & PURPLE_MEDIA_RECV_AUDIO) { | 733 if (type & PURPLE_MEDIA_RECV_AUDIO) { |
724 gtk_box_pack_end(GTK_BOX(recv_widget), | 734 gtk_box_pack_end(GTK_BOX(recv_widget), |
725 pidgin_media_add_audio_widget(gtkmedia, | 735 pidgin_media_add_audio_widget(gtkmedia, |
726 PURPLE_MEDIA_RECV_AUDIO), FALSE, FALSE, 0); | 736 PURPLE_MEDIA_RECV_AUDIO), FALSE, FALSE, 0); |
727 } | 737 } |
738 | |
728 if (type & PURPLE_MEDIA_SEND_AUDIO) { | 739 if (type & PURPLE_MEDIA_SEND_AUDIO) { |
729 gtkmedia->priv->mute = | 740 gtkmedia->priv->mute = |
730 gtk_toggle_button_new_with_mnemonic("_Mute"); | 741 gtk_toggle_button_new_with_mnemonic("_Mute"); |
742 gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->mute, | |
743 FALSE, FALSE, 0); | |
744 gtk_widget_show(gtkmedia->priv->mute); | |
731 g_signal_connect(gtkmedia->priv->mute, "toggled", | 745 g_signal_connect(gtkmedia->priv->mute, "toggled", |
732 G_CALLBACK(pidgin_media_mute_toggled), | 746 G_CALLBACK(pidgin_media_mute_toggled), |
733 gtkmedia); | 747 gtkmedia); |
734 gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->mute, | 748 |
735 FALSE, FALSE, 0); | 749 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, | 750 pidgin_media_add_audio_widget(gtkmedia, |
740 PURPLE_MEDIA_SEND_AUDIO), FALSE, FALSE, 0); | 751 PURPLE_MEDIA_SEND_AUDIO), FALSE, FALSE, 0); |
741 } | 752 } |
742 | |
743 | 753 |
744 if (type & PURPLE_MEDIA_AUDIO && | 754 if (type & PURPLE_MEDIA_AUDIO && |
745 gtkmedia->priv->level_handler_id == 0) { | 755 gtkmedia->priv->level_handler_id == 0) { |
746 gtkmedia->priv->level_handler_id = g_signal_connect( | 756 gtkmedia->priv->level_handler_id = g_signal_connect( |
747 media, "level", G_CALLBACK(level_message_cb), | 757 media, "level", G_CALLBACK(level_message_cb), |
750 | 760 |
751 if (send_widget != NULL) | 761 if (send_widget != NULL) |
752 gtkmedia->priv->send_widget = send_widget; | 762 gtkmedia->priv->send_widget = send_widget; |
753 if (recv_widget != NULL) | 763 if (recv_widget != NULL) |
754 gtkmedia->priv->recv_widget = recv_widget; | 764 gtkmedia->priv->recv_widget = recv_widget; |
755 if (button_widget != NULL) | 765 if (button_widget != NULL) { |
756 gtkmedia->priv->button_widget = button_widget; | 766 gtkmedia->priv->button_widget = button_widget; |
767 gtk_widget_show(GTK_WIDGET(button_widget)); | |
768 } | |
757 | 769 |
758 if (purple_media_is_initiator(media, sid, NULL) == FALSE) { | 770 if (purple_media_is_initiator(media, sid, NULL) == FALSE) { |
759 if (gtkmedia->priv->timeout_id != 0) | 771 if (gtkmedia->priv->timeout_id != 0) |
760 g_source_remove(gtkmedia->priv->timeout_id); | 772 g_source_remove(gtkmedia->priv->timeout_id); |
761 gtkmedia->priv->request_type |= type; | 773 gtkmedia->priv->request_type |= type; |