| 238 const char *name = purple_conversation_get_name(conv); |
238 const char *name = purple_conversation_get_name(conv); |
| 239 |
239 |
| 240 switch (purple_conversation_get_type(conv)) { |
240 switch (purple_conversation_get_type(conv)) { |
| 241 case PURPLE_CONV_TYPE_IM: |
241 case PURPLE_CONV_TYPE_IM: |
| 242 { |
242 { |
| 243 hide_conv(gtkconv, TRUE); |
243 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/close_immediately")) |
| |
244 close_this_sucker(gtkconv); |
| |
245 else |
| |
246 hide_conv(gtkconv, TRUE); |
| 244 break; |
247 break; |
| 245 } |
248 } |
| 246 case PURPLE_CONV_TYPE_CHAT: |
249 case PURPLE_CONV_TYPE_CHAT: |
| 247 { |
250 { |
| 248 PurpleChat *chat = purple_blist_find_chat(account, name); |
251 PurpleChat *chat = purple_blist_find_chat(account, name); |
| 2803 * End of the bunch of buddy icon functions |
2806 * End of the bunch of buddy icon functions |
| 2804 **************************************************************************/ |
2807 **************************************************************************/ |
| 2805 void |
2808 void |
| 2806 pidgin_conv_present_conversation(PurpleConversation *conv) |
2809 pidgin_conv_present_conversation(PurpleConversation *conv) |
| 2807 { |
2810 { |
| 2808 PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv); |
2811 PidginConversation *gtkconv; |
| 2809 GdkModifierType state; |
2812 GdkModifierType state; |
| 2810 |
2813 |
| 2811 if (gtkconv == NULL) { |
2814 pidgin_conv_attach_to_conversation(conv); |
| 2812 pidgin_conv_attach_to_conversation(conv); |
2815 gtkconv = PIDGIN_CONVERSATION(conv); |
| 2813 gtkconv = PIDGIN_CONVERSATION(conv); |
|
| 2814 } else if (gtkconv->win == hidden_convwin) { |
|
| 2815 pidgin_conv_window_remove_gtkconv(hidden_convwin, gtkconv); |
|
| 2816 pidgin_conv_placement_place(gtkconv); |
|
| 2817 } |
|
| 2818 |
2816 |
| 2819 pidgin_conv_switch_active_conversation(conv); |
2817 pidgin_conv_switch_active_conversation(conv); |
| 2820 /* Switch the tab only if the user initiated the event by pressing |
2818 /* Switch the tab only if the user initiated the event by pressing |
| 2821 * a button or hitting a key. */ |
2819 * a button or hitting a key. */ |
| 2822 if (gtk_get_current_event_state(&state)) |
2820 if (gtk_get_current_event_state(&state)) |
| 4579 PidginConversation *gtkconv = userdata; |
4577 PidginConversation *gtkconv = userdata; |
| 4580 |
4578 |
| 4581 conv = gtkconv->active_conv; |
4579 conv = gtkconv->active_conv; |
| 4582 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { |
4580 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { |
| 4583 node = (PurpleBlistNode*)(purple_blist_find_chat(conv->account, conv->name)); |
4581 node = (PurpleBlistNode*)(purple_blist_find_chat(conv->account, conv->name)); |
| 4584 #if 0 |
|
| 4585 /* Using the transient blist nodes to show the tooltip doesn't quite work yet. */ |
|
| 4586 if (!node) |
4582 if (!node) |
| 4587 node = g_object_get_data(G_OBJECT(gtkconv->imhtml), "transient_chat"); |
4583 node = g_object_get_data(G_OBJECT(gtkconv->imhtml), "transient_chat"); |
| 4588 #endif |
|
| 4589 } else { |
4584 } else { |
| 4590 node = (PurpleBlistNode*)(purple_find_buddy(conv->account, conv->name)); |
4585 node = (PurpleBlistNode*)(purple_find_buddy(conv->account, conv->name)); |
| 4591 #if 0 |
4586 #if 0 |
| |
4587 /* Using the transient blist nodes to show the tooltip doesn't quite work yet. */ |
| 4592 if (!node) |
4588 if (!node) |
| 4593 node = g_object_get_data(G_OBJECT(gtkconv->imhtml), "transient_buddy"); |
4589 node = g_object_get_data(G_OBJECT(gtkconv->imhtml), "transient_buddy"); |
| 4594 #endif |
4590 #endif |
| 4595 } |
4591 } |
| 4596 |
4592 |
| 4739 gtkconv->u.im->animate = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/animate_buddy_icons"); |
4735 gtkconv->u.im->animate = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/animate_buddy_icons"); |
| 4740 gtkconv->u.im->show_icon = TRUE; |
4736 gtkconv->u.im->show_icon = TRUE; |
| 4741 } |
4737 } |
| 4742 |
4738 |
| 4743 g_signal_connect_swapped(G_OBJECT(gtkconv->entry_buffer), "changed", |
4739 g_signal_connect_swapped(G_OBJECT(gtkconv->entry_buffer), "changed", |
| |
4740 G_CALLBACK(resize_imhtml_cb), gtkconv); |
| |
4741 g_signal_connect_swapped(G_OBJECT(gtkconv->entry), "realize", |
| 4744 G_CALLBACK(resize_imhtml_cb), gtkconv); |
4742 G_CALLBACK(resize_imhtml_cb), gtkconv); |
| 4745 |
4743 |
| 4746 default_formatize(gtkconv); |
4744 default_formatize(gtkconv); |
| 4747 g_signal_connect_after(G_OBJECT(gtkconv->entry), "format_function_clear", |
4745 g_signal_connect_after(G_OBJECT(gtkconv->entry), "format_function_clear", |
| 4748 G_CALLBACK(clear_formatting_cb), gtkconv); |
4746 G_CALLBACK(clear_formatting_cb), gtkconv); |
| 5016 |
5014 |
| 5017 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar")) |
5015 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar")) |
| 5018 gtk_widget_show(gtkconv->toolbar); |
5016 gtk_widget_show(gtkconv->toolbar); |
| 5019 else |
5017 else |
| 5020 gtk_widget_hide(gtkconv->toolbar); |
5018 gtk_widget_hide(gtkconv->toolbar); |
| 5021 g_idle_add((GSourceFunc)resize_imhtml_cb, gtkconv); |
|
| 5022 |
5019 |
| 5023 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons")) |
5020 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons")) |
| 5024 gtk_widget_show(gtkconv->infopane_hbox); |
5021 gtk_widget_show(gtkconv->infopane_hbox); |
| 5025 else |
5022 else |
| 5026 gtk_widget_hide(gtkconv->infopane_hbox); |
5023 gtk_widget_hide(gtkconv->infopane_hbox); |
| 6495 } else { |
6492 } else { |
| 6496 markup = title; |
6493 markup = title; |
| 6497 } |
6494 } |
| 6498 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { |
6495 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { |
| 6499 const char *topic = gtkconv->u.chat->topic_text ? gtk_entry_get_text(GTK_ENTRY(gtkconv->u.chat->topic_text)) : NULL; |
6496 const char *topic = gtkconv->u.chat->topic_text ? gtk_entry_get_text(GTK_ENTRY(gtkconv->u.chat->topic_text)) : NULL; |
| 6500 char *esc = NULL; |
6497 char *esc = NULL, *tmp; |
| 6501 #if GTK_CHECK_VERSION(2,6,0) |
6498 #if GTK_CHECK_VERSION(2,6,0) |
| 6502 esc = topic ? g_markup_escape_text(topic, -1) : NULL; |
6499 esc = topic ? g_markup_escape_text(topic, -1) : NULL; |
| 6503 #else |
6500 #else |
| 6504 /* GTK < 2.6 doesn't have auto ellipsization, so we do a crude |
6501 /* GTK < 2.6 doesn't have auto ellipsization, so we do a crude |
| 6505 * trucation to prevent forcing the window to be as wide as the topic */ |
6502 * trucation to prevent forcing the window to be as wide as the topic */ |
| 6506 int len = 0; |
6503 int len = 0; |
| 6507 char *c, *tmp = g_strdup(topic); |
6504 char *c; |
| |
6505 |
| |
6506 tmp = g_strdup(topic); |
| 6508 c = tmp; |
6507 c = tmp; |
| 6509 while(*c && len < 72) { |
6508 while(*c && len < 72) { |
| 6510 c = g_utf8_next_char(c); |
6509 c = g_utf8_next_char(c); |
| 6511 len++; |
6510 len++; |
| 6512 } |
6511 } |
| 6517 tmp = c; |
6516 tmp = c; |
| 6518 } |
6517 } |
| 6519 esc = tmp ? g_markup_escape_text(tmp, -1) : NULL; |
6518 esc = tmp ? g_markup_escape_text(tmp, -1) : NULL; |
| 6520 g_free(tmp); |
6519 g_free(tmp); |
| 6521 #endif |
6520 #endif |
| |
6521 tmp = g_markup_escape_text(purple_conversation_get_title(conv), -1); |
| 6522 markup = g_strdup_printf("%s%s<span color='%s' size='smaller'>%s</span>", |
6522 markup = g_strdup_printf("%s%s<span color='%s' size='smaller'>%s</span>", |
| 6523 purple_conversation_get_title(conv), |
6523 tmp, esc && *esc ? "\n" : "", |
| 6524 esc && *esc ? "\n" : "", |
|
| 6525 pidgin_get_dim_grey_string(gtkconv->infopane), |
6524 pidgin_get_dim_grey_string(gtkconv->infopane), |
| 6526 esc ? esc : ""); |
6525 esc ? esc : ""); |
| |
6526 g_free(tmp); |
| 6527 g_free(esc); |
6527 g_free(esc); |
| 6528 } |
6528 } |
| 6529 gtk_list_store_set(gtkconv->infopane_model, &(gtkconv->infopane_iter), |
6529 gtk_list_store_set(gtkconv->infopane_model, &(gtkconv->infopane_iter), |
| 6530 CONV_TEXT_COLUMN, markup, -1); |
6530 CONV_TEXT_COLUMN, markup, -1); |
| 6531 /* XXX seanegan Why do I have to do this? */ |
6531 /* XXX seanegan Why do I have to do this? */ |
| 7693 |
7693 |
| 7694 purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/im/entry_height", 54); |
7694 purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/im/entry_height", 54); |
| 7695 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons", TRUE); |
7695 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons", TRUE); |
| 7696 |
7696 |
| 7697 purple_prefs_add_string(PIDGIN_PREFS_ROOT "/conversations/im/hide_new", "never"); |
7697 purple_prefs_add_string(PIDGIN_PREFS_ROOT "/conversations/im/hide_new", "never"); |
| |
7698 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/im/close_immediately", TRUE); |
| 7698 |
7699 |
| 7699 #ifdef _WIN32 |
7700 #ifdef _WIN32 |
| 7700 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/win32/minimize_new_convs", FALSE); |
7701 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/win32/minimize_new_convs", FALSE); |
| 7701 #endif |
7702 #endif |
| 7702 |
7703 |