Mercurial > pidgin.yaz
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); |