Mercurial > pidgin.yaz
changeset 6388:9e49daffac97
[gaim-migrate @ 6893]
raw.so's code was so ugly.. I just had to rewrite part of it.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Wed, 06 Aug 2003 09:01:26 +0000 |
parents | b9c9f4d6f5d8 |
children | c05c02b6bfc8 |
files | plugins/raw.c |
diffstat | 1 files changed, 46 insertions(+), 67 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/raw.c Wed Aug 06 08:39:56 2003 +0000 +++ b/plugins/raw.c Wed Aug 06 09:01:26 2003 +0000 @@ -4,6 +4,7 @@ #include "debug.h" #include "prpl.h" #include "gtkplugin.h" +#include "gtkutils.h" #ifdef MAX # undef MAX @@ -16,22 +17,31 @@ #define RAW_PLUGIN_ID "gtk-raw" static GtkWidget *window = NULL; -static GtkWidget *optmenu = NULL; -static GaimConnection *gc = NULL; -static GaimPlugin *me = NULL; +static GaimAccount *account = NULL; +static GaimPlugin *my_plugin = NULL; -static int goodbye() +static int +window_closed_cb() { - gaim_plugin_unload(me); + gaim_plugin_unload(my_plugin); + return FALSE; } -static void send_it(GtkEntry *entry) +static void +text_sent_cb(GtkEntry *entry) { const char *txt; - if (!gc) return; + GaimConnection *gc; + + if (account == NULL) + return; + + gc = gaim_account_get_connection(account); + txt = gtk_entry_get_text(entry); - switch (gaim_connection_get_protocol(gc)) { + + switch (gaim_account_get_protocol(account)) { case GAIM_PROTO_TOC: { int *a = (int *)gc->proto_data; @@ -44,6 +54,7 @@ gaim_debug(GAIM_DEBUG_MISC, "raw", "TOC C: %s\n", txt); } break; + case GAIM_PROTO_MSN: { MsnSession *session = gc->proto_data; @@ -53,66 +64,29 @@ msn_servconn_write(session->notification_conn, buf, strlen(buf)); } break; + case GAIM_PROTO_IRC: write(*(int *)gc->proto_data, txt, strlen(txt)); write(*(int *)gc->proto_data, "\r\n", 2); gaim_debug(GAIM_DEBUG_MISC, "raw", "IRC C: %s\n", txt); break; + case GAIM_PROTO_JABBER: jab_send_raw(*(jconn *)gc->proto_data, txt); break; + + default: + break; } + gtk_entry_set_text(entry, ""); } -static void set_gc(gpointer d, GaimConnection *c) -{ - gc = c; -} - -static void redo_optmenu(GaimConnection *arg, gpointer x) +static void +account_changed_cb(GtkWidget *dropdown, GaimAccount *new_account, + void *user_data) { - GtkWidget *menu; - GList *g = gaim_connections_get_all(); - GaimConnection *c; - GaimAccount *account; - GaimPlugin *plugin; - - menu = gtk_menu_new(); - gc = NULL; - - while (g) { - char buf[256]; - GtkWidget *opt; - c = (GaimConnection *)g->data; - g = g->next; - if (x && c == arg) - continue; - if (gaim_connection_get_protocol(c) != GAIM_PROTO_TOC && - gaim_connection_get_protocol(c) != GAIM_PROTO_MSN && - gaim_connection_get_protocol(c) != GAIM_PROTO_IRC && - gaim_connection_get_protocol(c) != GAIM_PROTO_JABBER) - continue; - if (!gc) - gc = c; - - account = gaim_connection_get_account(c); - - plugin = gaim_find_prpl(gaim_account_get_protocol(account)); - - g_snprintf(buf, sizeof buf, "%s (%s)", - gaim_account_get_username(account), - plugin->info->name); - - opt = gtk_menu_item_new_with_label(buf); - g_signal_connect(G_OBJECT(opt), "activate", G_CALLBACK(set_gc), c); - gtk_widget_show(opt); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt); - } - - gtk_option_menu_remove_menu(GTK_OPTION_MENU(optmenu)); - gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu); - gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), 0); + account = new_account; } static gboolean @@ -120,25 +94,30 @@ { GtkWidget *hbox; GtkWidget *entry; + GtkWidget *dropdown; - gaim_signal_connect(plugin, event_signon, redo_optmenu, NULL); - gaim_signal_connect(plugin, event_signoff, redo_optmenu, me); - + /* Setup the window. */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + g_signal_connect(G_OBJECT(window), "delete_event", - G_CALLBACK(goodbye), NULL); + G_CALLBACK(window_closed_cb), NULL); - hbox = gtk_hbox_new(FALSE, 0); + /* Main hbox */ + hbox = gtk_hbox_new(FALSE, 6); gtk_container_add(GTK_CONTAINER(window), hbox); - optmenu = gtk_option_menu_new(); - gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 5); + /* Account drop-down menu. */ + dropdown = gaim_gtk_account_option_menu_new(NULL, FALSE, + G_CALLBACK(account_changed_cb), NULL); + + gtk_box_pack_start(GTK_BOX(hbox), dropdown, FALSE, FALSE, 0); - redo_optmenu(NULL, NULL); - + /* Entry box */ entry = gtk_entry_new(); - gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 5); - g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(send_it), NULL); + gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0); + + g_signal_connect(G_OBJECT(entry), "activate", + G_CALLBACK(text_sent_cb), NULL); gtk_widget_show_all(window); @@ -182,7 +161,7 @@ static void init_plugin(GaimPlugin *plugin) { - me = plugin; + my_plugin = plugin; } GAIM_INIT_PLUGIN(raw, init_plugin, info)