# HG changeset patch # User Eric Warmenhoven # Date 976612164 0 # Node ID a9cf2f61a7b137a61ac891c195f30798fc30cc63 # Parent cedf7047081e8ead3571f0d9908f83b2780684a0 [gaim-migrate @ 1245] 1. added protocol names to menus in conversation/join chat dialog. helpful if you're signed on as warmenhoven in both irc and yahoo. 2. made "no sounds when away" mean absolutely no sounds when away. 3. fixed buddy pounces and made it so you can save them. committer: Tailor Script diff -r cedf7047081e -r a9cf2f61a7b1 src/buddy.c --- a/src/buddy.c Mon Dec 11 13:06:03 2000 +0000 +++ b/src/buddy.c Tue Dec 12 09:09:24 2000 +0000 @@ -1295,7 +1295,7 @@ save_prefs(); } -void do_pounce(char *name) +void do_pounce(char *name, int when) { char *who; @@ -1311,6 +1311,8 @@ b = (struct buddy_pounce *)bp->data; bp = bp->next; /* increment the list here because rem_bp can make our handle bad */ + if (!(b->options & when)) continue; + u = find_user(b->pouncer, b->protocol); /* find our user */ if (u == NULL) continue; @@ -1318,13 +1320,13 @@ if (u->gc == NULL) continue; if (!strcasecmp(who, normalize(b->name))) { /* find someone to pounce */ - if (b->popup == 1) + if (b->options & OPT_POUNCE_POPUP) { c = find_conversation(name); if (c == NULL) c = new_conversation(name); } - if (b->sendim == 1) + if (b->options & OPT_POUNCE_SEND_IM) { c = find_conversation(name); if (c == NULL) @@ -1333,7 +1335,7 @@ write_to_conv(c, b->message, WFLAG_SEND, NULL); serv_send_im(u->gc, name, b->message, 0); } - if (b->cmd == 1) + if (b->options & OPT_POUNCE_COMMAND) { int pid = fork(); @@ -1350,7 +1352,8 @@ } } - rem_bp(NULL, b); + if (!(b->options & OPT_POUNCE_SAVE)) + rem_bp(NULL, b); } } diff -r cedf7047081e -r a9cf2f61a7b1 src/buddy_chat.c --- a/src/buddy_chat.c Mon Dec 11 13:06:03 2000 +0000 +++ b/src/buddy_chat.c Tue Dec 12 09:09:24 2000 +0000 @@ -33,6 +33,7 @@ #include #include "convo.h" +#include "prpl.h" #include "pixmaps/tb_forward.xpm" #include "pixmaps/join.xpm" @@ -88,6 +89,7 @@ GtkWidget *opt; GSList *c = connections; struct gaim_connection *g; + char buf[2048]; optmenu = gtk_option_menu_new(); gtk_box_pack_start(GTK_BOX(box), optmenu, FALSE, FALSE, 0); @@ -96,7 +98,8 @@ while (c) { g = (struct gaim_connection *)c->data; - opt = gtk_menu_item_new_with_label(g->username); + g_snprintf(buf, sizeof buf, "%s (%s)", g->username, (*g->prpl->name)()); + opt = gtk_menu_item_new_with_label(buf); gtk_object_set_user_data(GTK_OBJECT(opt), g); gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(joinchat_choose), g); gtk_menu_append(GTK_MENU(menu), opt); diff -r cedf7047081e -r a9cf2f61a7b1 src/conversation.c --- a/src/conversation.c Mon Dec 11 13:06:03 2000 +0000 +++ b/src/conversation.c Tue Dec 12 09:09:24 2000 +0000 @@ -35,6 +35,7 @@ #include #include "convo.h" #include "gtkspell.h" +#include "prpl.h" #include "pixmaps/underline.xpm" #include "pixmaps/bold.xpm" @@ -1646,6 +1647,7 @@ GtkWidget *menu, *opt; GSList *g = connections; struct gaim_connection *c; + char buf[2048]; if (g_slist_length(g) < 2) gtk_widget_hide(cnv->menu->parent); @@ -1654,7 +1656,8 @@ while (g) { c = (struct gaim_connection *)g->data; - opt = gtk_menu_item_new_with_label(c->username); + g_snprintf(buf, sizeof buf, "%s (%s)", c->username, (*c->prpl->name)()); + opt = gtk_menu_item_new_with_label(buf); gtk_object_set_user_data(GTK_OBJECT(opt), cnv); gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(convo_sel_send), c); diff -r cedf7047081e -r a9cf2f61a7b1 src/dialogs.c --- a/src/dialogs.c Mon Dec 11 13:06:03 2000 +0000 +++ b/src/dialogs.c Tue Dec 12 09:09:24 2000 +0000 @@ -122,6 +122,7 @@ GtkWidget *p_signon; GtkWidget *p_unaway; GtkWidget *p_unidle; + GtkWidget *save; GtkWidget *menu; struct aim_user *user; @@ -1009,35 +1010,28 @@ bp->protocol = b->user->protocol; + bp->options = 0; + if (GTK_TOGGLE_BUTTON(b->openwindow)->active) - bp->popup = 1; - else - bp->popup = 0; + bp->options |= OPT_POUNCE_POPUP; if (GTK_TOGGLE_BUTTON(b->sendim)->active) - bp->sendim = 1; - else - bp->sendim = 0; + bp->options |= OPT_POUNCE_SEND_IM; if (GTK_TOGGLE_BUTTON(b->command)->active) - bp->cmd = 1; - else - bp->cmd = 0; + bp->options |= OPT_POUNCE_COMMAND; if (GTK_TOGGLE_BUTTON(b->p_signon)->active) - bp->signon = 1; - else - bp->signon = 0; + bp->options |= OPT_POUNCE_SIGNON; if (GTK_TOGGLE_BUTTON(b->p_unaway)->active) - bp->unaway = 1; - else - bp->unaway = 0; + bp->options |= OPT_POUNCE_UNAWAY; if (GTK_TOGGLE_BUTTON(b->p_unidle)->active) - bp->unidle = 1; - else - bp->unidle = 0; + bp->options |= OPT_POUNCE_UNIDLE; + + if (GTK_TOGGLE_BUTTON(b->save)->active) + bp->options |= OPT_POUNCE_SAVE; buddy_pounces = g_list_append(buddy_pounces, bp); @@ -1215,6 +1209,15 @@ gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0); gtk_widget_show(sep); + b->save = gtk_check_button_new_with_label(_("Save this pounce after activation")); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->save), FALSE); + gtk_box_pack_start(GTK_BOX(vbox), b->save, FALSE, FALSE, 0); + gtk_widget_show(b->save); + + sep = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0); + gtk_widget_show(sep); + bbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); gtk_widget_show(bbox); diff -r cedf7047081e -r a9cf2f61a7b1 src/gaim.h --- a/src/gaim.h Mon Dec 11 13:06:03 2000 +0000 +++ b/src/gaim.h Tue Dec 12 09:09:24 2000 +0000 @@ -240,20 +240,25 @@ struct log_conversation *next; }; +#define OPT_POUNCE_POPUP 0x001 +#define OPT_POUNCE_SEND_IM 0x002 +#define OPT_POUNCE_COMMAND 0x004 + +#define OPT_POUNCE_SIGNON 0x010 +#define OPT_POUNCE_UNAWAY 0x020 +#define OPT_POUNCE_UNIDLE 0x040 + +#define OPT_POUNCE_SAVE 0x100 + struct buddy_pounce { char name[80]; char message[2048]; char command[2048]; - int popup; - int sendim; - int cmd; char pouncer[80]; int protocol; - int signon; - int unaway; - int unidle; + int options; }; struct away_message { @@ -648,7 +653,7 @@ extern void build_edit_tree(); extern void remove_person(struct group *, struct buddy *); extern void remove_category(struct group *); -extern void do_pounce(char *); +extern void do_pounce(char *, int); extern void do_bp_menu(); extern struct buddy *find_buddy(struct gaim_connection *, char *); extern struct group *find_group(struct gaim_connection *, char *); diff -r cedf7047081e -r a9cf2f61a7b1 src/gaimrc.c --- a/src/gaimrc.c Mon Dec 11 13:06:03 2000 +0000 +++ b/src/gaimrc.c Tue Dec 12 09:09:24 2000 +0000 @@ -283,27 +283,10 @@ g_snprintf(b->message, sizeof(b->message), "%s", p->value[1]); g_snprintf(b->command, sizeof(b->command), "%s", p->value[2]); - b->popup = atoi(p->value[2]); - b->sendim = atoi(p->value[3]); + b->options = atoi(p->value[3]); - /* Let's check our version and see what's going on here */ - if ((p->value[4]) && (strlen(p->value[4]) > 0)) - { - /* If we have data, lets use it */ - g_snprintf(b->pouncer, sizeof(b->pouncer), "%s", p->value[4]); - b->protocol = atoi(p->value[5]); - b->signon = atoi(p->value[6]); - b->unaway = atoi(p->value[7]); - b->unidle = atoi(p->value[8]); - b->cmd = atoi(p->value[9]); - } - else - { - /* Otherwise, we have old info. Let's adjust */ - b->signon = 1; - b->unaway = 0; - b->unidle = 0; - } + g_snprintf(b->pouncer, sizeof(b->pouncer), "%s", p->value[4]); + b->protocol = atoi(p->value[5]); filter_break(b->message); buddy_pounces = g_list_append(buddy_pounces, b); @@ -319,7 +302,7 @@ fprintf(f, "pounce {\n"); while (pnc) { - char *str1, *str2; + char *str1, *str2, *str3; b = (struct buddy_pounce *)pnc->data; @@ -330,12 +313,22 @@ str2 = malloc(1); str2[0] = 0; } + if (strlen(b->command)) + str3 = escape_text2(b->command); + else { + str3 = malloc(1); + str3[0] = 0; + } - fprintf(f, "\tentry { %s } { %s } { %d } { %d } { %s } { %d } { %d } { %d } { %d } { %d }\n", str1, str2, b->popup, b->sendim, b->pouncer, b->protocol, b->signon, b->unaway, b->unidle, b->cmd); + fprintf(f, "\tentry { %s } { %s } { %s } { %d } { %s } { %d }\n", + str1, str2, str3, + b->options, + b->pouncer, b->protocol); /* escape_text2 uses malloc(), so we don't want to g_free these */ free(str1); free(str2); + free(str3); pnc = pnc->next; } diff -r cedf7047081e -r a9cf2f61a7b1 src/server.c --- a/src/server.c Mon Dec 11 13:06:03 2000 +0000 +++ b/src/server.c Tue Dec 12 09:09:24 2000 +0000 @@ -336,8 +336,7 @@ } } if (cnv != NULL) { - if (sound_options & OPT_SOUND_WHEN_AWAY) - play_sound(RECEIVE); + play_sound(RECEIVE); write_to_conv(cnv, message, away | WFLAG_RECV, NULL); } @@ -454,7 +453,7 @@ if (!b->idle && idle) plugin_event(event_buddy_idle, gc, b->name, 0, 0); if (b->idle && !idle) { - do_pounce(b->name); + do_pounce(b->name, OPT_POUNCE_UNIDLE); plugin_event(event_buddy_unidle, gc, b->name, 0, 0); } @@ -462,7 +461,7 @@ b->evil = evil; if ((b->uc & UC_UNAVAILABLE) && !(type & UC_UNAVAILABLE)) { - do_pounce(b->name); + do_pounce(b->name, OPT_POUNCE_UNAWAY); plugin_event(event_buddy_back, gc, b->name, 0, 0); } else if (!(b->uc & UC_UNAVAILABLE) && (type & UC_UNAVAILABLE)) { plugin_event(event_buddy_away, gc, b->name, 0, 0); @@ -476,7 +475,7 @@ if (loggedin) { if (!b->present) { b->present = 1; - do_pounce(b->name); + do_pounce(b->name, OPT_POUNCE_SIGNON); plugin_event(event_buddy_signon, gc, b->name, 0, 0); } } else { diff -r cedf7047081e -r a9cf2f61a7b1 src/sound.c --- a/src/sound.c Mon Dec 11 13:06:03 2000 +0000 +++ b/src/sound.c Tue Dec 12 09:09:24 2000 +0000 @@ -406,6 +406,9 @@ void play_sound(int sound) { + if (awaymessage && !(sound_options & OPT_SOUND_WHEN_AWAY)) + return; + switch(sound) { case BUDDY_ARRIVE: if ((sound_options & OPT_SOUND_LOGIN) && logins_not_muted) {