# # old_revision [e4cc3b79eb04e4937c5fa764f6839a8e07397651] # # patch "pidgin/gtkconv.c" # from [c9dd80f7d1cc0314cf6fbcceccb1d4a08f8238af] # to [7e7c62d13538ddc55fad9764b0d10871587ea6ba] # # patch "pidgin/gtkconvwin.h" # from [250c2499fcc142e466d0695dc27e203f56ff9156] # to [88561f8027fc4f712b8c4f7c760e32477fd8bcc7] # ============================================================ --- pidgin/gtkconv.c c9dd80f7d1cc0314cf6fbcceccb1d4a08f8238af +++ pidgin/gtkconv.c 7e7c62d13538ddc55fad9764b0d10871587ea6ba @@ -2260,8 +2260,7 @@ pidgin_conv_switch_active_conversation(P g_object_set_data(G_OBJECT(entry), "transient_buddy", NULL); regenerate_options_items(gtkconv->win); - gtk_window_set_title(GTK_WINDOW(gtkconv->win->window), - gtk_label_get_text(GTK_LABEL(gtkconv->tab_label))); + pidgin_conv_window_update_title(gtkconv->win); } static void @@ -2520,6 +2519,7 @@ update_tab_icon(PurpleConversation *conv } } +#if 0 /* This gets added as an idle handler when doing something that * redraws the icon. It sets the auto_resize gboolean to TRUE. * This way, when the size_allocate callback gets triggered, it notices @@ -2532,6 +2532,7 @@ static gboolean reset_auto_resize_cb(gpo gtkconv->auto_resize = FALSE; return FALSE; } +#endif static gboolean redraw_icon(gpointer data) @@ -4396,8 +4397,10 @@ static gboolean resize_imhtml_cb(PidginC if (wrapped_lines > lines) height += (oneline.height + pad_inside) * (wrapped_lines - lines); +#if 0 gtkconv->auto_resize = TRUE; g_idle_add(reset_auto_resize_cb, gtkconv); +#endif diff = height - gtkconv->entry->allocation.height; @@ -4738,6 +4741,8 @@ setup_common_pane(PidginConversation *gt 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", @@ -5014,7 +5019,6 @@ private_gtkconv_new(PurpleConversation * 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); @@ -6580,7 +6584,7 @@ pidgin_conv_update_fields(PurpleConversa gtk_label_set_text(GTK_LABEL(gtkconv->menu_label), title); if (pidgin_conv_window_is_active_conversation(conv)) - gtk_window_set_title(GTK_WINDOW(win->window), title); + pidgin_conv_window_update_title(win); g_free(title); } @@ -9529,7 +9533,7 @@ static GList *conv_placement_fncs = NULL } ConvPlacementData; static GList *conv_placement_fncs = NULL; -static PidginConvPlacementFunc place_conv = NULL; +static PidginConversationWindowManager manager; /* This one places conversations in the last made window. */ static void @@ -9885,26 +9889,38 @@ pidgin_conv_placement_set_current_func(P /* If tabs are enabled, set the function, otherwise, NULL it out. */ if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/tabs")) - place_conv = func; + manager.place_conv = func; else - place_conv = NULL; + manager.place_conv = NULL; } PidginConvPlacementFunc pidgin_conv_placement_get_current_func(void) { - return place_conv; + return manager.place_conv; } void pidgin_conv_placement_place(PidginConversation *gtkconv) { - if (place_conv) - place_conv(gtkconv); + if (manager.place_conv) + manager.place_conv(gtkconv); else conv_placement_new_window(gtkconv); } +void +pidgin_conv_window_update_title(PidginWindow *window) +{ + if (manager.set_title) + manager.set_title(window); + else { + PidginConversation *gtkconv = pidgin_conv_window_get_active_gtkconv(window); + gtk_window_set_title(GTK_WINDOW(window->window), + gtk_label_get_text(GTK_LABEL(gtkconv->tab_label))); + } +} + gboolean pidgin_conv_is_hidden(PidginConversation *gtkconv) { @@ -10011,3 +10027,14 @@ generate_nick_colors(guint *color_count, return colors; } + +void +pidgin_conv_window_set_manager(PidginWindow *window, PidginConversationWindowManager *new_manager) +{ + if (new_manager) + manager = *new_manager; + else { + memset(&manager, 0, sizeof(manager)); + } +} + ============================================================ --- pidgin/gtkconvwin.h 250c2499fcc142e466d0695dc27e203f56ff9156 +++ pidgin/gtkconvwin.h 88561f8027fc4f712b8c4f7c760e32477fd8bcc7 @@ -134,7 +134,15 @@ typedef void (*PidginConvPlacementFunc)( /*@{*/ typedef void (*PidginConvPlacementFunc)(PidginConversation *); +typedef void (*PidginConvTitleFunc)(PidginWindow *window); +typedef void (*PidginConvIconFunc)(PidginWindow *window); +typedef struct { + PidginConvPlacementFunc place_conv; + PidginConvTitleFunc set_title; + PidginConvIconFunc set_icon; /* Currently unused */ +} PidginConversationWindowManager; + GList *pidgin_conv_placement_get_options(void); void pidgin_conv_placement_add_fnc(const char *id, const char *name, PidginConvPlacementFunc fnc); void pidgin_conv_placement_remove_fnc(const char *id); @@ -143,6 +151,8 @@ void pidgin_conv_placement_place(PidginC void pidgin_conv_placement_set_current_func(PidginConvPlacementFunc func); PidginConvPlacementFunc pidgin_conv_placement_get_current_func(void); void pidgin_conv_placement_place(PidginConversation *gtkconv); +void pidgin_conv_window_update_title(PidginWindow *window); +void pidgin_conv_window_set_manager(PidginWindow *window, PidginConversationWindowManager *manager); /*@}*/