comparison finch/gntconv.c @ 19980:959b3aaba0b6

Remember the 'Enable Sounds' setting for a conversation. Closes #312.
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Thu, 13 Sep 2007 02:15:05 +0000
parents 44b4e8bd759b
children fb2880587f34 6b8bc3309ab7
comparison
equal deleted inserted replaced
19969:0633ecda7ed0 19980:959b3aaba0b6
60 #include "config.h" 60 #include "config.h"
61 61
62 static void finch_write_common(PurpleConversation *conv, const char *who, 62 static void finch_write_common(PurpleConversation *conv, const char *who,
63 const char *message, PurpleMessageFlags flags, time_t mtime); 63 const char *message, PurpleMessageFlags flags, time_t mtime);
64 static void generate_send_to_menu(FinchConv *ggc); 64 static void generate_send_to_menu(FinchConv *ggc);
65
66 static PurpleBlistNode *
67 get_conversation_blist_node(PurpleConversation *conv)
68 {
69 PurpleBlistNode *node = NULL;
70
71 switch (purple_conversation_get_type(conv)) {
72 case PURPLE_CONV_TYPE_IM:
73 node = (PurpleBlistNode*)purple_find_buddy(conv->account, conv->name);
74 node = node ? node->parent : NULL;
75 break;
76 case PURPLE_CONV_TYPE_CHAT:
77 node = (PurpleBlistNode*)purple_blist_find_chat(conv->account, conv->name);
78 break;
79 default:
80 break;
81 }
82 return node;
83 }
65 84
66 static void 85 static void
67 send_typing_notification(GntWidget *w, FinchConv *ggconv) 86 send_typing_notification(GntWidget *w, FinchConv *ggconv)
68 { 87 {
69 const char *text = gnt_entry_get_text(GNT_ENTRY(ggconv->entry)); 88 const char *text = gnt_entry_get_text(GNT_ENTRY(ggconv->entry));
389 408
390 static void 409 static void
391 toggle_sound_cb(GntMenuItem *item, gpointer ggconv) 410 toggle_sound_cb(GntMenuItem *item, gpointer ggconv)
392 { 411 {
393 FinchConv *fc = ggconv; 412 FinchConv *fc = ggconv;
413 PurpleBlistNode *node = get_conversation_blist_node(fc->active_conv);
394 fc->flags ^= FINCH_CONV_NO_SOUND; 414 fc->flags ^= FINCH_CONV_NO_SOUND;
415 if (node)
416 purple_blist_node_set_bool(node, "gnt-mute-sound", !!(fc->flags & FINCH_CONV_NO_SOUND));
395 } 417 }
396 418
397 static void 419 static void
398 send_to_cb(GntMenuItem *m, gpointer n) 420 send_to_cb(GntMenuItem *m, gpointer n)
399 { 421 {
545 FinchConv *ggc = conv->ui_data; 567 FinchConv *ggc = conv->ui_data;
546 char *title; 568 char *title;
547 PurpleConversationType type; 569 PurpleConversationType type;
548 PurpleConversation *cc; 570 PurpleConversation *cc;
549 PurpleAccount *account; 571 PurpleAccount *account;
572 PurpleBlistNode *convnode = NULL;
550 573
551 if (ggc) 574 if (ggc)
552 return; 575 return;
553 576
554 cc = find_conv_with_contact(conv->account, conv->name); 577 cc = find_conv_with_contact(conv->account, conv->name);
651 674
652 if (type == PURPLE_CONV_TYPE_IM) { 675 if (type == PURPLE_CONV_TYPE_IM) {
653 g_signal_connect(G_OBJECT(ggc->entry), "text_changed", G_CALLBACK(send_typing_notification), ggc); 676 g_signal_connect(G_OBJECT(ggc->entry), "text_changed", G_CALLBACK(send_typing_notification), ggc);
654 } 677 }
655 678
656 if (!finch_sound_is_enabled()) 679 convnode = get_conversation_blist_node(conv);
680 if ((convnode && purple_blist_node_get_bool(convnode, "gnt-mute-sound")) ||
681 !finch_sound_is_enabled())
657 ggc->flags |= FINCH_CONV_NO_SOUND; 682 ggc->flags |= FINCH_CONV_NO_SOUND;
658 683
659 gg_create_menu(ggc); 684 gg_create_menu(ggc);
660 685
661 g_free(title); 686 g_free(title);