Mercurial > pidgin.yaz
diff pidgin/gtkconv.c @ 25635:efaecb71baad
propagate from branch 'im.pidgin.pidgin' (head 8ca6a80e2cd7fbbc59983f8ba370f7276e062db9)
to branch 'im.pidgin.pidgin.vv' (head 3ed39e8792f4a2e92ef5a3c7f4fb14251c9dae11)
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Sat, 15 Mar 2008 07:39:15 +0000 |
parents | f5bcb58bdf56 8802eddbfedc |
children | e4a4bc86c547 |
line wrap: on
line diff
--- a/pidgin/gtkconv.c Sat Mar 15 07:37:03 2008 +0000 +++ b/pidgin/gtkconv.c Sat Mar 15 07:39:15 2008 +0000 @@ -240,7 +240,10 @@ switch (purple_conversation_get_type(conv)) { case PURPLE_CONV_TYPE_IM: { - hide_conv(gtkconv, TRUE); + if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/close_immediately")) + close_this_sucker(gtkconv); + else + hide_conv(gtkconv, TRUE); break; } case PURPLE_CONV_TYPE_CHAT: @@ -2805,16 +2808,11 @@ void pidgin_conv_present_conversation(PurpleConversation *conv) { - PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv); + PidginConversation *gtkconv; GdkModifierType state; - if (gtkconv == NULL) { - pidgin_conv_attach_to_conversation(conv); - gtkconv = PIDGIN_CONVERSATION(conv); - } else if (gtkconv->win == hidden_convwin) { - pidgin_conv_window_remove_gtkconv(hidden_convwin, gtkconv); - pidgin_conv_placement_place(gtkconv); - } + pidgin_conv_attach_to_conversation(conv); + gtkconv = PIDGIN_CONVERSATION(conv); pidgin_conv_switch_active_conversation(conv); /* Switch the tab only if the user initiated the event by pressing @@ -4581,14 +4579,12 @@ conv = gtkconv->active_conv; if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { node = (PurpleBlistNode*)(purple_blist_find_chat(conv->account, conv->name)); -#if 0 - /* Using the transient blist nodes to show the tooltip doesn't quite work yet. */ if (!node) node = g_object_get_data(G_OBJECT(gtkconv->imhtml), "transient_chat"); -#endif } else { node = (PurpleBlistNode*)(purple_find_buddy(conv->account, conv->name)); #if 0 + /* Using the transient blist nodes to show the tooltip doesn't quite work yet. */ if (!node) node = g_object_get_data(G_OBJECT(gtkconv->imhtml), "transient_buddy"); #endif @@ -4742,6 +4738,8 @@ g_signal_connect_swapped(G_OBJECT(gtkconv->entry_buffer), "changed", G_CALLBACK(resize_imhtml_cb), gtkconv); + g_signal_connect_swapped(G_OBJECT(gtkconv->entry), "realize", + G_CALLBACK(resize_imhtml_cb), gtkconv); default_formatize(gtkconv); g_signal_connect_after(G_OBJECT(gtkconv->entry), "format_function_clear", @@ -5018,7 +5016,6 @@ gtk_widget_show(gtkconv->toolbar); else gtk_widget_hide(gtkconv->toolbar); - g_idle_add((GSourceFunc)resize_imhtml_cb, gtkconv); if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons")) gtk_widget_show(gtkconv->infopane_hbox); @@ -6497,14 +6494,16 @@ } } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { const char *topic = gtkconv->u.chat->topic_text ? gtk_entry_get_text(GTK_ENTRY(gtkconv->u.chat->topic_text)) : NULL; - char *esc = NULL; + char *esc = NULL, *tmp; #if GTK_CHECK_VERSION(2,6,0) esc = topic ? g_markup_escape_text(topic, -1) : NULL; #else /* GTK < 2.6 doesn't have auto ellipsization, so we do a crude * trucation to prevent forcing the window to be as wide as the topic */ int len = 0; - char *c, *tmp = g_strdup(topic); + char *c; + + tmp = g_strdup(topic); c = tmp; while(*c && len < 72) { c = g_utf8_next_char(c); @@ -6519,11 +6518,12 @@ esc = tmp ? g_markup_escape_text(tmp, -1) : NULL; g_free(tmp); #endif + tmp = g_markup_escape_text(purple_conversation_get_title(conv), -1); markup = g_strdup_printf("%s%s<span color='%s' size='smaller'>%s</span>", - purple_conversation_get_title(conv), - esc && *esc ? "\n" : "", + tmp, esc && *esc ? "\n" : "", pidgin_get_dim_grey_string(gtkconv->infopane), esc ? esc : ""); + g_free(tmp); g_free(esc); } gtk_list_store_set(gtkconv->infopane_model, &(gtkconv->infopane_iter), @@ -7695,6 +7695,7 @@ purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons", TRUE); purple_prefs_add_string(PIDGIN_PREFS_ROOT "/conversations/im/hide_new", "never"); + purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/im/close_immediately", TRUE); #ifdef _WIN32 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/win32/minimize_new_convs", FALSE);