Mercurial > pidgin
view src/prpl.c @ 1273:2153b0734e74
[gaim-migrate @ 1283]
import yahoo list (mostly so that it's used by bud_list_cache_exists and doesn't get used by other protocols)
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Thu, 14 Dec 2000 13:46:10 +0000 |
parents | 46c09828e929 |
children | b332d8f46b84 |
line wrap: on
line source
/* * gaim * * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "prpl.h" #include "pixmaps/ok.xpm" #include "pixmaps/cancel.xpm" extern void toc_init(struct prpl *); extern void oscar_init(struct prpl *); GSList *protocols = NULL; struct prpl *find_prpl(int prot) { GSList *e = protocols; struct prpl *r; while (e) { r = (struct prpl *)e->data; if (r->protocol == prot) return r; e = e->next; } return NULL; } static gint proto_compare(struct prpl *a, struct prpl *b) { /* neg if a before b, 0 if equal, pos if a after b */ return a->protocol - b->protocol; } void load_protocol(proto_init pi) { struct prpl *p = g_new0(struct prpl, 1); struct prpl *old; pi(p); if ((old = find_prpl(p->protocol)) == NULL) unload_protocol(old); protocols = g_slist_insert_sorted(protocols, p, (GCompareFunc)proto_compare); } void unload_protocol(struct prpl *p) { GSList *c = connections; struct gaim_connection *g; while (c) { g = (struct gaim_connection *)c->data; if (g->prpl == p) { char buf[256]; g_snprintf(buf, sizeof buf, _("%s was using %s, which got removed." " %s is now offline."), g->username, (*p->name)(), g->username); do_error_dialog(buf, _("Disconnect")); signoff(g); c = connections; } else c = c->next; } protocols = g_slist_remove(protocols, p); g_free(p); } void static_proto_init() { load_protocol(toc_init); #ifndef DYNAMIC_OSCAR load_protocol(oscar_init); #endif } static void des_win(GtkWidget *a, GtkWidget *b) { gtk_widget_destroy(b); } static int rem_win(GtkObject * a, GtkWidget *b) { gpointer d = gtk_object_get_user_data(a); gtk_signal_disconnect_by_data(GTK_OBJECT(b), d); gtk_widget_destroy(b); return TRUE; } void do_ask_dialog(const char *text, void *data, void *doit, void *dont) { GtkWidget *window; GtkWidget *vbox; GtkWidget *label; GtkWidget *hbox; GtkWidget *button; window = gtk_window_new(GTK_WINDOW_DIALOG); gtk_window_set_wmclass(GTK_WINDOW(window), "accept", "Gaim"); gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, TRUE); gtk_window_set_title(GTK_WINDOW(window), _("Accept?")); gtk_widget_realize(window); aol_icon(window->window); if (dont) gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(dont), data); vbox = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); gtk_container_add(GTK_CONTAINER(window), vbox); label = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); button = picture_button(window, _("Cancel"), cancel_xpm); gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(des_win), window); button = picture_button(window, _("Accept"), ok_xpm); gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); gtk_object_set_user_data(GTK_OBJECT(button), data); if (doit) gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(doit), data); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(rem_win), window); gtk_widget_show_all(window); }