~micahg/ubuntu/natty/pidgin/2.7.9-2

« back to all changes in this revision

Viewing changes to pidgin/gtkmedia.c

  • Committer: Bazaar Package Importer
  • Author(s): Sebastien Bacher
  • Date: 2010-08-11 14:16:15 UTC
  • mfrom: (1.3.12 upstream)
  • Revision ID: james.westby@ubuntu.com-20100811141615-lsqya0vlqrnu14lo
Tags: 1:2.7.3-1ubuntu1
* Resync on Debian, workaround build issue (lp:#600952) 
* debian/control:
  - Build-Depends on liblaunchpad-integration-dev
  - Drop libpurple0 dependency from libpurple-bin
  - Drop pidgin-data dependency from libpurple0
  - Recommends pidgin-libnotify
* debian/libpurple0.symbols: 
  - add epochs
* debian/patches/02_lpi.patch:
  - launchpad integration
* debian/patches/04_let_crasher_for_apport.patch:
  - stop catching the SIGSEGV signal and let apport handle it
* debian/patches/05_default_to_irc_ubuntu_com.patch:
  - set the default IRC server to irc.ubuntu.com
* debian/patches/10_docklet_default_off.patch:
  - default behavior to have no notification area icon.
* debian/patches/11_buddy_list_really_show.patch:
  - the buddy list tries harder to appear.  This fixes some issues with it
    not appearing.
* debian/patches/ 13_sounds_and_timers.patch:
  - adjusts the time out for sounds to be 15 seconds, 
    which helps get fewer spurious login notifications on slow connections.
* debian/patches/60_1024x600_gtk*.c.patch: 
  - add scrollbars into preferences and pounce dialogs
* debian/prefs.xml: 
  - Update to set the notify plugin prefs /plugins/gtk/X11/notify/*, 
    set /pidgin/plugins/loaded to load the notify plugin and enable 
    the standard logging options by default
* debian/rules:
  - install a launcher in the message indicator
  - set translation domain and update template
  - use simple-patchsys rules

Show diffs side-by-side

added added

removed removed

Lines of Context:
84
84
        gchar *screenname;
85
85
        gulong level_handler_id;
86
86
 
87
 
        GtkItemFactory *item_factory;
 
87
        GtkUIManager *ui;
88
88
        GtkWidget *menubar;
89
89
        GtkWidget *statusbar;
90
90
 
260
260
#endif
261
261
 
262
262
static void
263
 
menu_hangup(gpointer data, guint action, GtkWidget *item)
 
263
menu_hangup(GtkAction *action, gpointer data)
264
264
{
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);
268
268
}
269
269
 
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) },
273
273
};
274
274
 
275
 
static gint menu_item_count = sizeof(menu_items) / sizeof(menu_items[0]);
276
 
 
277
 
static const char *
278
 
item_factory_translate_func (const char *path, gpointer func_data)
279
 
{
280
 
        return _(path);
281
 
}
 
275
static const char *media_menu =
 
276
"<ui>"
 
277
        "<menubar name='Media'>"
 
278
                "<menu action='MediaMenu'>"
 
279
                        "<menuitem action='Hangup'/>"
 
280
                "</menu>"
 
281
        "</menubar>"
 
282
"</ui>";
282
283
 
283
284
static GtkWidget *
284
285
setup_menubar(PidginMedia *window)
285
286
{
 
287
        GtkActionGroup *action_group;
 
288
        GError *error;
286
289
        GtkAccelGroup *accel_group;
287
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
306
        gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
291
 
        g_object_unref(accel_group);
292
 
 
293
 
        window->priv->item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR,
294
 
                        "<main>", accel_group);
295
 
 
296
 
        gtk_item_factory_set_translate_func(window->priv->item_factory,
297
 
                        (GtkTranslateFunc)item_factory_translate_func,
298
 
                        NULL, NULL);
299
 
 
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);
304
 
 
305
 
        menu = gtk_item_factory_get_widget(
306
 
                        window->priv->item_factory, "<main>");
 
307
 
 
308
        error = NULL;
 
309
        if (!gtk_ui_manager_add_ui_from_string(window->priv->ui, media_menu, -1, &error))
 
310
        {
 
311
                g_message("building menus failed: %s", error->message);
 
312
                g_error_free(error);
 
313
                exit(EXIT_FAILURE);
 
314
        }
 
315
 
 
316
        menu = gtk_ui_manager_get_widget(window->priv->ui, "/Media");
307
317
 
308
318
        gtk_widget_show(menu);
309
319
        return menu;
333
343
        gtk_box_pack_start(GTK_BOX(vbox), media->priv->menubar,
334
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
347
        gtk_container_set_border_width(GTK_CONTAINER(media->priv->display),
338
348
                        PIDGIN_HIG_BOX_SPACE);
339
349
        gtk_box_pack_start(GTK_BOX(vbox), media->priv->display,
384
394
                gtkmedia->priv->media = NULL;
385
395
        }
386
396
 
387
 
        if (gtkmedia->priv->item_factory) {
388
 
                g_object_unref(gtkmedia->priv->item_factory);
389
 
                gtkmedia->priv->item_factory = NULL;
 
397
        if (gtkmedia->priv->ui) {
 
398
                g_object_unref(gtkmedia->priv->ui);
 
399
                gtkmedia->priv->ui = NULL;
390
400
        }
391
401
 
392
402
        G_OBJECT_CLASS(parent_class)->dispose(media);
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);
632
 
        } else
 
642
        } else {
633
643
                recv_widget = gtkmedia->priv->recv_widget;
 
644
        }
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,
642
 
                                FALSE, FALSE, 0);
643
 
                gtk_widget_show(GTK_WIDGET(button_widget));
 
652
                gtk_box_pack_end(GTK_BOX(recv_widget), button_widget,
 
653
                                FALSE, TRUE, 0);
644
654
                gtk_widget_show(send_widget);
645
655
 
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,
 
660
                                FALSE, FALSE, 0);
 
661
                gtk_widget_show(gtkmedia->priv->hold);
649
662
                g_signal_connect(gtkmedia->priv->hold, "toggled",
650
663
                                G_CALLBACK(pidgin_media_hold_toggled),
651
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
665
        } else {
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};
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
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);
669
679
 
683
693
 
684
694
                gtkmedia->priv->remote_video = remote_video;
685
695
        }
 
696
 
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};
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
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
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);
707
718
 
708
719
                gtk_widget_show(local_video);
709
720
                gtk_widget_show(aspect);
710
721
 
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,
 
725
                                FALSE, FALSE, 0);
 
726
                gtk_widget_show(gtkmedia->priv->pause);
713
727
                g_signal_connect(gtkmedia->priv->pause, "toggled",
714
728
                                G_CALLBACK(pidgin_media_pause_toggled),
715
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
731
                gtkmedia->priv->local_video = local_video;
721
732
        }
722
 
 
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);
727
737
        }
 
738
 
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,
 
743
                                FALSE, FALSE, 0);
 
744
                gtk_widget_show(gtkmedia->priv->mute);
731
745
                g_signal_connect(gtkmedia->priv->mute, "toggled",
732
746
                                G_CALLBACK(pidgin_media_mute_toggled),
733
747
                                gtkmedia);
734
 
                gtk_box_pack_end(GTK_BOX(button_widget), gtkmedia->priv->mute,
735
 
                                FALSE, FALSE, 0);
736
 
                gtk_widget_show(gtkmedia->priv->mute);
737
748
 
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);
741
752
        }
742
753
 
743
 
 
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(
752
762
                gtkmedia->priv->send_widget = send_widget;
753
763
        if (recv_widget != NULL)
754
764
                gtkmedia->priv->recv_widget = recv_widget;
755
 
        if (button_widget != NULL)
 
765
        if (button_widget != NULL) {
756
766
                gtkmedia->priv->button_widget = button_widget;
 
767
                gtk_widget_show(GTK_WIDGET(button_widget));
 
768
        }
757
769
 
758
770
        if (purple_media_is_initiator(media, sid, NULL) == FALSE) {
759
771
                if (gtkmedia->priv->timeout_id != 0)