static void hide_conv(PidginConversation *gtkconv, gboolean closetimer) { GList *list; purple_signal_emit(pidgin_conversations_get_handle(), "conversation-hiding", gtkconv); for (list = g_list_copy(gtkconv->convs); list; list = g_list_delete_link(list, list)) { PurpleConversation *conv = list->data; if (closetimer) { guint timer = GPOINTER_TO_INT(purple_conversation_get_data(conv, "close-timer")); if (timer) purple_timeout_remove(timer); timer = purple_timeout_add_seconds(CLOSE_CONV_TIMEOUT_SECS, close_already, conv); purple_conversation_set_data(conv, "close-timer", GINT_TO_POINTER(timer)); } #if 0 /* I will miss you */ purple_conversation_set_ui_ops(conv, NULL); #else pidgin_conv_window_remove_gtkconv(gtkconv->win, gtkconv); pidgin_conv_window_add_gtkconv(hidden_convwin, gtkconv); #endif } }
static void conv_placement_by_number(PidginConversation *conv) { PidginWindow *win = NULL; GList *wins = NULL; if (purple_prefs_get_bool("/plugins/gtk/extplacement/placement_number_separate")) win = pidgin_conv_window_last_with_type(purple_conversation_get_type(conv->active_conv)); else if ((wins = pidgin_conv_windows_get_list()) != NULL) win = g_list_last(wins)->data; if (win == NULL) { win = pidgin_conv_window_new(); pidgin_conv_window_add_gtkconv(win, conv); pidgin_conv_window_show(win); } else { int max_count = purple_prefs_get_int("/plugins/gtk/extplacement/placement_number"); int count = pidgin_conv_window_get_gtkconv_count(win); if (count < max_count) pidgin_conv_window_add_gtkconv(win, conv); else { GList *l = NULL; for (l = pidgin_conv_windows_get_list(); l != NULL; l = l->next) { win = l->data; if (purple_prefs_get_bool("/plugins/gtk/extplacement/placement_number_separate") && purple_conversation_get_type(pidgin_conv_window_get_active_conversation(win)) != purple_conversation_get_type(conv->active_conv)) continue; count = pidgin_conv_window_get_gtkconv_count(win); if (count < max_count) { pidgin_conv_window_add_gtkconv(win, conv); return; } } win = pidgin_conv_window_new(); pidgin_conv_window_add_gtkconv(win, conv); pidgin_conv_window_show(win); } } }
/** * A conversation placement function to attach convs to the default Buddy List * * @param[in] gtkconv Pointer to a new conversation GUI needing to be placed **/ static void conv_placement_by_blist(PidginConversation *gtkconv) { PidginBuddyList * gtkblist; /*< The default Buddy List, to own the conv */ PidginWindow *gtkconvwin; /*< The Buddy List's associated conv window */ gtkblist = pidgin_blist_get_default_gtk_blist(); gtkconvwin = pwm_blist_get_convs(gtkblist); if (gtkconvwin != NULL) pidgin_conv_window_add_gtkconv(gtkconvwin, gtkconv); /* XXX: A fallback placement avoids segfaults after the plugin's * disabled. */ else pidgin_conv_placement_get_fnc("last")(gtkconv); }
static void stroke_new_win(GtkWidget *widget, void *data) { PidginWindow *new_win, *old_win; PurpleConversation *conv; conv = (PurpleConversation *)data; old_win = PIDGIN_CONVERSATION(conv)->win; if (pidgin_conv_window_get_gtkconv_count(old_win) <= 1) return; new_win = pidgin_conv_window_new(); pidgin_conv_window_remove_gtkconv(old_win, PIDGIN_CONVERSATION(conv)); pidgin_conv_window_add_gtkconv(new_win, PIDGIN_CONVERSATION(conv)); pidgin_conv_window_show(new_win); }